2017-10-18 130 views
0

我正在寫一個python程序,要求你預測死亡。你從5歐元開始,如果你贏了,你可以贏得5歐元,如果你是1歐元,則賠1歐元,如果賠率超過1歐則賠3歐元。python的骰子預測遊戲

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被設置爲5

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

移動saldo = 5 while循環之外。

+0

我寧願你說'saldo' *初始化*而非定義 – quamrana

+1

@quamrana更新 – Goralight

2

看看下面的代碼。我冒昧地做出了額外的改變,使整個事情變得更加Pythonic和高效。

UPDATE2:我冒昧地做一些小的調整(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 

說明:

  1. 你不想導入在每個迭代上,導入功能總是先製成

  2. 正如別人所提到的那樣saldo只需要初始化一次。通常這些參數被注入到函數中,並在函數退出時返回。

  3. 您在詢問"R""S",但與"r""s"進行比較。在Python中,案例很重要。
  4. 你只需要輸入1-6是有效的列表(「123456」)返回[「1」,「2 ...] ,然後我們將其轉換成一個int
  5. 字符串格式化是一種非常有價值的工具學習。

而且通常,var = var + 1是這樣寫在Python var += 1。同樣適用於-了。

+1

Ac tually:1/import應該在函數之外,2 /'x'是一個int因此'int(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)...'不再需要。 –