本学期我正在学习Python,这是我的作业。
有谁能告诉我为什么我的代码错了?
问题:
你想知道你在计算机科学中的成绩,所以写一个程序,连续将0到100之间的等级输入到标准输入,直到你输入“停止”,此时它应该将你的平均值打印到标准输出。
我的代码:
total=0
count=0
while True:
grade=input("Enter Your Grades between 0 and 100 [put 'stop' when done]:")
if grade<0 or grade>100:
print("Invalid Input")
continue
elif grade=="stop":
break
else:
count+=1
total+=grade
print "Your Average Grade is:"+format(total/count,'.2f')
当我运行代码时,Python不断给我这样的消息:
答案 0 :(得分:0)
您在Python 2中运行此程序,其中input
评估用户输入。因此,如果输入“stop”,Python会尝试查找不存在的变量stop
并引发NameError
。
还有更多问题需要重新构建代码。您应该做的第一件事是将input
更改为raw_input
,它只是将用户输入作为字符串返回。然后,您需要检查用户是否输入“stop”并中断,否则将输入字符串转换为int,然后递增count
和total
。
总数= 0
count = 0
while True:
grade = raw_input("Enter Your Grades between 0 and 100 [put 'stop' when done]:")
if grade == "stop":
break
# Skip if the string can't be converted to an int.
if not grade.isdigit():
print("Invalid Input")
continue
# Now convert the grade to an int.
grade = int(grade)
if grade < 0 or grade > 100:
print("Invalid Input")
continue
else:
count += 1
total += grade
# Convert total to a float for true division.
print "Your Average Grade is: {:.2f}".format(float(total)/count)
答案 1 :(得分:0)
将input
更改为raw_input
grade = raw_input("Enter Your Grades between 0 and 100 [put 'stop' when done]:")
答案 2 :(得分:0)
您使用的是Python 2.7,因此请使用raw_input
代替input
。后者评估输入,因此5 + 2
将返回7
而不是字符串'5 + 2'
。输入stop
会尝试将stop
评估为不存在的变量。
另一个注释,total
和count
都是整数,因此total/count
在Python 2中执行整数除法(Python 3给出了浮点结果)。如果您想要浮点平均值,请使用float(total)/count
。其中一个变量必须是float才能获得浮动答案。
您还会发现grade
是字符串,因此首先测试'stop'
,然后将其转换为int
以测试成绩grade = int(grade)
。您可能想要考虑处理错误。如果用户键入10a
?
答案 3 :(得分:0)
您可以先评估字符串停止,尝试使用raw_input
total = 0
count = 0
while True:
grade = raw_input("Enter Your Grades between 0 and 100 [put 'stop' when done]:")
if grade == "stop":
break
if grade.isdigit():
grade = int(grade)
if grade < 0 or grade > 100:
print("Invalid Input")
continue
else:
count += 1
total += grade
if count == 0:
print "Empty values"
else:
print "Your Average Grade is: %.2f" % (float(total)/count)
我为正确的执行添加了不同的条件,检查行,例如if grade.isdigit():
以验证输入值是否为数值,当此评估我们可以正常地使用任何数学计算。
count == 0:
,则 stop
将错误除以零。
在最后一行中,您可以使用两种不同的方式来打印值:
print "Your Average Grade is: %.2f" % (float(total)/count)
或
print "Your Average Grade is: {:.2f}".format(float(total)/count)