-1

编辑:以另一种方式解决了 Grades=[71,70,72] results=['y','n','x'] for index, grade in enumerate(grades): grades.index(grade) if grade in grades:成绩=输入('成绩:')打印(成绩[索引],结果[索引]) ...................... ..................................................... ……

我的代码应该给

>>>71
[71, 'y']
>>>70
[70, 'n']
>>>72
[72, 'error']

但它需要随机(?)值形成我的 if 语句。它给

>>> 
grade: 71
[72, 'n']
grade: 

另外,我在 input() 行得到一个 EOFerror,如果我把 raw_input()

代码是:

grades = [70,71,72]
result1 = 'y'
result2 = 'n'
result3 = 'error'
r = 'x'
grade = input('grade: ')

def get_result(r):   
    """
    (str) -> (str)
    you're in or out

    >>>71
    [71, 'y']

    >>>70
    [70, 'n']

    >>>72
    [72, 'error']

    """

    r = 'x'
    for grade in grades:
        list=[grade, r]

        if grade is 71:
            r = result1             
        elif grade is 70:
            r = result2           
        else:
            r = result3           
    return(list)
print(get_result(r))
4

1 回答 1

4
r = 'x'
for grade in grades:
    list=[grade, r]

    if grade is 71:
        r = result1             
    elif grade is 70:
        r = result2           
    else:
        r = result3
return(list)

这些if语句都不会改变任何东西,因为您已经list=[grade, r]使用 的旧值进行了创建r,并且永远不会使用 的新值做任何事情r

尝试在语句list=[grade, r]之后移动。if

但是,当您使用它时,您真的不应该命名变量list,因为这是内置类型的名称。

而且,你不会对变量做任何事情,而是返回它,所以你甚至都不需要它。

所以:

    if grade is 71:
        r = result1             
    elif grade is 70:
        r = result2           
    else:
        r = result3
    return [grade, d]

但是,您的代码还有一些其他问题。一方面,您正在遍历grades,每个都重新定义list,因此您只返回最后一个。那么循环的意义何在?我想你想要这样的东西:

retval = []
for grade in grades:
    r = 'x'
    if grade is 71:
        r = result1             
    elif grade is 70:
        r = result2           
    else:
        r = result3
    retval.append([grade, r])
return retval

此外,您可能需要考虑将结果放入 adict中,而不是放入三个单独的变量中,因为它会使您的代码更简单:

results = { 71: 'y', 70: 'n', 72: 'error' }
retval = []
for grade in grades:
    retval.append([grade, results.get(grade, 'x')])
return retval

而且您可能会认识到“创建一个空列表,围绕附加到它做一个简单的循环”的模式正是列表推导的用途,因此您可以使其更简单:

results = { 71: 'y', 70: 'n', 72: 'error' }
return [[grade, results.get(grade, 'x')] for grade in grades]

同时,为什么您将r参数传递给get_result,而您从不访问它,实际上您重新绑定r到局部变量?(如果你运行pylint或类似的工具,它会捕捉到这样的问题。)也许你真正想要的是一个grades参数?

从您后来的评论中,听起来您真正想要的是一个grade参数,因此您可以获得特定成绩的结果。您不需要为此遍历每个年级。让我们稍微改写一下:

def get_result(grade):
    return [grade, results.get(grade, 'x')]

而已。现在,这是整个脚本:

results = { 71: 'y', 70: 'n', 72: 'error' }

def get_result(grade):
    return [grade, results.get(grade, 'x')]

grade = input('grade: ')
print(get_result(grade))
于 2012-12-13T21:13:11.730 回答