0

我已经使用 Python 大约四个星期了,我喜欢它。我刚刚和我的实验室伙伴完成了一项实验室任务,然后我得到了一个随机灵感,为我男朋友非常痴迷的游戏创建了一个 Python 小程序:战锤。

我创建了一个运行良好的基本程序,但是对于高级程序,我遇到了一些麻烦。

高级程序的作用:

您输入您的游戏将获得多少分

逐段显示所有灰骑士总部、部队等的列表(首先是所有总部,然后是精英等)。

通过输入名称旁边的数字,您可以逐节选择所需的单位

该程序会在您进行时为您提供每个部分的小计。

该程序最后为您提供了所有部分的总和。

该程序会告诉您还有多少积分可以使用。

对于灰骑士的总部之一,您可以选择拥有最多 5 个模型,每个模型 40 点。在这个程序中,我想列出模型(使用 print 命令)然后让 if elif 语句对应于每个数字。这是我遇到问题的代码部分:

def inputHQ():

    print

    print

    print 'Select your HQ by entering the number beside their name. Example "1", "2", "3".'

    print 

    print '1. Lord Kaldor Draiog - 275 points'

    print '2. Grand Master Mordrak - 200 points'

    print '3. Ghost Knights - 40 points per model'

        greyKnightHQ = input('What HQ do you want? Use the number beside the modle, no periods: ')

            if greyKnightHQ == 1:

                greyKnightHQ = 275

            elif greyKnightHQ == 2:

                greyKnightHQ = 200

            elif greyKnightHQ == 3:

                greyKnightGhostKnight = input('How many Ghost Knights would you like? Up to 5: ')

                def calcGreyKnightGhostKnight():

                    greyKnightGhostKnightTotal = greyKnightGhostKnight * 40 

                greyKnightHQ = greyKnightGhostKnightTotal

                return greyKnightHQ

当我在 Geany 中运行它时,我得到了这个错误:

Traceback (most recent call last):

        File "warhammer-point-calculator-advanced.py", line 96, in <module>

            main()

        File "warhammer-point-calculator-advanced.py", line 13, in main

            greyKnightHQ = inputHQ()

        File "warhammer-point-calculator-advanced.py", line 48, in inputHQ

           greyKnightHQ = greyKnightGhostKnightTotal

NameError: global name 'greyKnightGhostKnightTotal' is not defined

以下是我在文档顶部对这些功能的定义:

greyKnightHQ = inputHQ()

greyKnightGhostKnightTotal = calcGreyKnightGhostKnight(greyKnightHQ)

我的两个主要问题是: 1. 你能在 Python 的 if else 语句中定义一个模块吗?如果是这样,我做得对吗?2. 我是否也可以在 if else 语句之外创建 calcGreyKnightGhostKnightTotal 模块,并在需要时调用它,否则让它乘以 0,这样它就不会弄乱程序的其余部分?

4

1 回答 1

2

您遇到问题是因为您在函数中创建了一个函数,然后尝试在其范围之外访问它:

def inputHQ():
    ...

    def calcGreyKnightGhostKnight():
        ...

inputHQ是全局定义的,但calcGreyKnightGhostKnight只定义在inputHQ. 尝试访问calcGreyKnightGhostKnight外部inputHQ将产生一个NameError.

我不确定到底inputHQ在做什么,所以我无法为您提供比这更多的帮助。

于 2012-09-19T02:39:27.603 回答