变量不希望得到定义和一般建议

时间:2015-12-24 00:45:01

标签: python

只是在这里随便学习python并尝试编写fizzbuzz。我正在读一本书让我开始,但只是想自己尝试一些东西,因为我认为这对我来说是最好的,因为它通常在学习东西的时候。所以这就是我所拥有的:

def input_and_test():
    print "Gimme something and it better be a number or shit ain't gon work"
    inputt = raw_input()
    inputt = str(inputt)

    try:
        input_data_type = int(inputt)
    except ValueError:
        print "Yeah that sure as hell ain't a number, sonny"
        input_and_test()
    else:
        print 'Great, now lemme check'

input_and_test()

input_lenght = len(inputt)
input_lenght = int(int(input_lenght) - 1)
last_number = inputt[input_lenght]

if input == 1:
    print 'Even'
elif last_number == 0 or last_number == 2 or last_number == 4 or last_number == 6 or last_number == 8:
    print 'Even'
else:
    print 'Odd'

现在我确信这是非常低效的,但这并不重要,因为我想学习如何以这种方式做到这一点。它会引发此错误:

Traceback (most recent call last):
  File "C:\Python27\test.py", line 16, in <module>
    input_lenght = len(inputt)
NameError: name 'inputt' is not defined

为什么呢?我没有在我刚刚调用的第一个函数中定义inputt吗?有没有更好的方法来替换异常处理并再次启动功能部分修复所有这些?关于这段代码的任何不好的事情(除了它不是最佳的fizzbuzz),我将来应该避免吗?再次抱歉这是非常糟糕的,这个问题很可能是非常简单的。我感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

正如Barmar在评论中所说,您应该使用button将您的函数输出输出到调用代码中。通过return

,您可以更好地编写功能
return

在上面的代码中,我单独留下了您的变量名称,并在两个地方使用了名称def input_and_test(): print "Gimme something and it better be a number or shit ain't gon work" inputt = raw_input() inputt = str(inputt) try: input_data_type = int(inputt) except ValueError: print "Yeah that sure as hell ain't a number, sonny" return input_and_test() else: print 'Great, now lemme check' return inputt inputt = input_and_test() input_lenght = len(inputt) input_lenght = int(int(input_lenght) - 1) last_number = inputt[input_lenght] if input == 1: print 'Even' elif last_number == 0 or last_number == 2 or last_number == 4 or last_number == 6 or last_number == 8: print 'Even' else: print 'Odd' 。但这可能会让您感到困惑,因为函数内的inputt 与函数外的inputt 不是同一个变量。所以我将你的函数内部变量重命名为另一个名称(就我个人而言,我喜欢使用名称inputt作为&#34;此函数最终要返回的值),以便你会更容易看到发生了什么:

result

在那里,现在两个不同的变量有两个不同的名称。

现在,你看到我在函数中有两个不同的def input_and_test(): print "Gimme something and it better be a number or shit ain't gon work" result = raw_input() result = str(result) try: input_data_type = int(result) except ValueError: print "Yeah that sure as hell ain't a number, sonny" return input_and_test() else: print 'Great, now lemme check' return result inputt = input_and_test() input_lenght = len(inputt) input_lenght = int(int(input_lenght) - 1) last_number = inputt[input_lenght] if input == 1: print 'Even' elif last_number == 0 or last_number == 2 or last_number == 4 or last_number == 6 or last_number == 8: print 'Even' else: print 'Odd' 语句吗?你明白为什么,或者你是否需要我扩展这个答案来解释为什么return行是必要的?

答案 1 :(得分:1)

您必须从函数中返回值。

input_and_test结束时添加:

return inputt

然后,在您调用input_and_test的每个地方,存储值:

inputt = input_and_test()

您必须这样做,因为inputtinput_and_test内的局部变量,所以每次调用该函数时,都会在其中创建一个新的inputt变量。函数退出后,变量就消失了。