所以我试图获得两个输入,用信用小时分隔用户名,每次我退出循环后都会出现意外的EOF。
fresh = []
soph = []
jun = []
sen = []
def classify(cr, un):
if cr <= 27:
fresh.append(un)
print(un, 'is a freshman.\n')
elif 28 <= cr <= 56:
soph.append(un)
print(un, 'is a sophomore.\n')
elif 57 <= cr <= 84:
jun.append(un)
print(un, 'is a junior.\n')
elif cr >= 85:
sen.append(un)
print(un, 'is a senior\n')
def main():
un = input('Student: ')
cr = eval(input('Credits: '))
while un and cr != '':
un = input('Student: ')
cr = eval(input('Credits: '))
classify(cr, un)
具体而言,我得到的错误是:
File "./class.py", line 58, in <module>
main()
File "./class.py", line 51, in main
cr = eval(input('Credits: '))
File "<string>", line 0
我不确定它是否相关(或者它是否只是我忽略的东西)但我必须通过Credit输入才能退出循环。由于AND运算符,当Student出现时按下回车后是否不应该退出循环?
编辑:添加了classify func。我不认为这是问题,我已经尝试删除它,它仍然让我回到EOF。
答案 0 :(得分:1)
您不应该使用eval()
将字符串转换为整数。请改用int
。
def main():
un = input('Student: ')
cr = input('Credits: ')
classify(int(cr), un)
while un and cr:
un = input('Student: ')
cr = input('Credits: ')
classify(int(cr), un)
即使在跳过学生姓名后仍必须输入学分,因为while
条件仅在进入代码块之前评估,而不是在块中的每个语句之后评估。如果您希望在用户跳过学生或学分值时立即停止,请执行以下操作:
def main():
while 1:
un = input('Student: ')
if not un: break
cr = input('Credits: ')
if not cr: break
classify(int(cr), un)
当然,对Python 3使用input
,对Python 2使用raw_input
。