2016-04-22 17 views
1

こんにちは私の学校は、PythonでRPGプロジェクトをやっている、私は自分自身の関数を定義し、別のものの中でそれらの1つを呼び出す必要がある問題を遭遇した、仕事。たとえば、次のコード:私はそれがprintmana(ゴブリン)を呼び出し、Goblin.manaを印刷することを期待1に入力するまで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(ゴブリン)を呼び出し、すべてが正常になりますが、それはdoesnのt。しかし、私がprintmana(Goblin)を別途呼び出しても、それは絶対にうまく動作します。私も試してみましたこの:私はリターンとしてprintmanaで印刷を変更し、第二の機能で印刷printmana(ゴブリン)を呼び出し、まだ私は1で入力したとき、それはまだ動作しませんと思っ

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) 

。私はまだPython関数の性質について理解していないいくつかのものがなければならないので、誰かが私のコード例がうまくいかない理由を説明してください。ありがとうございました!

答えて

3

あなたは、raw_input(文字列)の出力を整数と比較することに問題があります。次のいずれかを試してみてください:整数に値をキャストしないraw_input

if option == "1": 
    ... 

または

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

私は長い間、簡単な間違いのために長い時間をかけました。 – pythonsohard

+0

問題ありません。実際には入力が少し混乱する可能性があります。なぜなら、Python 2.7では 'input'関数が実際に入力を解析するので、' 1'で入力すれば '1.0' doubleと' '1" '文字列。 – CrazyCasta

1

if option == '1': 

それとも、すなわち、intにオプションを変換することもできます:あなたはすなわち、文字列にオプションを比較することができ

option = int(option) 

は、2番目の選択肢はいくつかの興味深い落とし穴があることに注意してください「の値ができれば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'を入力してヒットすると、 "option"は文字列値 '1'を保持します。したがって、問題は文字列と整数を比較するif文にあります。

関連する問題