鱼C论坛

 找回密码
 立即注册
查看: 2017|回复: 14

[已解决]作业35

[复制链接]
发表于 2023-7-27 21:43:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个程序,用if ,最后输出的结果有两个F和两个D,用elif的话,最后输出的结果是正常的,一个F和一个D,小甲鱼的课程有说到if和elif执行的逻辑不一样,效率不一样,elif效率更高,但是他们都是条件语句,在执行条件语句时作用是一样的,为什么这个程序if输出的结果就不正常,elif输出的结果就是正常的
最佳答案
2023-7-27 21:53:30
当你的程序运行到F的时候, each_time小于min_time,第1个if语句满足条件,然后程序就会在mix_name加入each_name。如果下一句还是if语句,那么min_time就等于each_time,会再次加入each_name。如果下一句是elif,则因为第一个if语句满足而不会执行。小甲鱼提到的相等是指第一个条件为True以后,确保不会满足第2个条件。
7.27-1.png
7.27-2.png
7.27-3.png
7.27-4.png

评分

参与人数 3荣誉 -5 鱼币 -5 贡献 0 收起 理由
sfqxx -5 -5 -3 不见得"善意"
歌者文明清理员 + 5 + 5 + 3 你扣的挺善意的
陶远航 -5 -5 恶意扣分

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-27 21:43:54 | 显示全部楼层
在这个问题中,我们需要分析为什么使用  if  和  elif  条件语句导致输出结果不同的情况。

首先,让我们理解  if  和  elif  条件语句的执行逻辑:

1.  if  语句:它会依次判断每个条件表达式是否为真(True),如果第一个条件为真,则执行对应的代码块,然后整个条件语句结束。如果第一个条件为假,则继续判断下一个条件,直到找到一个条件为真或所有条件都为假为止。

2.  elif  语句:它是  else if  的缩写,只有在之前的  if  条件为假的情况下,才会进入  elif  条件的判断。与  if  不同, elif  只有在前面的条件为假时才会执行,如果找到满足条件的  elif ,则执行对应的代码块,然后整个条件语句结束。

现在来看你提供的问题描述,如果使用  if  和  elif  的代码有可能会导致输出结果不同的情况:
# 使用 if 条件语句
score = 60
if score >= 90:
    print("A")
if score >= 80:
    print("B")
if score >= 70:
    print("C")
if score >= 60:
    print("D")
else:
    print("F")

假设  score  的值为 80,执行过程如下:

1. 第一个条件  score >= 90  为假,不输出 "A"。
2. 第二个条件  score >= 80  为真,输出 "B"。
3. 第三个条件  score >= 70  为真,输出 "C"。
4. 第四个条件  score >= 60  为真,输出 "D"。
5. 进入  else  代码块,但是由于前面已经有条件满足,所以这里不输出 "F"。

因此,最后的输出结果是:"B C D"

现在,我们来看一下使用  elif  条件语句的代码:
# 使用 elif 条件语句
score = 80
if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 70:
    print("C")
elif score >= 60:
    print("D")
else:
    print("F")

假设  score  的值为 80,执行过程如下:

1. 第一个条件  score >= 90  为假。
2. 第二个条件  score >= 80  为真,输出 "B"。
3. 由于前面的条件满足,因此后续的  elif  条件不会再被判断,整个条件语句结束。

因此,最后的输出结果是:"B"

总结:使用  if  和  elif  条件语句的区别在于当某个条件满足时是否继续判断其他条件。在第一个代码示例中,使用了多个独立的  if  条件语句,导致每个条件都会被单独判断,而  else  只与最后一个  if  关联,所以在满足条件时不会输出 "F"。而在第二个代码示例中,使用了一系列的  elif  条件语句,一旦某个条件满足,整个条件语句就会结束,不会继续执行后续条件。

如果你希望使用  if  和  elif  条件语句的组合来得到正确的输出结果,你可以按照以下方式编写代码:
score = 80
if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 70:
    print("C")
elif score >= 60:
    print("D")
else:
    print("F")

这样就能得到预期的输出结果:"B"。

评分

参与人数 1荣誉 -1 鱼币 -1 收起 理由
woshizhangpengp -1 -1 回答之前先看下我的问题

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-27 21:44:01 | 显示全部楼层
首先,非常感谢你对我的信任!我会尽力给你提供准确和有帮助的答案。

关于你的问题,理解条件语句的执行逻辑非常重要。让我们来仔细看一下这个程序,以及使用ifelif时的不同之处。

假设这个程序是这样的:
score = 75

if score >= 90:
    print('A')
if score >= 80:
    print('B')
if score >= 70:
    print('C')
if score >= 60:
    print('D')
else:
    print('F')

根据这段代码,如果score的值为75,那么输出的结果将是两个‘D’和一个‘F’。

这是为什么呢?

在这个程序中,每个条件语句都是独立的。它们会按顺序被执行,而不会互相影响。当score大于等于70时,第一个if语句会打印出'C'。然后,第二个if语句会检查score是否大于等于60,并打印出'D'。接着,由于score大于等于60,else语句不会被执行,所以不会打印出'F'。

为了解决这个问题,你可以使用if-elif-else结构,如下所示:
score = 75

if score >= 90:
    print('A')
elif score >= 80:
    print('B')
elif score >= 70:
    print('C')
elif score >= 60:
    print('D')
else:
    print('F')

使用elif语句的好处是,每个条件只有在前面的条件不满足时才会被检查。因此,在这种情况下,只会打印一个'D'和一个'F',而不是两个'D'。

总结一下,使用多个独立的if语句,每个都会被执行,而使用if-elif-else结构,只有满足第一个条件的语句会被执行,后面的条件将会被跳过。这就是为什么在你的程序中,使用if输出的结果不正常,而使用elif输出的结果是正常的。

希望这个解释对你有帮助!如果你还有其他问题,请随时提问。祝你学习进步!
如果问题已经解决,请设置最佳答案

评分

参与人数 1荣誉 -1 鱼币 -1 收起 理由
woshizhangpengp -1 -1 回答之前先看下我的问题

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-27 21:46:12 | 显示全部楼层
Mike_python小 发表于 2023-7-27 21:43
问题解析:

根据你提供的信息,我理解你遇到了一个关于if和elif的逻辑问题。请注意,if和elif在执行条件语 ...

要不你先看下我的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-27 21:47:06 | 显示全部楼层
isdkz 发表于 2023-7-27 21:43
在这个问题中,我们需要分析为什么使用  if  和  elif  条件语句导致输出结果不同的情况。

首先,让我们 ...

你这个回答不是我这个问题的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-27 21:47:41 | 显示全部楼层
陶远航 发表于 2023-7-27 21:44
首先,非常感谢你对我的信任!我会尽力给你提供准确和有帮助的答案。

关于你的问题,理解条件语句的执行 ...

你这个回答不是我这个问题的答案

评分

参与人数 3荣誉 -5 鱼币 -5 贡献 0 收起 理由
sfqxx -5 -5 -3
歌者文明清理员 + 5 + 5 + 3 抵制 GPT 回答
陶远航 -5 -5 你可以不看,但不能扣分

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-27 21:49:14 | 显示全部楼层
因为2个条件可能同时满足(猜的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-27 21:53:30 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
当你的程序运行到F的时候, each_time小于min_time,第1个if语句满足条件,然后程序就会在mix_name加入each_name。如果下一句还是if语句,那么min_time就等于each_time,会再次加入each_name。如果下一句是elif,则因为第一个if语句满足而不会执行。小甲鱼提到的相等是指第一个条件为True以后,确保不会满足第2个条件。

点评

建议你加入互助团队,每月有c币,c币可以换奖品和rmb  发表于 2023-7-28 12:13
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-27 21:56:37 | 显示全部楼层
smallwh 发表于 2023-7-27 21:53
当你的程序运行到F的时候, each_time小于min_time,第1个if语句满足条件,然后程序就会在mix_name加入each ...

看懂了,看来以后还是要用elif好一点,给你设置最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-27 23:33:43 | 显示全部楼层
陶远航 发表于 2023-7-27 21:44
首先,非常感谢你对我的信任!我会尽力给你提供准确和有帮助的答案。

关于你的问题,理解条件语句的执行 ...

你被扣分了,扣死他@isdkz
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 07:31:49 | 显示全部楼层
sfqxx 发表于 2023-7-27 23:33
你被扣分了,扣死他@isdkz

我要以德报怨,内疚死他
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 07:38:12 | 显示全部楼层
sfqxx 发表于 2023-7-27 23:33
你被扣分了,扣死他@isdkz

呵呵呵才发现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 10:53:03 | 显示全部楼层
isdkz 发表于 2023-7-28 07:31
我要以德报怨,内疚死他

u
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-28 12:05:06 From FishC Mobile | 显示全部楼层
陶远航 发表于 2023-7-28 07:38
呵呵呵才发现

干得好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 03:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表