python:while循环中的b/w multi-ifs和if-elif-else的区别
Posted
技术标签:
【中文标题】python:while循环中的b/w multi-ifs和if-elif-else的区别【英文标题】:python: difference b/w multiple-ifs and if-elif-else in a while loop 【发布时间】:2017-12-30 21:51:28 【问题描述】:我是 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 个!再猜3大!再猜一猜 4 宾果游戏!!
但是当我在 while 循环中使用 if-elif-elif 或 if-elif-else 而不是多个 if 时,在 first 的情况下猜错了,后来的猜对了,最后的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 时。
【问题讨论】:
你不能使用while(number!=answer):
并期望在你的循环中测试 number == answer
我意识到,但在第一个有多个 if 的情况下,结果符合我的预期(即宾果游戏出现了),我想知道为什么会这样......跨度>
【参考方案1】:
想象一下(第一个程序):
-
您第一次猜错了数字(比如说
8
而不是5
)。
进入while
循环是因为number!=answer
您收到"smaller!"
消息,系统会提示您再次猜测。现在输入5
。
if number==answer:
测试在同一个循环中完成。因为现在是True
,所以会显示"bingo!!"
。
while
条件已经过测试,由于现在你的答案是正确的,所以不会再次进入循环。
程序退出。
现在是第二个程序:
-
您第一次猜错了数字(比如说
8
而不是5
)。
进入while
循环是因为number!=answer
您收到"smaller!"
消息,系统会提示您再次猜测。现在输入5
。
elif number==answer:
测试没有完成,因为前面的if
子句已经成功。不显示任何消息。
while
条件已经过测试,既然现在你的答案是正确的,就不会再进入循环了。
程序退出。
【讨论】:
所以在第一种情况下,无论我猜测多少次并输入number
的新值,if 语句都会在同一个 while 循环下检查,这是第一个 while在第一次猜测出错后循环它进入?
我想我没有得到的是,当我为number
输入一个新值时,它会从代码中的哪个位置再次运行?假设在第一种情况下,猜测是 8 而不是 5,所以在 while 循环中,它检查了 first if,条件匹配所以提示number
的新值,然后我猜 5. 用这个新号,是不是,因为他们在同一级缩进,所以会先去第二个if,发现不匹配,移动到第三个if,找到匹配并执行,然后上一级回到while循环条件并退出?【参考方案2】:
简单地说,“elif”(“else if”的缩写)只有在之前的“if”(或“elif”)案例没有执行时才会执行。如果您有一系列“if”语句(而不是“if”后跟一系列“elif”语句),则将评估前者中的所有条件(并且对于条件评估为真实的任何情况,也将评估相应“if”的主体);相比之下,一旦在 "if"..."elif" 链中找到真值,则不会考虑链中的其他条件。
在循环中(或任何地方)使用它时,您需要考虑您的预期行为。作为程序员养成的一个好习惯是问自己,“这怎么会出错?”。并且,作为一种猜测的好方法,考虑“两种情况都可能是真的吗?如果两种情况都匹配,这两种情况都应该执行吗?”。另请注意,在循环中,您可以通过添加明确的“继续”语句返回以跳到循环的下一次迭代,从而获得与“if”序列相同的“if ... elif”效果不评估剩余的“if”(或其他)语句。
【讨论】:
【参考方案3】:解决方法很简单。
在您的第一个示例(if 的节点)中,您在 if 之后使用了 if,因此,当您要求猜测一个数字时,您将检查下一个 if。
例如:
从此代码:
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
如果您的数字更大(第二个 if)并且您输入了正确的数字,您将在第三个 if 中检查它。这样消息就会被打印出来。
另一方面,我们有第二个带有 if/elif/else 的示例。
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
如果我们有案例 1 中的示例,并且我们的猜测是一个更大的数字,它不会检查第三个条件,因为它是第一个 if 的条件。代码会再次进入while,在“bingo”的情况下不会继续。
试试这个,你会发现代码是一样的。尝试使用 if/elif/else 而不是 if 树,因为这是在 python 中检查事物的正确方法。
import random
number=-1
answer=int(random.uniform(1,10))
while(number!=answer):
number=int(input("guess:"))
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
【讨论】:
如果我理解正确,在第一种情况下,无论我猜了多少次并输入“数字”的新值,if 语句都会在同一个 while 循环下检查,这是第一个 while我在第一次猜测出错后进入的循环。并且每次输入一个新的数字,它会从上到下检查所有三个if,然后输入满足的if? 而在第二种情况下,每次输入一个新的“数字”时,会检查while条件吗? if 还是 number!=answer,它会根据条件执行 if 或第一个 elif 中的内容,但是如果 number==answer,则执行 while 循环的条件不再为 TRUE,从而直接退出循环? 第一种情况的另一个问题:说答案 = 5,我第一次猜到数字 = 8,那么它将满足 first if 并执行第一个 if 中的内容健康)状况。然后说我猜数字 = 5,有了这个新数字,在达到最后一个 if 条件之前如何检查所有 if 条件?它会再次从第一个 if 条件开始吗?或者它会从它停止的地方开始并首先检查第二个 if 条件? 第一个问题,是的。但它会检查 if 后面的 if 输入。我的意思是,如果检查的条件是第二个,那么只有第三个会用新值检查。第二个问题是正确的。当 while 循环不成立时,它将退出。您可以在 while true 之外打印 'Bingo',因为退出 while true 的唯一方法是 except(代码不继续)或 while true 退出。 对于最后一个问题:所有的if都被检查,但只有在de条件为真时才会访问。最后一个 if 是 'Bingo',所以会在最后一次检查。因此,如果您的号码正确,您将始终打印 Bingo。例如,您可以尝试使用相同的代码,但如果首先使用“bingo”,您将看到结果与示例编号 2 相同。【参考方案4】:这表现不同
if condition1: -> checks
do1 -> executes if condition1 is true
if condition2: -> checks too in any case!!
do2 -> executes if condition2 is true
比这个
if condition1: -> checks
do1 -> executes if condition1 is true
elif condition2: -> checks only if condition1 is false!!
do2 -> executes if condition1 is false and condition2 is true!!
【讨论】:
以上是关于python:while循环中的b/w multi-ifs和if-elif-else的区别的主要内容,如果未能解决你的问题,请参考以下文章
python中的while循环与for循环怎么样那个比较好用?