我是Python的新手,目前正在学习if
,else
等控制流程命令。
if
语句工作正常,但是当我编写else
或elif
命令时,解释器会给我一个语法错误。我正在使用Python 3.2.1,这个问题出现在它的本机解释器和IDLE中。
我正在按照 'A Byte Of Python' 一书中的说法进行操作。如您所见,elif
和else
正在提供无效语法。
>> number=23
>> guess = input('Enter a number : ')
>> if guess == number:
>> print('Congratulations! You guessed it.')
>> elif guess < number:
**( It is giving me 'Invalid Syntax')**
>> else:
**( It is also giving me 'Invalid syntax')**
为什么会这样?我在IDLE和交互式python中都遇到了问题。我希望语法是正确的。
答案 0 :(得分:22)
看起来您在if
语句的正文后面输入一个空行。这是完全使用块完成的交互式编译器的提示,因此不期望任何elif
/ else
块。尝试输入与此完全相同的代码,只需在每行后输入一次:
if guess == number:
print('Congratulations! You guessed it.')
elif guess < number:
pass # Your code here
else:
pass # Your code here
答案 1 :(得分:3)
问题是您在else
或elif
之前输入的空白行。注意你给出的提示。如果它是>>>
,那么Python期望新语句的开始。如果是...
,那么它希望您继续之前的陈述。
答案 2 :(得分:2)
elif
和else
必须立即跟随if
块的末尾,否则Python会认为该块已在没有它们的情况下关闭。
if 1:
pass
<--- this line must be indented at the same level as the `pass`
else:
pass
在代码中,解释程序在缩进时完成if
阻止,因此elif
和else
与之无关。因此,它们被理解为独立的陈述,这是没有意义的。
通常,请尝试按照style guidelines进行操作,其中包括删除过多的空格。
答案 3 :(得分:2)
在IDLE和交互式python中,你输入了两个连续的CRLF,它将你带出if语句。 这是IDLE或交互式python的问题。当您使用任何类型的编辑器时都可以,只需确保缩进是正确的。
答案 4 :(得分:1)
if guess == number:
print ("Good")
elif guess == 2:
print ("Bad")
else:
print ("Also bad")
确保缩进正确。语法还可以。
答案 5 :(得分:1)
请记住,默认情况下,输入的返回值将是字符串而不是整数。您无法将字符串与&lt;,&gt;,=&gt;,&lt; =等布尔值进行比较(除非您要比较长度)。因此,您的代码应如下所示:
number = 23
guess = int(input('Enter a number: ')) # The var guess will be an integer
if guess == number:
print('Congratulations! You guessed it.')
elif guess != number:
print('Wrong Number')
答案 6 :(得分:0)
除此之外你的缩进是错误的。代码不会工作。 我知道你正在使用python 3.的东西。 我使用的是python 2.7.3 实际上对你要完成的工作有效的代码就是这个。
number = str(23)
guess = input('Enter a number: ')
if guess == number:
print('Congratulations! You guessed it.')
elif guess < number:
print('Wrong Number')
elif guess < number:
print("Wrong Number')
唯一的区别是我告诉python这个数字是代码工作的字符串。如果不是认为是整数。当有人运行代码时,他们输入的字符串不是整数。有很多方法可以改变这些代码,但这是我想要提供的简单解决方案,有一种我无法想到的方法,而不将23变为字符串。或者您可以使用“23”引用或者您可以在输入中使用int()函数。这将转换他们输入的任何内容并整数数字。
答案 7 :(得分:0)
Python可以生成相同的无效语法&#39;即使是“elif”的身份也是错误的。阻止不匹配&#39;如果&#39; block ident(第一个标签,第二个空格,反之亦然)。
答案 8 :(得分:0)