fish鳞陨 发表于 2022-8-11 17:26:27

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

课后作业第四讲这里,如果我第一次输入了正确答案,为什么会跳出“你是小甲鱼肚子里的蛔虫吗?!”"哼,猜中了也没有奖励"?
因为这两条语句不是在·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("游戏结束,不玩啦!")

鱼cpython学习者 发表于 2022-8-11 17:34:02

下面还有代码呢
if times == 3:
            print("你是小甲鱼肚子里的蛔虫吗?!")
            print("哼,猜中了也没有奖励")
你一次猜中,times就没有改变,仍然是3,所以就输出了

临时号 发表于 2022-8-11 17:36:42

if times == 3:
            print("你是小甲鱼肚子里的蛔虫吗?!")
            print("哼,猜中了也没有奖励")
print("游戏结束,不玩啦!")
这一段并没有放到while循环中,if语句没有缩进
而第一次回答后,如果回答正确,并不会进入while循环,而times=3,满足times == 3的条件所以输出了“你是小甲鱼肚子里的蛔虫吗?!”"哼,猜中了也没有奖励"

一点点儿 发表于 2022-8-11 18:21:45

本帖最后由 一点点儿 于 2022-8-11 18:27 编辑

“你是小甲鱼肚子里的蛔虫吗?!”"哼,猜中了也没有奖励"?
这2条语句缩进和while语句相同,所以这两条语句不是在while下的子代码,这两条语句和while同层次、并列,这两条语句会在while执行后执行,
并且当while的条件不成立时,程序跳过while循环体,执行后面的语句,也就是和while同层次的这2条语句

阳顺 发表于 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:   条件成立能循环下去喽

fish鳞陨 发表于 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("游戏结束,不玩啦!")

ll.pc 发表于 2022-8-11 23:30:59

因为你猜中了,所以它执行了if guess ==secret:这个语句了

鱼cpython学习者 发表于 2022-8-12 10:20:00

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

因为你猜中了啊,代码在进入while循环后让你输入,你一次猜中,就执行后面的if guess == secret了啊
页: [1]
查看完整版本: Python里while后的条件不满足时为什么还会执行while下的语句?