2013-06-28 35 views
1

我是一名全新的程序員,我一直在努力學習Python(2.7)。我在網上發現了一些練習嘗試,其中一個涉及創建一個簡單的猜謎遊戲。Python While Loop困擾

嘗試盡我所能,我無法弄清楚我的代碼有什麼問題。如果第一次正確猜測數字,則其中的while循環會正確執行。此外,如果第一次嘗試猜測較小的數字,則正確的代碼塊將執行 - 但隨後所有後續的「猜測」都會生成「較高」數字的代碼塊,而不管輸入如何。我已經在整個代碼中打印出變量來試着看看發生了什麼 - 但它沒有幫助。任何有識之士將不勝感激。謝謝!這裏是我的代碼:

from random import randint 

answer = randint(1, 100) 
print answer 
i = 1 


def logic(guess, answer, i): 
    guess = int(guess) 
    answer = int(answer) 
    while guess != answer: 
     print "Top of Loop" 
     print guess 
     print answer 
     i = i + 1 
     if guess < answer: 
      print "Too low. Try again:" 
      guess = raw_input() 
      print guess 
      print answer 
      print i 

     elif guess > answer: 
      print "Too high. Try again:" 
      guess = raw_input() 
      print guess 
      print answer 
      print i 

     else: 
      print "else statement" 

    print "Congratulations! You got it in %r guesses." % i 


print "Time to play a guessing game!" 
print "Enter a number between 1 and 100:" 
guess = raw_input() 
guess = int(guess) 

logic(guess, answer, i) 

我敢肯定,這是顯而易見的事情,我apoloogize提前如果我只是愚蠢。

+1

將'guess = raw_input()'更改爲'guess = int(raw_input())'。在python3中,通過比較一個字符串和一個整數會產生一個錯誤。 – Bakuriu

+0

就是這樣 - 非常感謝你! – shanesmith30286

回答

3

你已經注意到,raw_input()返回一個字符串(如我在你的代碼的底部已經注意到)。但是你忘了把輸入改成while循環內的一個整數。

因爲它是一個字符串,它將總是大於一個數字(「hi」> n),因此這就是爲什麼"Too high. Try again:"總是被調用。

因此,只要改變guess = raw_input()guess = int(raw_input())

0

試試這個:

guess = int(raw_input()) 

由於raw_input.__doc__介紹,返回類型爲string(和你想要一個int)。這意味着您將intstring進行比較,這會導致您獲得的看似錯誤的結果。有關更多信息,請參見this answer

0

好吧,我發現你的問題。問題是在這個代碼:

if guess < answer: 
     print "Too low. Try again:" 
     guess = raw_input() 
     print guess 
     print answer 
     print i 

    elif guess > answer: 
     print "Too high. Try again:" 
     guess = raw_input() 
     print guess 
     print answer 
     print i 

在上面你得到你的輸入字符串作爲代碼,但你嘗試將它與整數進行比較。所有你需要做的是將輸入爲整數,如:

猜測的raw_input =()
猜測= INT(猜測)

這應該解決您的問題:)

-1

我更新該程序。你是從while循環中出來的,因爲在elif組裏面輸入猜測後,你忘記把它轉換成int,所以它返回錯誤。現在,糾正了,但你也可以優化它。

import sys 

from random import randint 

answer = randint(1, 100) 
'''randint(1, 100)''' 
print (answer) 
i = 1 


def logic(guess, answer, i): 
    guess = int(guess) 
    answer = int(answer) 
    while guess != answer: 
     print ("Top of Loop") 
     print (guess) 
     print (answer) 
     i = i + 1 

     if guess < answer: 
      print ("Too low. Try again:") 
      guess = int(input()) 
      print (guess) 
      print (answer) 
      print (i) 

     elif guess > answer: 
      print ("Too high. Try again:") 
      guess = int(input()) 
      print (guess) 
      print (answer) 
      print (i) 

     else: 
      print ("else statement") 

    print ("Congratulations! You got it in %r guesses." % i) 


print ("Time to play a guessing game!") 
print ("Enter a number between 1 and 100:") 
guess = input() 
guess = int(guess) 

logic(guess, answer, i) 
+1

Downvote ...這個答案不僅僅遲了10分鐘(還有三個答案已經說明你完全相同的東西),你也已經將代碼轉換爲python3,這當然不是OP想要的。此外,由於您複製了所有OP代碼,因此您更改的內容並不明顯。 – l4mpi