2017-10-18 4 views
0

私はダイスを予測するよう求めるPythonプログラムを書いています。あなたは5ユーロから始まり、勝利すれば5ユーロを稼ぎ、1であれば1ユーロ、1以上であれば3ユーロを失う。パイソンのダイス予測ゲーム

def main(): 

    while True: 
     saldo = 5 
     y = input("[R]oll or [S]top") 
     if y == "r" : 
      p = input("What is your prediction?") 
      from random import randint 
      x = randint(1, 6) 
      print(x) 
      if p == x: 
       saldo = saldo +5 
      elif p == int(x-1) or p == int(x+1): 
       saldo = saldo -1 
      else: 
       saldo = saldo -3 
      print ("saldo is " , saldo) 
     elif y == "s" : 
      saldo = saldo 
      print ("eindsaldo is " , saldo) 
      return 
     else: 
      print ("Enter r or s") 

main() 

ランダム部分は動作していますが、サルード部分ではなく、何がうまくいかないのか分かりません。私はPythonで新しくなっていますが、Javascriptや他の基本的なプログラミング言語に関する経験があります。しかし、これはうまくいくはずです。

+1

あなたsaldo = 5位ながら、機能 –

答えて

2

saldoはwhileループ内で初期化されます。

これはあなたがループの最初に起動するたびに意味は、あなたのsaldosは、whileループの外saldo = 5を移動します。5.

def main() 
    saldo = 5 
    while True: 
     y = input("[R]oll or [S]top") 
     ... 

に設定されています。

+0

befor私はあなたが 'saldo'言うことを好むだろう*初期化されたものではなく、定義されています。 – quamrana

+1

@quamrana – Goralight

2

以下のコードをご覧ください。私は自由をとり、全体をもっとPythonicで効率的にするために追加の変更を加えました。

アップデート2:

  1. あなたはすべての繰り返しでインポートしない、インポート機能は、常に最初に作られています:私はいくつかの小さな調整(Antonvbr)

    from random import randint # 1 
    
    def main(saldo):    
    
        while True: 
         y = input("[R]oll or [S]top").lower() # 3 
    
         if y == "r" : 
          p = input("What is your prediction?") #4 
          while p not in list("123456"): 
           print("Enter a valid number 1-6") 
           p = input("What is your prediction?") 
          p = int(p) # convert to integer 
          x = randint(1, 6) 
          print(x) 
          if p == x: 
           saldo += 5 
          elif abs(p-x) == 1: 
           saldo -= 1 
          else: 
           saldo -= 3 
          print ("saldo is {}".format(saldo)) # 5 
    
         elif y == "s" : 
          print ("stop! saldo is {}".format(saldo)) 
          return saldo 
    
         else: 
          print ("Enter R/r or S/s") # Not case sensitivt anymore 
    
    startsaldo = 5 
    saldo = main(startsaldo) #2 
    

    は説明をするために自由を取りました

  2. 他に記載されているように、saldoは、一度だけ初期化する必要があります。通常、これらのようなパラメータは関数に挿入され、関数が終了すると戻されます。

  3. "R"または"S"ですが、"r"および"s"と比較してください。 Pythonでは、大文字と小文字が重要です。
  4. あなただけの入力1-6は、有効なリスト(「123456」)を返すようにしたい[「1」、 "2 ...] し、我々はint型
  5. に書式文字列は非常に貴重なツールであることを変換します学ぶために。

をまた一般的に、var = var + 1はPythonでvar += 1のように書かれている。同じことがあまりにも-に適用されます。

+1

Ac (x-1) 'と' int(x + 1) 'が冗長なので、3 /' p == x- 1またはp == x + 1'は、abs(px)== 1に単純化することができる。 –

+0

@ brunodesthuilliers私もそれに気付きました。intを受け入れる試みはループを壊していました。私は自由を「正しい」ものにしました。 –

+0

インポートのための@ brunodesthuilliersそれはあなたがそれを置く場所になると、それ以外の機能に依存します。私が 'p == x'を参照していたのですが、あなたが正しいとすれば、' int(x-1).. 'はもはや必要ではありません。 –