在Python2.7中,如何计算以空格分隔的多个输入?

2024-06-02 11:23:25 发布

您现在位置:Python中文网/ 问答频道 /正文

def checkGrade(raw):
    ''' (int) -> object (i.e., int OR str)
     Assign grade from raw score
    >>> checkGrade(74)
    3
    >>> checkGrade(82)
    4
    >>> checkGrade(-5)
    'Error, raw score exceed min score'
    >>> checkGrade(210)
    'Error, raw score exceed max score'
    '''
    if raw>100:
        score = "Error, raw score exceed max score" 
    elif raw>80:
        score = 4.00
    elif raw>70:
        score = 3.00
    elif raw>60:
        score = 2.00
    elif raw>50:
        score = 1.00
    elif raw>0:
        score = 0
    else:
        score = "Error, raw score exceed min score" 
    return score

现在我想做这样的事情(显示在docstring中):

^{pr2}$

原始标记输入在一个由空格分隔的字符串中。如何使用checkGrade()函数从这样的输入计算GPA?我试过了:

map(int, s.split())

但它不起作用。在


编辑以添加新需求

如果我想把所有的输入都改成像calGPA("A B C D F")而不是calGPA("80 70 63 55 40"),如果输入包含除“A”、“B”、“C”、“D”、“F”之外的任何内容,比如calGPA("A C B Z S"),那么输出应该是“Error”。如果一个元素不是“A”、“B”、“C”、“D”、“F”,我该怎么做才能得到“Error”?在


Tags: orrawobjectdeferrorminmaxint
3条回答

CalGPA(int(x) for x in s.split())将起作用。在

您需要分割包含原始标记的字符串,然后使用checkGrade函数来获取该原始标记的分数。试试这个:

def checkGrade(raw):
    if raw>100:
        score = "Error, raw score exceed max score" 
    elif raw>80:
        score = 4.00
    elif raw>70:
        score = 3.00
    elif raw>60:
        score = 2.00
    elif raw>50:
        score = 1.00
    elif raw>0:
        score = 0
    else:
        score = "Error, raw score exceed min score" 
    return score

def calGPA(s):
    raw_marks = s.split()
    num_subjects = len(raw_marks)
    if num_subjects > 10:
         print('Limit for number of subjects exceeded')
         return
    total = 0
    for raw in raw_marks:
        total += checkGrade(int(raw))
    print('GPA: {}'.format(total/num_subjects))

calGPA("77 45 77 55 87")

输出:

^{pr2}$

编辑以反映您的新要求

def calGPA(s):
    gpas = s.split()
    valid_grades = ['A', 'B', 'C', 'D', 'F']
    if not all(gpa in valid_grades for gpa in gpas):
        print("Error")

p.S.:编辑问题使当前接受的答案无效是不允许并且非常不鼓励。

只需将字符串中的所有项转换为整数,然后将该函数应用于每个浇铸的数字,如下所示

checkGPA = lambda data: map(checkGrade, map(int, data.split())) # apply the function to int

相关问题 更多 >