2017-04-25 98 views
0

我試圖在Python中創建一個簡單的「猜數字遊戲」。bash:Python中出現意外令牌`newline'附近的語法錯誤號碼遊戲

我的代碼:

minimum = 1 
maximum = 100 
current_number = 50 




def new_number(x): 
    global sign, current_number, minimum, maximum 
    if x == ">": 
     minimum = current_number + 1 
     curent_number = minimum + maximum/2 
     guess() 
    else: 
     maximum = current_number - 1 
     current_number = minimum + maximum/2 
     guess() 


print "Pick a number between 1 - 100, keep it in your head" 
print "I'm going to guess it within 6 guesses" 

def guess(): 
    print "Is your number > or < %d" % current_number 

guess() 

sign = raw_input(": ") 
new_number(sign) 

試圖以數字「27」來運行它,似乎對於第一次迭代做工精細。然而,輸入被放置在第二次迭代中,其中輸入==「>」,收到後:

bash: syntax error near unexpected token `newline' 

有該錯誤指向沒有具體的行號。我確定它與if x == ">":部分有關。

+1

你是什麼意思的「第二次迭代」?代碼中沒有迭代。 – kindall

+1

**你如何運行你的代碼非常重要 - 事實上它是bash,而不是python,它產生的錯誤信息表明python解釋器沒有正確啓動,*或*涉及此問題的Python代碼中沒有包含在問題中。 –

+2

你是怎麼開始的? 'python yourscript'?只是'./ yourscript'? (如果是後者,你會想要一個shebang作爲第一行 - 像'#!/ usr/bin/env python')。 –

回答

1

你不在循環中,你的'第二次迭代'根本不是python,你的python腳本已經返回。

檢查這些改變你的代碼:

minimum = 1 
maximum = 100 
current_number = 50 




def new_number(x): 
    global sign, current_number, minimum, maximum 
    if x == ">": 
     minimum = current_number + 1 
     current_number = (minimum + maximum)/2 
     guess() 
    else: 
     maximum = current_number - 1 
     current_number = (minimum + maximum)/2 
     guess() 


print "Pick a number between 1 - 100, keep it in your head" 
print "I'm going to guess it within 6 guesses" 

def guess(): 
    print "Is your number >, < or = %d" % current_number 

guess() 

while(1): 
    sign = raw_input(": ") 
    if (sign == '='): 
     break 
    new_number(sign) 

的問題是,當你在一個循環中沒有,當你的腳本第一次迭代之後返回,你可能在bash打< <enter>,讓你有一個bash錯誤。

我還建議你重構你的代碼以避免使用全局變量,看看:Why are global variables evil?看看這對你的代碼有什麼壞處。

+0

這正是我所做的。這可以保持循環。但是,如果輸入「>」,則不進行更改,只有new_number(x)的「else」部分正常工作。 –

+0

這是您的原始代碼中的一個錯誤,我也錯過了:'curent_number = minimum + maximum/2'注意它應該是current_number。 – DSLima90

+0

另外,我沒有分析你的完整邏輯,但我認爲'minimum + maximum/2'應該是'(minimum + maximum)/ 2' – DSLima90

相關問題