python:while循环中的多个if和if-elif-else之间的差异

zu0ti5jz  于 2023-01-18  发布在  Python
关注(0)|答案(4)|浏览(142)

我是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-elifif-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时,这有什么不同。

1hdlvixo

1hdlvixo1#

简单地说,“elif”(“else if”的缩写)仅在前一个“if”(或“elif”)case没有执行。如果您有一系列“if”语句(而不是“if”后跟一系列“elif”语句),则将计算前者中的所有条件(对于条件求值为真的任何情况,相应的“if”主体也将求值);相反,一旦在“if”...“elif”链中找到真实情况,则将不考虑该链中的附加条件。
在循环中使用时(或任何地方,就这一点而言),您需要考虑您的预期行为。作为一名程序员,养成的一个好习惯是问自己:“这怎么会出错呢?"。并且,作为猜测这一点的一个好方法,考虑“是否有可能两种情况都为真?如果两种情况匹配,是否应该执行这两种情况?"。还要注意,在循环中,通过添加显式的“continue”语句以返回跳到循环的下一次迭代,而不计算剩余的“if”(或其它)语句,可以获得具有“if”序列的“if... elif”的相同效果。

yyyllmsg

yyyllmsg2#

其行为不同

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!!
qq24tv8q

qq24tv8q3#

想象一下下面这个(第一个程序):
1.您第一次猜错了数字(假设8而不是5)。
1.进入while循环是因为number!=answer
1.你得到"smaller!"消息,提示你再猜一次。现在你输入5

  1. if number==answer:测试是在同一个循环中完成的。由于现在是True,因此显示"bingo!!"
    1.测试while条件,由于现在您的答案是正确的,因此不会再次进入循环。
    1.程序退出。
    现在是第二个程序:
    1.您第一次猜错了数字(假设8而不是5)。
    1.进入while循环是因为number!=answer
    1.你得到"smaller!"消息,提示你再猜一次。现在你输入5
  2. elif number==answer:测试 * 未 * 完成,因为上一个if子句已成功。未显示任何消息。
    1.测试while条件,由于现在您的答案是正确的,因此不会再次进入循环。
    1.程序退出。
p5fdfcr1

p5fdfcr14#

解决办法很简单。
在第一个例子(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

相关问题