鱼C论坛

 找回密码
 立即注册
查看: 3353|回复: 13

[已解决]我想只能猜三次,为什么可以猜四次?

[复制链接]
发表于 2022-10-30 10:22:31 | 显示全部楼层 |阅读模式

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

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

x
我认为第一次也是会进入循环的,难道第一次猜数字不算吗?

temp = input("猜一猜我想的数字是几:")
guess = int(temp)
times = 3
while (guess != 12) and (times > 0):
if guess > 12:
     print("猜大啦!")
else:
     print("猜小啦!")
temp = input("再猜一猜:")
guess = int(temp)
times = times - 1

if guess == 12:
print("你猜对啦!真厉害!")
else:
print("三次机会都用完了,大侠请重新来过!")
最佳答案
2022-10-30 12:02:46
本帖最后由 tommyyu 于 2022-10-30 12:04 编辑
弹钢琴的花脸龙 发表于 2022-10-30 11:59
谢谢,也是可以。但是前面错在哪里呢?很奇怪呀


如果是在循环内输入的话,比如执行了循环内的temp = input("在猜一猜:")和guess = int(temp) 这两个语句以后,是 先进行判断(guess != 12) and (times > 0),此时times = times - 1一句并没有执行到,在判断后才会被执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-30 10:23:30 | 显示全部楼层
while下面的语句都有缩进,估计是复制进来没有显示缩进,可以正常运行,但是可以猜4次。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 10:46:45 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-30 10:50 编辑

         肯定是你的 times = times - 1 的缩进有问题,你为什么不整理出一个你认为缩进正确的版本,却偏偏要贴出一个缩进错误的代码?如果你的代码真的就像你说的那样,运行正常的话,还有必要求助吗?
guess = 0
times = 3
while (guess != 12) and (times > 0):
    guess = int(input("猜一猜我想的数字是几:"))
    if guess == 12:
        print("你猜对啦!真厉害!")
    elif guess > 12:
        print("猜大啦!")
    else:
        print("猜小啦!")
    times = times - 1
else :
    print("三次机会都用完了,大侠请重新来过!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 11:03:23 | 显示全部楼层
jackz007 发表于 2022-10-30 10:46
肯定是你的 times = times - 1 的缩进有问题,你为什么不整理出一个你认为缩进正确的版本,却偏偏 ...

我是想知道这么写错在哪里了。如果带上缩进则如下。此外,我没表达清楚,正常运行指的是,除了可以猜4次外,其他都正常,但是我想的是只能猜3次。请问这样是错在哪了呢?我理解这么写应该只能猜3次呀
temp = input("猜一猜我想的数字是几:")
guess = int(temp)
times = 3
while (guess != 12) and (times > 0):
  if guess > 12:
      print("猜大啦!")
  else:
      print("猜小啦!")
  temp = input("再猜一猜:")
  guess = int(temp)
  times = times - 1

if guess == 12:
  print("你猜对啦!真厉害!")
else:
  print("三次机会都用完了,大侠请重新来过!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 11:09:54 | 显示全部楼层
由于在循环外也猜了一次,所以一共是4次:
循环猜,第一次,此时 time 的值为 3;
循环内猜,第二次,此时 time 的值变成 2;
循环内猜,第三次,此时 time 的值变成 1;
循环内猜,第四次,此时 time 的值变成 0;
不满足循环条件,退出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 11:22:26 | 显示全部楼层
tommyyu 发表于 2022-10-30 11:09
由于在循环外也猜了一次,所以一共是4次:
循环外猜,第一次,此时 time 的值为 3;
循环内猜,第二次, ...

这个我曾经考虑过,然而,当猜10时,就会跳出”猜小啦“。那这样肯定是进入循环了呀,那进入循环,times就会被减一,所以猜第一次后,times就应该是2了。我是这么理解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 11:28:25 | 显示全部楼层
练习自己画各流程或逻辑图,有助于你梳理程序运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 11:30:59 | 显示全部楼层
弹钢琴的花脸龙 发表于 2022-10-30 11:22
这个我曾经考虑过,然而,当猜10时,就会跳出”猜小啦“。那这样肯定是进入循环了呀,那进入循环,times ...

首先,执行前三行,猜了一次;
然后,执行循环里面的 if-else ,此时就会输出“猜小了”
接下来,执行再猜一次,此时是猜了第二次,但是 times = times - 1只执行了一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 11:31:58 | 显示全部楼层
弹钢琴的花脸龙 发表于 2022-10-30 11:22
这个我曾经考虑过,然而,当猜10时,就会跳出”猜小啦“。那这样肯定是进入循环了呀,那进入循环,times ...

如果要改正,可以把 times = times - 1 放在循环的开头
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 11:37:02 | 显示全部楼层
tommyyu 发表于 2022-10-30 11:31
如果要改正,可以把 times = times - 1 放在循环的开头


哈哈,我也正在用这个方式改。但是出来的效果还是猜了四次。很奇怪。
temp = input("猜一猜我想的数字是几:")
guess = int(temp)
times = 3
while (guess != 12) and (times > 0):
  times = times - 1
  if guess > 12:
     print("猜大啦!")
  else:
     print("猜小啦!")
  temp = input("再猜一猜:")
  guess = int(temp)
  

  
if guess == 12:
print("你猜对啦!真厉害!")
else:
print("三次机会都用完了,大侠请重新来过!")

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

使用道具 举报

发表于 2022-10-30 11:41:39 | 显示全部楼层
本帖最后由 tommyyu 于 2022-10-30 11:47 编辑
弹钢琴的花脸龙 发表于 2022-10-30 11:37
哈哈,我也正在用这个方式改。但是出来的效果还是猜了四次。很奇怪。
temp = input("猜一猜我想的数字 ...


应该是因为在循环内的输入是在判断后再执行的 times = times - 1这一条语句的
循环外输入一次,times = times - 1
第二次输入后,此时times 是 2,满足条件,然后执行 times = times - 1
第三次输入后,此时times 是 1,满足条件,然后执行 times = times - 1
第四次输入后,此时times 是 0,不满足条件,输入后会跳出循环

(实在不行可以再循环外面加一个times = times - 1,或者这样写:
temp = input("猜一猜我想的数字是几:")
guess = int(temp)
times = 3
while (guess != 12):
  times = times - 1
  if times == 0:
      break
  if guess > 12:
     print("猜大啦!")
  else:
     print("猜小啦!")
  temp = input("再猜一猜:")
  guess = int(temp)
  

  
if guess == 12:
    print("你猜对啦!真厉害!")
else:
    print("三次机会都用完了,大侠请重新来过!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-30 11:59:43 | 显示全部楼层
tommyyu 发表于 2022-10-30 11:41
应该是因为在循环内的输入是在判断后再执行的 times = times - 1这一条语句的
循环外输入一 ...

谢谢,也是可以。但是前面错在哪里呢?很奇怪呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-30 12:02:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 tommyyu 于 2022-10-30 12:04 编辑
弹钢琴的花脸龙 发表于 2022-10-30 11:59
谢谢,也是可以。但是前面错在哪里呢?很奇怪呀


如果是在循环内输入的话,比如执行了循环内的temp = input("在猜一猜:")和guess = int(temp) 这两个语句以后,是 先进行判断(guess != 12) and (times > 0),此时times = times - 1一句并没有执行到,在判断后才会被执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-10-30 12:24:22 | 显示全部楼层
tommyyu 发表于 2022-10-30 12:02
如果是在循环内输入的话,比如执行了循环内的temp = input("在猜一猜:")和guess = int(temp) 这两个语 ...

是的是的,是这个意思。明白了,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 21:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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