我是Python新手,我有一个关于在while循环中使用if语句的问题:
该代码用于编写一个数字猜测游戏,直到您输入的数字与生成的随机整数匹配。
示例代码编写如下:
import random
answer=int(random.uniform(1,10))
number=int(input("guess:"))
if number==answer:
print("correct!")
while(number!=answer):
if number > answer:
print("smaller!")
number=int(input("guess again"))
if number < answer:
print("bigger!")
number=int(input("guess again"))
if number == answer:
print("bingo!!")
break
我得到的结果是:
猜5个小的!2再猜3个大的!3再猜4个宾果!
但是当我在while循环中使用if-elif-elif或if-elif-else而不是多个if时,在 * 第一个猜测是错误的,随后的猜测是正确的 * 的情况下,最后一个**bingo!!**没有显示,例如:
import random
answer=int(random.uniform(1,10))
number=int(input("guess:"))
if number==answer:
print("correct!")
while(number!=answer):
if number > answer:
print("smaller!")
number=int(input("guess again"))
elif number < answer:
print("bigger!")
number=int(input("guess again"))
elif number == answer:
print("bingo!!")
break
结果变成:
猜:小5!再猜3
如图所示,在最后一次正确猜测之后,代码刚好停止,并且不显示“宾果!!”。
有谁能帮我理解为什么在while循环中使用多个if和if-elif-else/elif时会出现这种差异吗?非常感谢!
补充:我最终意识到我的问题是,每次我为number
输入一个新值后,它将从代码中的什么位置使用新的number
再次运行,以及当我使用多个if或if-elif-else时,这有什么不同。
4条答案
按热度按时间1hdlvixo1#
简单地说,“elif”(“else if”的缩写)仅在前一个“if”(或“elif”)case没有执行。如果您有一系列“if”语句(而不是“if”后跟一系列“elif”语句),则将计算前者中的所有条件(对于条件求值为真的任何情况,相应的“if”主体也将求值);相反,一旦在“if”...“elif”链中找到真实情况,则将不考虑该链中的附加条件。
在循环中使用时(或任何地方,就这一点而言),您需要考虑您的预期行为。作为一名程序员,养成的一个好习惯是问自己:“这怎么会出错呢?"。并且,作为猜测这一点的一个好方法,考虑“是否有可能两种情况都为真?如果两种情况匹配,是否应该执行这两种情况?"。还要注意,在循环中,通过添加显式的“continue”语句以返回跳到循环的下一次迭代,而不计算剩余的“if”(或其它)语句,可以获得具有“if”序列的“if... elif”的相同效果。
yyyllmsg2#
其行为不同
比这个
qq24tv8q3#
想象一下下面这个(第一个程序):
1.您第一次猜错了数字(假设
8
而不是5
)。1.进入
while
循环是因为number!=answer
1.你得到
"smaller!"
消息,提示你再猜一次。现在你输入5
。if number==answer:
测试是在同一个循环中完成的。由于现在是True
,因此显示"bingo!!"
。1.测试
while
条件,由于现在您的答案是正确的,因此不会再次进入循环。1.程序退出。
现在是第二个程序:
1.您第一次猜错了数字(假设
8
而不是5
)。1.进入
while
循环是因为number!=answer
1.你得到
"smaller!"
消息,提示你再猜一次。现在你输入5
。elif number==answer:
测试 * 未 * 完成,因为上一个if
子句已成功。未显示任何消息。1.测试
while
条件,由于现在您的答案是正确的,因此不会再次进入循环。1.程序退出。
p5fdfcr14#
解决办法很简单。
在第一个例子(if的节点)中,我们在if之后使用了if,所以,当你要求猜测一个数字时,你将检查下一个if。
例如:
从这个代码:
如果您的数字更大(第二个if),并且您键入了正确的数字,您将在第三个if中选中它。因此,消息将被打印。
另一方面,我们有第二个例子,使用if/elif/else。
如果我们有案例1的例子,我们的猜测是一个更大的数字,它不会检查第三个条件,因为它是第一个if的条件,代码会再次转到while,如果是"bingo",它就不会继续。
试试这个,你会发现代码是一样的,试着多用if/elif/else而不是if树,因为这是在python中检查东西的正确方法。