2011-05-13 80 views
0

我學習蟒蛇大氣壓,並從該site做一個練習 -學習蟒蛇 - couldn't弄清楚random.randint

指導用戶從1挑一個任意號碼100並在七次嘗試中繼續猜測它。在每次猜測之後,用戶必須知道他們的數字是高於,低於還是等於您的猜測。

我寫的,但並沒有解決匹配代碼爲this--

import random 
pick = int(input('number? ')) 
count = 0 

while count <= 7: 
    number = random.randint(1, 10) 
    count += 1 
    print('is the number ', number, '?') 

if number <= pick: 
    print('press enter if higher') 
    higher = input() 
elif number >= pick: 
    print('press enter if lower') 
    lower = input() 
elif number == pick: 
    print('good?') 
    yes = input() 
    break 

print('end') 

我不能得到這個權利。當數字==選擇,循環沒有結束。是不是因爲隨機選擇了elif number ==選擇?

該網站給出的解決方案與我寫的有所不同。我怎麼能做得更好?

謝謝!

+1

代碼的縮進似乎被破壞了。請檢查您的原始代碼。 – 2011-05-13 11:03:16

回答

2

那麼這裏有一個快速重寫我所做的僅僅是建立在對問題的文字你貼:

import random 
input("Think of a number from 1 to 10, then press enter. Don't tell me, I'll guess it.") 
low = 1 
high = 10 
done = False 

for guesses in range(7): 
    number = random.randint(low, high) 
    print("I'm guessing", number) 
    happy = False 
    while not happy: 
     resp = input('Enter H if your number is higher, L if lower or E for equal: ')[0].upper() 
     if resp == 'E': 
      if guesses: 
       plural = 'es' 
      else: 
       plural = '' 
      print('Yay! I got it in {} guess{}.'.format(guesses+1, plural)) 
      happy = True 
      done = True 
      break 
     elif resp == 'H': 
      happy = True 
      low = number + 1 
     elif resp == 'L': 
      happy = True 
      high = number -1 
     else: 
      print("That wasn't a valid response.") 
    if done: 
     break 

print('end') 

我沒有什麼不同:

  • 該計劃沒有得到你的電話號碼作爲輸入(這是試圖猜測它)。
  • 我設置低&高初始範圍,並建立一個完成標誌,因爲我需要退出循環的兩個層面上的成功
  • 下一個我猜基礎上由低到高的範圍。
  • 要求H,L或E來指示我的猜測下降
  • 修改基於什麼用戶範圍告訴我

的主要區別是,這個代碼有點智能猜測的數目。 (儘管有7次猜測,它仍然可能失敗。)更智能的算法是每次猜中點而不是隨機猜測。

+0

澄清 - 第14至17行('if guesses:');這些做什麼?謝謝! – 2011-05-13 19:10:52

+0

嘿,對不起,這是處理我的寵物peeve。複數的程序受到挑戰......如果猜測不是零(這是除了第一次通過循環以外的所有情況),它將字符串複數賦值爲'es',所以輸出結果是'Yay!我猜中了3次。'而在第一次通過循環時,它會輸出「耶!我猜得到它。」 – 2011-05-13 19:34:07

2

這裏的錯誤是在您的使用<=>=。這些分別意味着less-than-or-equal-togreater-than-or-equal-to。因此,您的代碼永遠不會到達elif number == pick:系列,因爲前兩個陳述中的一個將始終爲真。很明顯看到,如果number == pick那麼第一個語句將是正確的,程序將提示用戶press enter if higher

答案?將<=改爲<,同樣讓>=變爲>。這種方式的測試僅適用於less-thangreater-than