NameError: 全局名称 'change' 未定义" + 其他错误

0 投票
3 回答
4015 浏览
提问于 2025-04-18 15:35

我刚开始学习Python,目前使用的是Python 3.3.3,顺便提一下。下面是我的代码,我把一个叫Batch Script的语言的代码翻译成了Python。这里是Batch Script的代码。我不知道哪里出错了,但当我运行这个代码时,出现了NameError: global name 'change' is not defined的错误。我用http://pych.atomidata.com/code来检查语法,如果你把我的Python代码放进去检查,结果只会看到几个代码错误,还有一些Pep-8的错误。我想不出还有什么问题。我甚至不知道大部分代码错误是什么,而Pep-8的错误都是Line: __ Column: __ E302 expected 2 blank lines, found 1

import subprocess as sp

global change
global count

def numberInput():
    while True:
        try:
            number = int(input("Input a number, please: "))
            sp.call('cls', shell=True)
            break
        except ValueError:
            print('Please enter a valid input...')
            sp.call('pause', shell=True)
            numberInput()

    change = number
    numberVerify()

def numberVerify():
    if change == 0:
        numberCorrectIsTrue()
    else:
        number = change

def numberCorrectIsTrue():
    count = count + 1
    integer = number

    # checks to see if the input
    # is valid or not.
    if number != integer:
        sp.call('cls', shell=True)
        print("Please enter a valid number!")
        loop()
    else:
        even = number % 2

    if even == 0:
        print("Substituting x in 'x / 2' with {}".format(number))
        answer = number / 2
    else:
        print("Substitiuting x in '(3 * x) + 1' with {}".format(number))
        answer = number * 3
        answer = answerOdd + 1

    print(answer)

    if answer == 1:
        returnStats()
    else:
       numberCorrectIsTrue()

def returnStats():
    print("Your original input of {} returned as 1.".format(change))
    print("A total of {} operations were executed.".format(count))
    change = change + 1
    count = 0
    sp.call('pause', shell=True)
    numberVerify()

def check():
    number = answer
    numberCorrectIsTrue()

numberInput()

3 个回答

0

在每个给值给“change”或“count”的函数开头加上“global change”。

比如,numberInput() 函数应该像这样:

def numberInput():
    global change
    while True:
    ...

来源:在其他函数中使用全局变量

1

在代码块中使用global并不会被这个代码块里的函数继承。也就是说,每个需要修改全局变量的函数,都必须自己再声明一次global来告诉程序它要使用这个全局变量。

2

这些代码行:

global change
global count

应该改成

change = 0
count = 0

global这个关键词是用来指代全局变量的,所以在函数中使用这些值时,应该这样写:

def func():
    global count
    count = count + 1

撰写回答