2016-09-12 10 views
0

私はテキストベースのダンジョンゲームを作成しようとしています。ちょうど楽しみと練習のために私は私のifブロックに従わないPythonに問題があります。奇妙なことは、最初に入力したときに機能したのですが、1日後には機能しませんでした。すべての条件が真であるかのように扱います。if文に従わないPython

choosing_race = True 
while choosing_race == True: 
    print("options: Human, Elf, Dwarf") 
    p['race'] = input("Choose Race: ",) 
    print(p['race'], choosing_race) 

    if p['race'] == "Elf" or "elf": 
     print() 
     print("Elves are nimble, both in body and mind, but their form is frail. They gain Bonuses to Intelligence and Dexterity and a Penalty to Constitution") 
     print() 
     confirm_race = input("Are you an Elf? ",) 
     if confirm_race == "yes" or "Yes": 
      p['int_mod_r'] = 2 
      p['dex_mod_r'] = 2 
      p['con_mod_r'] = -2 
      choosing_race = False 
     elif confirm_race == "no" or "No": 
      print() 
      print("ok, select a different race") 
     else: 
      print() 
      print("Could not confirm, try again") 

P [レース]入力は、微細示しているが、私は何も(例えば、アヒル)を入力することができると私はエルフを入力したかのように作用します。私がconfirm_raceに頼むとき、それはいつもイエスを返す。私はそこに入力ミスをしているに違いないと思うが、見つけられない。私はすべての私のindentingをredidしかし、まだ幸運。私は機能を使って再構成しようとしています。多分それが役に立ちます。その間に私は何がうまくいかなかったのかを知りたいので、将来それを防ぐことができます。ありがとう。あなたはこの場合

if p['race'] == "Elf" or "elf": 

のようなラインから期待行動を取得されていません

+0

: 'is_a_valid_choice = ['human'、 'elf'、 'dwarf']のlower()[ – Alexander

答えて

4

(私は私のNexus 5の携帯電話に、Pythonの3使用していることは重要なケースです)、「エルフは」trueと評価します毎回。代わりに

if p['race'] == "Elf" or p['race'] == "elf": 

かを書きたい、より簡潔

if p['race'] in ["Elf", "elf"]: 

または

if p['race'].upper() == "ELF": 
また、入力の線に沿って何かに有効であることを確認したい場合があります
+0

] ElfまたはElfの両方の理由で、大文字と小文字の区別について心配する必要はありません。それを変更するより良い方法はありますか? – Kohdee

+0

はい、私が書いた最後の行は、elf、Elf、ELfやeLfのようなものを含め、任意の亜種をとります。 –

+0

ありがとう、私は使用します。アッパー。これは基本的なように思えるかもしれませんが、私はElfまたはelfがいつも真実を返す理由を理解していません。 – Kohdee

関連する問題