【问题标题】:Random number generator name of obj input is not defined未定义 obj 输入的随机数生成器名称
【发布时间】:2014-12-18 15:32:55
【问题描述】:

我正在尝试编写一个简单的随机数生成器,刚开始学习 python,但我用 C 和 matlab 编程,可能对我不利。我在想我的代码的问题在于范围,但是如果我将 obj 移动到第一个 while 循环内,我无法弄清楚第一个 while 循环应该具有什么条件。我的代码在下面,我得到的错误如下。

我使用的输入是y。我的问题真的不是关于随机数生成器,或者将一些代码放入函数中,因为我可以稍后再处理。这是学习的第一次尝试 语法等

代码:

import random
count = 0
obj = 'y'
exit = 0

while obj.strip() != 'n' or obj.strip() != 'N':
    count = count + 1; #counter keeps track of number of random dice rolls
    if 1 == count:
        print 'Welcome to Random Number Generator'
        print'Your first roll is a', random.randrange(0,10)
        print ''
    elif 1 < count:
        print random.randrange(0,10)

    while obj.strip() != 'y' or obj.strip() != 'Y' or obj.strip() != 'n' or obj.strip() != 'N':
        exit = exit + 1;
        obj = input("Continue? Y/N")
        if 1 < exit:
            print 'Invalid input!'
            print 'Please press Y to continue or N to quit.'

错误:

Traceback (most recent call last):
    File "RandomNumber.py", line 32, in <module>
        obj = input("Continue? Y/N")
    File "<string>", line 1, in <module>
NameError: name 'y' is not defined

【问题讨论】:

    标签: python loops random while-loop scope


    【解决方案1】:

    while 循环内的第一行有一个分号。

    while obj.strip() != 'y' or obj.strip() != 'Y' or obj.strip() != 'n' or obj.strip() != 'N':
        exit = exit + 1;   <---------- here
        obj = input("Continue? Y/N")
        if 1 < exit:
            print 'Invalid input!'
            print 'Please press Y to continue or N to quit.'
    

    【讨论】:

    • 哎呀,这是 matlab 的一个习惯。但是,删除它不会改变错误。
    • 您在删除分号时遇到了同样的错误?删除分号时是否可能弄乱了缩进?
    • 我不这么认为。我会怀疑这是错误,但它似乎并没有解决它。我仔细检查了我的缩进。
    • 分号很好(无论如何,在语法上)。它用于在一行中分隔多个语句(例如,print 1; print 2),但可以像在print 3; 中一样轻松地放在行尾。
    【解决方案2】:

    如果您使用的是 Python 2(相信我),您应该知道input 会从用户那里得到一些东西然后尝试评估它。

    这就是它抱怨y这个名字的原因。您输入 y 以回答问题 Continue? Y/N,然后它会愉快地尝试并评估您的输入。

    事实上,如果您在输入语句之前放置y = "n" 行,当您试图弄清楚它为什么忽略您的继续请求时,您会感到非常焦虑和咬牙切齿:-)

    要查看实际情况,请尝试在以下程序中输入7 + 2

    print input("? ")
    

    你会看到它输出9

    你应该改用raw_input,它不会尝试评估你给它的东西(如果你在上面的程序中将input更改为raw_input,输出是7 + 2 而不是9)。

    在 Python 3 中,input 的行为方式不那么、呃……令人惊讶。

    【讨论】:

    • 这就是问题所在,谢谢。这是一个如此简单的问题,我应该在谷歌搜索 input() 时更彻底一点
    猜你喜欢
    • 2014-10-16
    • 2013-01-19
    • 2014-01-23
    • 2017-03-22
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    相关资源
    最近更新 更多