2017-04-25 53 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

相关问题