编辑:解决了另一种方式 等级= [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))
答案 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')]