2016-02-12 25 views
-2
import random 
print("Welcome to RNG Guesser!\n") 
gld = random.randrange(1,10) 
counter = 0 
ccounter = 0 

while True: 
    print("Number of tries: {}".format(counter)) 
    print("Number of correct guesses: {}".format(ccounter)) 

num = input("Enter a number: ") 

if num is "exit": 
    print("Number of tries: {}".format(counter)) 
    print("Number of correct guesses: {}".format(ccounter)) 
    break 
else: 

    if int(num) is gld: 
     print("Congratulations, your guessed number {} was right!".format(num)) 
     counter += 1 
     ccounter += 1 

    elif int(num) < gld: 
     print("Pick a higher number!") 
     counter += 1 

    else: 
     print("Pick a lower number!") 
     counter += 1 

爲什麼我在退出時輸入「invalid literal for int」?我嘗試將輸入變量轉換爲int,我嘗試了一個else語句,我嘗試了2個變量,其中一個用於int的字符串,而其中沒有一個工作。在Python中獲取「int基數爲10的無效文字」

+2

用於比較的運算符是'==',而不是'is'。 –

回答

0

我相信這個問題是從線: if num is "exit"

正在評估對False進一步壓低腳本時的Python試圖文字串exit轉換爲int,它就會失敗。

嘗試==

問題更換isis比較兩個對象,看看他們是相同的,而什麼想是看是否拖對象的值是相同的。查看stack overflow thread瞭解更多信息。

0

假設的問題不正確的縮進只是複製粘貼錯誤...試試這個:

x = input('enter x > ') 
print('x == "exit": {}'.format(x == "exit")) 
print('x is "exit": {}'.format(x is "exit")) 

這裏發生了什麼:

enter x > exit 
x == "exit": True 
x is "exit": False 

或許:

x is "exit": True 

is運算符比較對象身份但您正在嘗試比較兩個字符串的內容。

+1

假設縮進是正確的,他的代碼將陷入無限循環。 –

+0

我的意思是「假設你的縮進是正確的,不像問題中的縮進。」但是,如果它像問題那樣縮進,它不會是一個無限循環 - 它將是一個'SyntaxError'。 –

0

請注意,您不能給字符串使用非數字字符int()

現在num應該是str,它可以是用戶輸入的任何內容。另請注意,如果要評估兩個值,請使用==而不是is。應該用is來判斷兩個事物是否是同一個對象。

如果你想使用的if-else,試試這個:

if num == "exit": 
    print("Number of tries: {}".format(counter)) 
    print("Number of correct guesses: {}".format(ccounter)) 
    break 
elif not num or not all(char.isdigit() for char in num): 
    print("You are not giving a number.") 
else: 
    if int(num) == gld: 
     print("Congratulations, your guessed number {} was right!".format(num)) 
     counter += 1 
     ccounter += 1 

    elif int(num) < gld: 
     print("Pick a higher number!") 
     counter += 1 

    else: 
     print("Pick a lower number!") 
     counter += 1 

這裏,all(char.isdigit() for char in num)num檢查每一個人物,看看他們是所有數字。我們應該知道任何事情都可能出現在用戶的輸入中。只有號碼可以轉換爲int

我們有另一個更清晰和簡單的解決方案。您可能需要閱讀Python中try...except...的一些文檔。

try: 
    if int(num) ... 
except ValueError: 
    # num is not able to be converted to int 
    print("You are not giving a number.") 
+0

驗證'所有(char.isdigit()爲char是num)'不正確地接受空字符串。解決這個問題的簡單方法是使用'try:... int(num)...除了ValueError:' –

+0

@DietrichEpp是的,我想用'try ... except'提供解決方案,但最終仍然堅持使用他所使用的結構。我將編輯答案。 –

相關問題