当前位置: 首页 > 知识库问答 >
问题:

Python:差异b/w多ifs和if-elif在一个而循环

楚浩然
2023-03-14

我是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

我得到的结果是:

猜猜看:小五个!再猜3个大点!再猜一次4宾果!!

但是当我在while循环中使用if-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

如图所示,在最后一次正确猜测之后,代码就停止了,“宾果!!”没有显示。

有人能帮我理解为什么在使用多个if和if-elif-else/elif-in-while循环时会出现这种差异吗?非常感谢你!

补充:我最终意识到我的问题是,每次我为编号输入一个新值后,它将从代码中的何处使用新的编号再次运行,当我使用多个if或if-elif-else时,这有什么不同。

共有3个答案

夏昌胤
2023-03-14

设想以下(第一个程序):

  1. 你第一次猜错了号码(比如说8,而不是5
  2. 进入while循环是因为编号=回答
  3. 您得到的“更小!” 消息,提示再次猜测。现在输入5
  4. if number==answer:测试在同一个循环中完成。既然它现在是真的,“宾果!!”
  5. while条件已被测试,由于现在您的答案是正确的,因此不会再次进入循环
  6. 程序退出

现在第二个节目:

  1. 你第一次猜错了号码(比如说8,而不是5

羊渝
2023-03-14

这表现不同

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!!
束志业
2023-03-14

简单地说,“elif”(else-if的缩写)仅在先前的“if”(或“elif”)案例未执行时执行。如果您有一系列“If”语句(而不是“If”后面跟着一系列“elif”语句),则将评估前者中的所有条件(对于条件评估为真实的情况,也将评估相应“If”的主体);相反,一旦在“如果”中发现了真实的情况。。。“elif”链,不考虑链中的附加条件。

当在循环中(或任何地方)使用它时,您需要考虑您的预期行为。作为程序员养成的一个好习惯是问自己,“这怎么会出错?”。作为猜测的一个好方法,考虑“两种情况都有可能是真的吗?如果两种情况相符,这两种情况都应该执行吗?"。另外,请注意,在循环中,您可以通过添加显式的“继续”语句返回到循环的下一个迭代而不计算剩余的“如果”来获得与“如果”序列“如果”相同的效果(或其他)留下的陈述。

 类似资料:
  • 本文向大家介绍Python if, elif, else,包括了Python if, elif, else的使用技巧和注意事项,需要的朋友参考一下 示例 在Python中,您可以定义一系列条件if,第一个条件用于elif其余条件,直到最后一个(可选)else用于其他条件条件未捕获的任何条件。 产出 Number is bigger than 2 使用else if代替elif会触发语法错误,因此是

  • 我有下面的脚本,当我在第二个数据集中有第三列时,它可以正常工作。现在,我想获得绘制的第一个带有错误条的直方图,第二个带有错误条。我可以从第二个plot命令中删除,但是gnuplot会抱怨没有为第二个直方图指定足够的数据。如果我删除

  • 问题内容: 我对Java中的字符串比较有一点疑问,请考虑以下代码: 上面的代码始终打印为,就像我尝试这样: 它会永远打印我。是的,我知道应该使用方法进行字符串比较。但这是面试中提出的问题之一,我很困惑。谁能指导我这种行为? 据我所知,在代码片段1中,返回对象,因此对象比较返回false。我对吗? 问题答案: “ String.replace(’t’,’T’)返回对象,因此对象比较返回false。对

  • 问题内容: 我试图获得一个if语句从多个条件中触发,而不用不同的触发器多次重写该语句。例如: 您如何将这些内容浓缩成一个陈述? 我试过使用“或”,并且无论输入是否符合任何条件,它都会导致任何raw_input触发语句。 问题答案: 你想做的是 如果您有很多可能性,请选择另一个选项: 由于您使用的是2.7,因此您也可以这样编写(在2.7或3+版本中有效,但在2.6或以下版本中无效): 这使元素成为您

  • 问题内容: 我只是想知道下面的if语句是否有效: 我的目标是确保同时满足以下2个要求:1. value [6]必须位于目标2.目标中的value [0]或value [1]如果我做了一个不好的例子,请道歉我的问题是,是否可以在一个语句中进行三个AND&OR?非常感谢! 问题答案: 使用 括号 将条件分组: 请注意,如果将定义为一组,则可以在固定时间内进行查找: 并且,正如@Pramod在评论中提到

  • 这个程序基本上允许用户输入任何单词,直到他/她输入单词“last”。 如果单词包含字母“s”,则应显示单词确实包含“s”或“s”,否则应显示单词不包含“s”或“s”。 示例:用户输入的单词= •约翰 詹姆斯 •馅饼 莎莉 结果: 约翰不包含's'或'S' James确实包含“s”或“s” 馅饼不含's'或'S' Sally不包含“s”或“s” 该程序可以工作,但我需要更改if语句,以便它使用equ