来自if语句的结果

时间:2012-12-13 20:48:30

标签: python if-statement eoferror

编辑:解决了另一种方式 等级= [71,70,72] 结果= [ 'Y', 'N', 'X'] 索引,枚举等级(等级):     grades.index(级)     如果成绩等级:         等级=输入('等级:')         print(grade [index],results [index]) .................................................. ...................................

我的代码应该给出

>>>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))

1 个答案:

答案 0 :(得分:3)

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,并且永远不会对{的新值做任何事情{1}}。

尝试在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,所以你只返回最后一个。{1}}。那么循环的重点是什么?我想你想要这样的东西:

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 而不是三个单独的变量,因为它会使您的代码更简单:

dict

你可能会认识到“制作一个空列表,做一个简单的循环附加到它”的模式,正如列表理解所针对的那样,所以你可以使这更简单:

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')]