Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 变量不';I don’我不想得到定义和一般建议_Python - Fatal编程技术网

Python 变量不';I don’我不想得到定义和一般建议

Python 变量不';I don’我不想得到定义和一般建议,python,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) t

只是在这里随便学习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
回溯(最近一次呼叫最后一次):
文件“C:\Python27\test.py”,第16行,在
输入长度=长度(输入)
名称错误:未定义名称“input”

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

正如Barmar在评论中所说,您应该真正使用
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'
在上面的代码中,我只留下了变量名,名称
input
在两个地方使用。但这可能会让您感到困惑,因为函数内部的
input
变量与函数外部的
input
变量不同。因此,我将您的函数变量内部重命名为不同的名称(我个人喜欢使用名称
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
语句了吗?您是否清楚这是为什么,或者您是否需要我在这个答案上进行扩展,以解释
return input_和_test()的原因
行是必需的?

正如Barmar在一篇评论中所说,您应该真正使用
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'
在上面的代码中,我只留下了变量名,名称
input
在两个地方使用。但这可能会让您感到困惑,因为函数内部的
input
与函数外部的
input
不是同一个变量。因此,我会将函数内部的变量重命名为不同的名称(就个人而言,我喜欢使用名称
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
语句了吗?您是否清楚为什么,或者您是否需要我在这个答案上展开,以解释为什么需要
return input\u and\u test()
行?

您必须从函数返回值

输入和测试的末尾添加:

return inputt
然后,在调用
输入和测试的每个地方,存储以下值:

inputt = input_and_test()

您必须这样做,因为
input
input\u和
中的局部变量,因此每次调用该函数时,都会在其内部创建一个新的
input
变量。一旦函数退出,该变量就会消失。

您必须从函数返回值

输入和测试的末尾添加:

return inputt
然后,在调用
输入和测试的每个地方,存储以下值:

inputt = input_and_test()

您必须这样做,因为
input
input\u and\u test
内部的局部变量,因此每次调用该函数时,都会在其内部创建一个新的
input
变量。函数退出后,该变量就消失了。

函数中定义的变量在函数外部不可见,除非您使用
global
。您应该尽量避免使用全局变量。函数应该从参数中获取输入,并使用
return
将数据返回给调用方。请确保使用正确的缩进发布代码。由于Python使用缩进解析代码的结构,因此我们需要了解如何将代码缩进到下面站起来,读变量“scope”谢谢,那么你建议我怎么做?将所有内容都放在一个主函数中,这样变量就已经是“全局的”,但我仍然可以在这一个函数之后添加一些内容?代码也正确缩进,这里是一个粘贴框:函数中定义的变量在函数外部不可见,除非你用
全局
声明它们。你应该尽量避免使用全局变量。函数应该从参数中获取输入,并使用
return
将数据返回给调用方。请确保使用正确的缩进来发布代码。由于Python使用缩进来解析代码的结构,我们需要看一下如何缩进代码以理解它。请阅读变量“范围"谢谢,那么你建议我怎么做?将所有内容都放在一个主函数中,这样变量就已经是“全局的”,但我仍然可以在这个函数之后添加一些内容?代码也正确缩进,这里是一个粘贴箱:正如我在回答中指出的,还有一个地方他需要一个
return
语句
他递归的块也需要一个
return
语句,否则如果
except
块运行过,他将隐式返回
None
。@rmun实际上,如果他在except中存储到
input
,然后在末尾返回
input
,然后它仍然有效。这就是我的想法。但是你的解决方案