2017-10-18 226 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)...'不再需要。 –