我收到一个NameError:我是Python新手

时间:2019-05-06 23:40:06

标签: python python-3.x

flag = True
principleAmount = float(input("Please enter a principal amount: "))
while(flag):
    userInput = str(input("(s)imple or (c)ompound interest? "))
    if userInput in ['s', 'S']:
        print("hello")
    elif userInput in ['c', 'C']:
        print("goodbye")
    else: 
        print("wrong!")

由于某种原因,这是我得到的错误: 文件“”,第1行,位于 NameError:名称“ s”未定义 c也一样。 我试图用打招呼,再见和错误来测试它,但不幸的是它没有用

2 个答案:

答案 0 :(得分:0)

您的代码可以正常工作,只是while循环可以永久运行。

答案 1 :(得分:0)

您的代码在Python 3中应该能正常工作(除了永远不会退出,因为您不会更改flag的值)。

但是您看到的错误仅在Python 2 中才有意义,其中input被实现为接受字符串并eval对其进行处理。这将说明错误的行号(第1行没有任何可能引发NameError,但eval有效地将被评估为从头开始在第1行开始的代码)和错误({ {1}} eval中的input会尝试查找名为s的变量,但不会产生值为s的字符串。

因此,解决您的主要问题的方法是

  1. 实际上可以在Python 3而不是Python 2上运行,或者
  2. 's'的所有用法更改为input(这与Python 2的Python 3的raw_input函数等效,该函数接受字符串而无需尝试input)< / li>

在这里,您可以:

  1. 因为第二个eval / Py3 str()已被保证返回input,并删除{ {1}}只是多余的拇指摆动
  2. raw_input(或input)添加到受str控制的块中,因此当您说str时,您实际上终止了循环。