鱼C论坛

 找回密码
 立即注册
查看: 2774|回复: 7

Python里while后的条件不满足时为什么还会执行while下的语句?

[复制链接]
发表于 2022-8-11 17:26:27 | 显示全部楼层 |阅读模式

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

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

x
课后作业第四讲这里,如果我第一次输入了正确答案,为什么会跳出“你是小甲鱼肚子里的蛔虫吗?!”"哼,猜中了也没有奖励"?
因为这两条语句不是在·while下的子代码吗?当while的条件成立时,才运行while下面的子代码,那为何条件不成立时也能跳转到if语句那里?求解答orz

import random
times = 3
secret = random.randint(1,10)
print('----------小甲鱼工作室-----------')
temp = input("不妨猜一下小甲鱼现在想的是哪一个数字:")#让用户随机输入一个数
guess = int(temp)
while (guess != secret) and (times>1):
    temp = input("猜错了请重新输入吧:")
    guess = int(temp)#如果把变量guess放在前面
    times = times - 1
    if guess == secret:
            print("你是小甲鱼肚子里的蛔虫吗?!")
            print("哼,猜中了也没有奖励")
    else:
        if guess > secret:
            print("猜大啦")
        else:
            print("猜小啦")
        if times > 1:
            print("再试一次吧:",end = "")
        else:
            print("机会用光啦")
if times == 3:
            print("你是小甲鱼肚子里的蛔虫吗?!")
            print("哼,猜中了也没有奖励")
print("游戏结束,不玩啦!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-11 17:34:02 | 显示全部楼层
下面还有代码呢
if times == 3:
            print("你是小甲鱼肚子里的蛔虫吗?!")
            print("哼,猜中了也没有奖励")
你一次猜中,times就没有改变,仍然是3,所以就输出了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-11 17:36:42 | 显示全部楼层
if times == 3:
            print("你是小甲鱼肚子里的蛔虫吗?!")
            print("哼,猜中了也没有奖励")
print("游戏结束,不玩啦!")
这一段并没有放到while循环中,if语句没有缩进
而第一次回答后,如果回答正确,并不会进入while循环,而times=3,满足times == 3的条件所以输出了“你是小甲鱼肚子里的蛔虫吗?!”"哼,猜中了也没有奖励"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-11 18:21:45 | 显示全部楼层
本帖最后由 一点点儿 于 2022-8-11 18:27 编辑

“你是小甲鱼肚子里的蛔虫吗?!”"哼,猜中了也没有奖励"?
这2条语句缩进和while语句相同,所以这两条语句不是在while下的子代码,这两条语句和while同层次、并列,这两条语句会在while执行后执行,
并且当while的条件不成立时,程序跳过while循环体,执行后面的语句,也就是和while同层次的这2条语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-11 20:58:26 | 显示全部楼层
你的问题说明你没有搞清楚 while 用法,其它不是问题

while true:   条件成立能循环下去,没问题吧
那么, while (guess != secret) and (times>1):   这里面guess != secret  分析下结果比如猜错情况 7 != 5  输出结果是True 对吧因为7本就不等于5啊判断正确,次数也会大于1 也为true
两边true and true 输出还是true ,那就是while true:   条件成立能循环下去喽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-11 22:59:15 | 显示全部楼层
鱼cpython学习者 发表于 2022-8-11 17:34
下面还有代码呢

你一次猜中,times就没有改变,仍然是3,所以就输出了

但是如果是下面这样呢?没有了最下面if times ==3 ,它还是能在第一次输入正确就弹出"你是小甲鱼肚子里的蛔虫吗",这是为啥呀
import random
times = 3
secret = random.randint(1,2)
print('----------小甲鱼工作室-----------')
guess = 0
print("不妨猜一下小甲鱼现在想的是哪一个数字:",end="")
while (guess != secret) and (times > 0):
    temp = input()
    guess = int(temp)
    times = times - 1
    if guess == secret:
            print("你是小甲鱼肚子里的蛔虫吗?!")
            print("哼,猜中了也没有奖励")
    else:
        if guess > secret:
            print("猜大啦")
        else:
            print("猜小啦")
        if times > 0:
            print("再试一次吧:",end = "")
        else:
            print("机会用光啦")
        
print("游戏结束,不玩啦!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-11 23:30:59 From FishC Mobile | 显示全部楼层
因为你猜中了,所以它执行了if guess ==secret:这个语句了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-12 10:20:00 | 显示全部楼层
fish鳞陨 发表于 2022-8-11 22:59
但是如果是下面这样呢?没有了最下面if times ==3 ,它还是能在第一次输入正确就弹出"你是小甲鱼肚子里的 ...

因为你猜中了啊,代码在进入while循环后让你输入,你一次猜中,就执行后面的if guess == secret了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 10:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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