0

私は Python を使い始めて約 4 週間になりますが、とても気に入っています。研究室のパートナーと一緒に研究室の課題を終えたところですが、ボーイフレンドが夢中になっている Warhammer というゲーム用の小さな Python プログラムを作成するというランダムなインスピレーションを得ました。

私はかなりうまく機能する基本的なものを作成しましたが、高度なプログラムでは少し問題があります.

高度なプログラムの機能:

ゲームのポイント数を入力します

すべてのグレイ ナイト HQ、部隊などのリストをセクションごとに表示します (最初にすべての HQ、次にエリートなど)。

セクションごとに、名前の横に数字を入力して、必要なユニットを選択します

プログラムは、各セクションの小計を表示します。

プログラムは、最後に結合されたすべてのセクションの合計を提供します。

プログラムは、使用する残りのポイント数を示します。

グレイ ナイツの HQ の 1 つについては、それぞれ 40 ポイントで最大 5 つのモデルを選択できます。このプログラムでは、(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)

私の主な 2 つの質問は次のとおりです。1. Python の if else ステートメント内でモジュールを定義できますか? もしそうなら、私はそれを正しくやっていますか?2. calcGreyKnightGhostKnightTotal モジュールを if else ステートメントの外側に作成し、必要なときに呼び出すだけにすることはできますか?それ以外の場合は、プログラムの残りの部分を台無しにしないように 0 を掛けますか?

4

1 に答える 1

2

関数内で関数を作成し、そのスコープ外にアクセスしようとしているため、問題が発生しています。

def inputHQ():
    ...

    def calcGreyKnightGhostKnight():
        ...

inputHQはグローバルに定義されていますが、calcGreyKnightGhostKnight内でのみ定義されていますinputHQcalcGreyKnightGhostKnightの外部にアクセスしようとするinputHQと、NameError.

実際に何が行われているのか正確にはわからないinputHQので、これ以上のヘルプはありません。

于 2012-09-19T02:39:27.603 に答える