我是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时,在第一次猜测是错误的并且随后的猜测是正确的情况下,最后一个宾果游戏!!未显示,例如:
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
个
如图所示,在最后一次正确猜测后,代码刚刚停止,并且没有显示"Bingo!!"。
谁能帮助我理解为什么在 while 循环中使用多个 if 和 if-elif-else/elif 时会出现这种差异? 谢谢!
添加:我意识到我的问题是,每次在我为number
输入新值后,它将从代码中的哪个位置再次使用新number
运行,当我使用多个 if 或 if-elif-else 时,这有何不同。
简单地说,"elif"("else if"的缩写(仅在之前的"if"(或"elif"(案例未执行时才执行。如果你有一系列的"if"语句(而不是"if"后跟一系列的"elif"语句(,前者中的所有条件都将被评估(对于条件计算为真实值的任何情况,相应的"if"的主体也将被评估(;相比之下,一旦在"if"..."elif"链中找到真实案例,就不会考虑链中的其他条件。
在循环(或任何地方(中使用它时,您需要考虑您的预期行为。作为一名程序员,一个好习惯是问自己,"这怎么会出错?而且,作为猜测的好方法,请考虑"这两种情况都有可能是真的吗?如果两种情况都匹配,是否应该执行这两种情况?另请注意,在循环中,您可以获得与"if ...elif",通过添加显式"继续"语句返回跳到循环的下一次迭代,而不计算剩余的"if"(或其他(语句。
这表现不同
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!!
想象一下以下内容(第一个程序(:
- 你第一次猜错了数字(假设
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
条件,由于现在您的答案是正确的,因此不会再次进入循环。 - 程序退出。
解决方案非常简单。
在你的第一个例子(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/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,并且在"宾果游戏"的情况下不会继续。
试试这个,你会看到代码是相同的。尝试使用 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