繁体   English   中英

全局名称未定义错误

[英]global name is not defined error

我的代码:

import sys
import time
import random


def main():
    print('***TEST**** Grad School Multiplier=',gradschoolmultiplier,'***TEST***')
    x=gradschoolmultiplier*50000
    print('Your salary in dollars, $',x)

def start():    
    gradschool=input('Do you intend to go to Graduate School? ')
    print('')
    time.sleep(2)
    if gradschool=='yes':print('That is a fantastic if expensive decision.')
    elif gradschool=='Yes':print('That is a fantastic if expensive decision.')
    elif gradschool=='Y':print('That is a fantastic if expensive decision.')
    elif gradschool=='y':print('That is a fantastic if expensive decision.')
    elif gradschool=='YES':print('That is a fantastic if expensive decision.')
    else:print('No?  Well, then it\'s off to work to pay back those student loans.')
    print('')
    if gradschool=='yes':g1=3
    elif gradschool=='Yes':g1=3
    elif gradschool=='Y':g1=3
    elif gradschool=='y':g1=3
    elif gradschool=='YES':g1=3
    else:g1=1
    g=random.randrange(1, 3)
    if g==1:gradschoolmultiplier=1
    else:gradschoolmultiplier=g1*g/2
    time.sleep(2)
    main()

start()

当然,我得到:

NameError: global name 'gradschoolmultiplier' is not defined

我不够聪明,不能为别人理解这个问题的答案。 有人会用简单的方式解释答案吗? 谢谢!

确实正如@Dan所说,范围问题。

或者您可以使用global变量。

我对你的代码的一些其他建议:

import sys
import time
import random


def print_salary():
    print('***TEST**** Grad School Multiplier=',gradschoolmultiplier,'***TEST***')
    x = gradschoolmultiplier*50000
    print('Your salary in dollars, $',x)

def main():    
    gradschool=input('Do you intend to go to Graduate School? ')
    print('')
    time.sleep(2)

    if gradschool.lower() in {'yes', 'y'}:
        print('That is a fantastic if expensive decision.')
        g1 = 3
    else:
        print('No?  Well, then it\'s off to work to pay back those student loans.')
        g1 = 1
    print('')

    g = random.randrange(1, 3)
    global gradschoolmultiplier
    if g == 1:
        gradschoolmultiplier = 1
    else:
        gradschoolmultiplier = g1 * g / 2
    time.sleep(2)
    print_salary()

if __name__ == '__main__':
    main()

您应该组合一些if语句以使其更简单。

哦,我们有同样的想法@jonrsharpe

@Nils建议快速改进

gradschoolmultiplier不在main()的范围内,它只存在于start()

你可以将它传递给main。

将调用更改为main(gradschoolmultiplier)

def main()更改为def main(gradschoolmultiplier):

有关python范围的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM