在Python 2中使用输入后的NameError

时间:2017-09-20 03:58:54

标签: python python-2.x

本学期我正在学习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不断给我这样的消息:

Screenshot

4 个答案:

答案 0 :(得分:0)

您在Python 2中运行此程序,其中input评估用户输入。因此,如果输入“stop”,Python会尝试查找不存在的变量stop并引发NameError

还有更多问题需要重新构建代码。您应该做的第一件事是将input更改为raw_input,它只是将用户输入作为字符串返回。然后,您需要检查用户是否输入“stop”并中断,否则将输入字符串转换为int,然后递增counttotal。     总数= 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评估为不存在的变量。

另一个注释,totalcount都是整数,因此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)