2016-04-22 47 views
1

嗨,所以我的學校在python上做了一個RPG項目,我遇到了一個問題,我定義了自己的函數,並且需要在另一個函數中調用其中一個,工作。例如下面的代碼:Python定義的函數無法正常工作

from characters1 import * 

def printmana(typeofenemy): 
    print typeofenemy.mana 


def printmany(typeofenemy): 
    print typeofenemy.damage 
    print typeofenemy.health 
    option = raw_input("Type something ") 
    if option == 1: 
     printmana(typeofenemy) 

printmany(Goblin) 

當我打電話printmany(地精),一切都很正常,直到我在第1,在那裏我希望它調用printmana(精靈)和打印Goblin.mana類型,但它不」噸。然而,當我分別打印printmana(Goblin)時,它工作得很好。我也試過這樣:

from characters1 import * 

def printmana(typeofenemy): 
    return (typeofenemy.mana) 


def printmany(typeofenemy): 
    print typeofenemy.damage 
    print typeofenemy.health 
    option = raw_input("Type something ") 
    if option == 1: 
     print (printmana(typeofenemy)) 

printmana(Goblin) 

,我以爲我改變打印在printmana作爲回報,並調用第二功能的打印printmana(地精),但它仍然當我在1型不起作用。必須有一些我還不瞭解的python函數的性質,所以有人可以解釋爲什麼我的示例代碼不工作?謝謝!

回答

3

你的麻煩是你正在比較raw_input(一個字符串)的輸出和一個整數。請嘗試以下之一:

if option == "1": 
    ... 

if int(option) == 1: 
    ... 
+0

omg花了我很長時間,因爲一個簡單的錯誤,謝謝 – pythonsohard

+0

沒問題。輸入實際上可能有點令人困惑,因爲在python 2.7中'input'函數實際上會解析輸入,所以如果你輸入'1',它會給你一個整數,'1.0'一個double和一個'1'字符串。 – CrazyCasta

1

沒有的raw_input的價值不強制轉換爲整數。你可以比較選項字符串,即:

if option == '1': 

或者你可以選擇轉換爲int,即:

option = int(option) 

請注意,第二個選擇有一些有趣的陷阱如果該值可」 t被轉換爲int。

3

選項是這個代碼的字符串:

>>> option = raw_input("Type something ") 
Type something 1 
>>> print option 
1 
>>> print type(option) 
<type 'str'> 
>>> print option == 1 
False 
>>> print option == "1" 
True 

所以你需要改變,如果到:

if option == "1": 
1

您設置變量「選項」成爲無論在用戶類型如果用戶鍵入'1'並且命中返回,「選項」將保存字符串值'1'。所以,這個問題出現在你的「if」語句中,在那裏你比較了一個字符串和一個整數。