2017-04-17 31 views
0

我正在做一個非常基本的猜謎遊戲,在開始時會產生一個隨機數。問題是,如果我猜對了,數字保持不變。我把ALOT與我應該放置RNG的地方搞混了,但它要麼不工作,要麼代碼不會編譯。猜對後做一個新的隨機數

import random 
import time 

r = round(random.uniform(1,10)) 
print (r) 

def start(): 
    global r 
    n = int(input("Guess: ")) 
    while (r != n): 
     if (r < n): 
      print("Too big") 
      time.sleep(.1) 
      start() 
     if (r > n): 
      print("Too small") 
      time.sleep(.1) 
      start() 
      r = round(random.uniform(1,10)) 
    if(r == n): 
     print("You win!") 
     start() 
start() 
+1

每次只需調用random.uniform。刪除所有全局東西和外部定義。不需要(和非常可怕的風格)!在函數def之後立即設置'''''''''''random.uniform()''''。再看一遍:這段代碼有更多的錯誤。我強烈建議首先通過基本的Python課程!還有一點意見:python代碼不是真正*編譯*。它是*解釋*。 – sascha

+1

如果他們贏了,你爲什麼打電話給start()?此外,整個循環的重點是你不需要遞歸調用 – TerryA

回答

-2

我不知道python但解決的辦法是:

import random 
import time 

r = round(random.uniform(1,10)) 
print (r) 
def start(): 
    global r 
    n = int(input("Guess: ")) 
    while (r != n): 
     if (r < n): 
      print("Too big") 
      time.sleep(.1) 
      start() 
     if (r > n): 
      print("Too small") 
      time.sleep(.1) 
      start() 
     if(r == n): 
      print("You win!") 
      r = round(random.uniform(1,10)) 
      start() 
start() 
0

只需使用:

r = round(random.uniform(1,10)) 

再次。這會將r設置爲uniform()現在會返回的任何值。


甚至更​​好:更改此:

r = round(random.uniform(1,10)) 
print (r) 

def start(): 
    global r 
    ... 

要這樣:

def start(): 
    r = round(random.uniform(1,10)) 
    print (r) 
    ... 

使用全局是不好的做法,的全球最好的應用是沒有全球性可言。如果你想設置一個新的隨機變量,每次調用一個函數,只需把它放在函數中。


我同意薩沙:

後多了一個看:還有更多的錯誤與此代碼。我高度推薦首先通過基本的Python課程!