Python - NameError:name' input'未定义

时间:2015-08-02 02:01:08

标签: python input nameerror

我正在尝试在Python上构建一个程序。这是问题所在的程序的一部分。当我在Python中运行它时,它会运行第一行'task_name = input("什么是任务")但是当我通过Python可视化工具时,它给了我这个错误:NameError:name&# 39;输入'没有定义。下面的这个程序只是我的程序的开始,在运行这个程序后我需要它来运行我的程序的其余部分,但它停止并重复这个部分。对不起,如果我没有解释清楚这一点,请问你是否理解。请回答,明天我需要完成这个程序! 我使用了python visualizer http://www.pythontutor.com/visualize.html#mode=display,我正在使用Python 3.2.1.1

newTask = "y"
while newTask == "y":
    try:
        numStudents = int(input("How many students are there?"))
    except ValueError:
             print("An integer please")
             continue
    else:
             if numStudents <=1:
                  print("You must enter more than 1 student.")
    task_name = input("What is the task?")
while numStudents == 0:
  for i in range (1,numStudents):
    cont = "y"
    while cont == "y":
        import random
        vol_num = random.randint (1,numStudents)
        print(vol_num) #remove, needs to be hidden
        break

        print("The task is", task_name, ".", "If your number matches the secret number you must complete this task. Good luck!!")
        print("There are", numStudents-student_num, "numbers left which means you have 1 chance in", numStudents, "of being the volunteer!")

        student_name = input("What is your name? Please enter your first name in letters with a maximum of 15.")
        while student_name.isalpha() != True or len(task_name) > 15:
            print("Your first name must be entered in letters with a maximum of 15 letters.")
            student_name = input("What is your name?")

        student_num == 0
        while student_num == 0:
            try:
                student_num = int(input("What is your number? Please enter it as an integer."))
            except ValueError:
                print("You number must be entered as an integer.")
                continue
            else:
                if student_num < 1 or student_num > numStudents:
                    print("That is not a valid number. Please enter the number you were given.")
                    student_num = int(input("What is your number?"))

        if student_num == vol_num:
                print("You are the volunteer! Please complete the task of", task_name, ".")
        else:
                    print("You were lucky this time! You do not have to complete the task!")

        cont = input("Are you the next student? y/n")
        while cont == "n":
            newTask = input("Would you like to enter a new task? (y/n")

3 个答案:

答案 0 :(得分:1)

您收到的错误是因为Python Visualiser没有允许用户输入数据的机制。

您需要Download and install Python才能按照自己的意愿以交互方式使用它。

其他

第一次:

while newTask == "y":

正在产生无限循环,因为它没有在循环内的任何位置设置newTasktask_name可能是您打算使用newTask的地方。

或者我不确定循环的正确性是什么循环 - 下面的代码可能更合适:

numStudents = 0
while numStudents < 2:
    try:
        numStudents = int(input("How many students are there?"))
    except ValueError:
             print("An integer please")
             continue
    else:
             if numStudents <=1:
                  print("You must enter more than 1 student.")
# The line below doesn't make much sense in this code block so I've commented it out
#    task_name = input("What is the task?")

另一种选择是你没有在task_name = input("What is the task?")行之后缩进大部分代码,导致无限循环而不是遍历代码。在这种情况下,您需要将上面的循环合并到while newTask == "y": 循环中。

答案 1 :(得分:1)

while循环当前将永远运行,因为大小写总是正确的, newTask ==“y”。为了退出循环,newTask需要设置为“y”以外的其他内容,导致case变为false,newTask =“n”。

另一方面,似乎你的程序根本不需要在newTask while循环中,因为你正在存储一个数字和字符串的数据。所以你可以像这样重写你的程序:

    numStudents = 0 

    while numStudents <= 1:
        try:
            numStudents = int(input("How many students are there?"))
        except ValueError:
            print("An integer please")
        else:
            if numStudents <= 1:
                print("You must enter more than 1 student.")

    task_name = input("What is the task?")

答案 2 :(得分:1)

我不打算重写你的整个程序,但我会给你一些应该有所帮助的指示。

另外,为什么你试图破坏你的帖子?一旦发布了答案,就不能删除它(除非在某些情况下由社区成员除外,即使这样,高代表用户仍然可以看到它)。此处发布的所有内容均在CC-BY-SA 3.0attribution required下获得许可,如每页底部所列。基本上,只要你发布一些东西,它就像编辑一篇维基百科文章一样 - 它永远存在,即使有人编辑它。基本上,将其删除完全需要互联网相当于神的行为(Stack Exchange系统管理员)。

无论如何,如果您还没有,download Python 3.4.3(当前版本的Python 3)并将其安装在您的计算机上。如果由于某种原因你不能这样做(公共/共享工作站等),那么使用像PythonAnywhere这样的免费云网站 - 所有帐户都需要一个电子邮件地址。如果您在自己的计算机上工作,我也高度建议安装编程编辑器,如Sublime Text 3。它包括许多很酷的功能,如语法高亮,自动括号匹配等。 *

* 如果您想稍微了解一下,请安装Package Control,然后安装以下插件:AnacondaPython ImprovedNeon Color Scheme。我写了最后2个来帮助Python编程。他们不是必需的,但对我很有帮助。因人而异。只是一个注释 - 也许保存所有这些东西,直到 你的任务完成后。用闪亮的新东西分散注意力很容易:)

好的,关于程序本身。在Sublime或PythonAnywhere中加载它们,两者都有行号(如果您正在编程,这是一个非常重要的功能)。我会在您的问题中使用该程序的行号currently shown

第一件事:看你的缩进。 Sublime有一个很棒的功能,你可以用垂直线显示你的缩进块应该在哪里(如果你安装Neon,它们是深灰色和不显眼的,同时仍然可见)。它们应该默认打开。请记住,缩进在Python中非常重要,变量缩进可能会导致错误。每个缩进的块应该是4个空格深,不多也不少,并且非常强烈推荐不使用制表符。第6,7,9和10行是过度缩进的(9个空格用于6,7和9而不是4个,5个空格用于10个而不是4个与上面的行相比)。在Sublime中,您可以突出显示某些文本,然后使用 Ctrl [将其向左移动,或者 Ctrl ]更改其缩进向右移动(在OS X上使用而不是 Ctrl )。第二个while循环中还有更多缩进问题。

第2行开始一个while循环,直到第11行。关于while循环要记住的事情是,必须有某种方式来改变循环&# 39; s测试条件在循环内部。这里的测试条件是newTask == "y"。除非newTask在循环内更改为"y"以外的某个值,否则它将永远继续。 break语句或未处理的ErrorException也会导致while循环。由于newTask仅在 next while循环的最底部进行了更改,因此您可能希望缩进整个第二个循环,以使其包含在第一个循环中。我不知道你的计划的最终目的是什么,所以你必须自己解决这个问题。

第二个while循环从以下开始:

while numStudents == 0:
  for i in range (1,numStudents):

假设您修复了第一个循环的问题,这将无效,并可能锁定您的程序。在命令行启动Python(或在PythonAnywhere中打开一个新的Python 3.4控制台)并运行以下命令:

list(range(1, 0))

你会得到

[]

作为输出。 range()功能的签名是

range(stop)
range(start, stop[, step])

意味着如果传递了1个参数,range()会产生一个从0到整数之前的序列 stop(要记住这一点非常重要)。如果传递了2个参数,则序列从第1个(start)到第2个之前的数字(stop),增量为1或step(如果存在)。 stop可能会小于start,会产生一系列数字而不是增加,如果 step也是负数:

>>> list(range(10, 1))
[]
>>> list(range(10, 1, -1))
[10, 9, 8, 7, 6, 5, 4, 3, 2]

您对range()的通话不会产生任何结果,因此第13行以下的任何内容都不会运行。它将循环回到第12行,它仍将评估为True,因为numStudents尚未更改,因此此循环也将永久运行。

希望这会给你足够的开始。考虑每个代码块,以及为执行它而设置的条件。确保所测试的条件在某些时候发生变化,否则你最终会遇到无限循环,或者根本没有执行代码块。使使用交互式控制台来测试代码片段,以确保他们在将所有内容组合在一起之前执行您认为应该执行的操作。

祝你好运!