2012-09-19 79 views
0

我大約四周進入Python,我喜歡它。我剛剛和我的實驗室合作伙伴完成了一項實驗室任務,然後我隨即獲得了靈感,爲我的男朋友大量癡迷的遊戲創建了一個小型Python程序:Warhammer。模塊內部如果在Python中的其他語句?

我創建了一個基本的工作得很好,但對於高級程序,我遇到了一些麻煩。

先進的程序在做什麼:

你輸入你的遊戲將有多少個是

顯示所有灰色騎士總部,部隊,由節等節(首先在總部的列表,然後是精英等)。

逐節你選擇要通過輸入名稱

該方案爲您提供了一個子總每一節的,你去旁邊的數字哪個單位。

該程序爲您提供了最後所有部分的總和。

程序會告訴您有多少點還有待使用。

對於Gray Knights總部的其中一個,您可以選擇最多5個模型,每個模型40點。在這個程序中,我想列出模型(使用print命令),然後讓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以便它不會弄亂程序的其餘部分?

+1

我沒有看到你在你的函數中創建或導入一個模塊,而是一個函數。你可以在函數中定義函數,但我認爲你不需要在這裏做。特別是因爲你從來不稱它。一個函數創建一個新的作用域(名稱空間),並且gKGKT變量只存在於其中。因此它不存在於外部函數中。但是,真的,這是學習課程的好機會。 – Keith

+0

好的,謝謝。我會看看課程。 (: – Chelsea

回答

2

你得到的問題,因爲你要創建一個函數中的一個函數,然後試圖訪問它的範圍:

def inputHQ(): 
    ... 

    def calcGreyKnightGhostKnight(): 
     ... 

inputHQ是全局定義的,但calcGreyKnightGhostKnight只內inputHQ定義。試圖在inputHQ之外訪問calcGreyKnightGhostKnight將產生NameError

我並不完全確定inputHQ究竟在做什麼,所以我無法爲您提供比這更多的幫助。

+0

inputHQ應該包含所有用於選擇要使用的HQ的元素,一旦選定了HQ,它將被添加到程序結束時的總數以及結束時的小計HQ選擇部分 讓我知道如果我錯誤地使用模塊,就像我說的,我只有四周左右的時間Python – Chelsea

+0

您是否已經瞭解了關於類的問題? – Blender

+0

不,還沒有。熟悉CSS類,如果它們類似的話。 – Chelsea