2017-04-17 4 views
0

私は最初に乱数を生成する非常に基本的な推測ゲームを作っています。問題は、私が正しく推測すれば、数字は変わらないということです。私はRNGをどこに置くべきかでALOTを使いこなしましたが、どちらもうまくいかない、またはコードがコンパイルされません。推測の後に新しい乱数を作ります

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をすべて削除します。必要ない(と本当にひどいスタイル)! function-defの直後に '' 'r'''を' '' random.uniform() '' 'に設定するだけです。もう一度見てみると、このコードの方がはるかに間違っています。私は非常に強く基本的なパイソンコースを通過することをお勧めします!もう1つの発言: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)) 

。これにより、現在uniform()が返されるものにrが設定されます。


あるいはさらに良い:これに

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

def start(): 
    global r 
    ... 

:この変更グローバル使用

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

は悪い習慣で、グローバルの最良の使用は、すべてのでグローバルなではありません。関数の呼び出しごとに新しいランダム変数を設定する場合は、を関数に入れてください。


そして、私はサシャと同意:1人の以上見た後

:はるかに間違ってこのコードではあります。私は非常に 基本的なパイソンコースを通過することを強くお勧めします!

関連する問題