鱼C论坛

 找回密码
 立即注册
查看: 4924|回复: 22

[已解决]python while循环的小问题

[复制链接]
发表于 2019-6-21 21:24:47 | 显示全部楼层 |阅读模式

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

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

x
想改进这段代码,实现为用户提供三次机会尝试,机会用完或者用户猜中答案均退出循环。
import  random
secret=random.randint(1,10)
print('我爱我家')
temp=input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
guess=int(temp)
i=0
while i<2:
    if guess==secret:
        print("你是小星星吗")
        break
    else:
        if guess>secret:
            print("大了大了")  
        else:
            print("小了小了")
        temp=input("replay:")
        guess=int(temp)
        i+=1
    print("游戏结束,你输了")
最佳答案
2019-6-22 17:26:35
我试了下 输入确实是3次 只是第2次后就print你输了 但其实还能继续输入第3次

问题在于print你输了的位置
按照代码 第1次无条件输入 猜错后第2次也是无条件输入 然后i+1变成1 接着就print你输了...
接着开始下一次循环 继续输入1次(假设又是错的) i+1 (i=2) 再次print你输了 i=2不符合i<2 退出循环
一共输入了3次 打印了2次你输了

改的话 可以在print你输了之前 加入if(i==2):
  1. import  random
  2. secret=random.randint(1,10)
  3. print('我爱我家')
  4. temp=input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
  5. guess=int(temp)
  6. i=0
  7. while i<2:
  8.     if guess==secret:
  9.         print("你是小星星吗")
  10.         break
  11.     else:
  12.         if guess>secret:
  13.             print("大了大了")  
  14.         else:
  15.             print("小了小了")
  16.         temp=input("replay:")
  17.         guess=int(temp)
  18.         i+=1
  19.     if i==2:
  20.         print("游戏结束,你输了")
  21.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-21 21:26:21 | 显示全部楼层
改为while i<3即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-21 21:38:32 | 显示全部楼层
修改i<3,    0, 1,2各执行一次,就是3次
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-21 21:55:01 | 显示全部楼层
while i<2  只会执行当i=0以及i=1   而当i=2不符合条件小于2 就会自动退出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-21 22:28:44 | 显示全部楼层
for i in range(3):
    print('下面是代码,一共3次机会')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 00:01:09 From FishC Mobile | 显示全部楼层
newu 发表于 2019-6-21 21:26
改为while i

i <2都会执行4次了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 00:04:18 From FishC Mobile | 显示全部楼层
yh6788 发表于 2019-6-21 22:28
for i in range(3):
    print('下面是代码,一共3次机会')

这是啥意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 00:05:13 From FishC Mobile | 显示全部楼层
水犹寒0824 发表于 2019-6-21 21:38
修改i

但是好像我试最多会有输4次的情况
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 00:07:20 From FishC Mobile | 显示全部楼层
人随世俗变 发表于 2019-6-21 21:55
while i

我这样都好像最多可以输4次啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-22 09:59:18 | 显示全部楼层
库里冲鸭 发表于 2019-6-22 00:07
我这样都好像最多可以输4次啊

不会哈  我试运行了  最多就是二次直接失败
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-22 10:51:30 | 显示全部楼层
1.因为print("游戏结束,你输了")在循环内,所以每次循环都会显示‘你输了’
2.while i<=2:这个判断条件只能循环两次,虽然第三次可以输入,但是输入后直接结束循环,不会起作用
3.因为结束循环会输出‘’你输了‘,所以还需要加一个判定
  1. import  random
  2. secret=random.randint(1,10)
  3. print('我爱我家')
  4. temp=input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
  5. guess=int(temp)
  6. i=0
  7. while True:
  8.     if guess==secret:
  9.         print("你是小星星吗")
  10.         break
  11.     else:
  12.         if guess>secret:
  13.             print("大了大了")  
  14.         else:
  15.             print("小了小了")
  16.         if i>=2:
  17.             break
  18.         else:
  19.             temp=input("replay:")
  20.             guess=int(temp)
  21.             i+=1
  22. if guess != secret:
  23.     print("游戏结束,你输了")
复制代码

改进方法:1.先将print("游戏结束,你输了")移动到循环外
2.修改循环,将循环变为死循环。在循环需要结束的地方加上一个判定 if i>=2:break
3 在print("游戏结束,你输了")前加入判定,如果没有猜对了就显示(猜对了就不显示)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-6-22 16:13:00 | 显示全部楼层

for 循环,一共0,1,2,三次。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-22 17:26:35 | 显示全部楼层    本楼为最佳答案   
我试了下 输入确实是3次 只是第2次后就print你输了 但其实还能继续输入第3次

问题在于print你输了的位置
按照代码 第1次无条件输入 猜错后第2次也是无条件输入 然后i+1变成1 接着就print你输了...
接着开始下一次循环 继续输入1次(假设又是错的) i+1 (i=2) 再次print你输了 i=2不符合i<2 退出循环
一共输入了3次 打印了2次你输了

改的话 可以在print你输了之前 加入if(i==2):
  1. import  random
  2. secret=random.randint(1,10)
  3. print('我爱我家')
  4. temp=input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
  5. guess=int(temp)
  6. i=0
  7. while i<2:
  8.     if guess==secret:
  9.         print("你是小星星吗")
  10.         break
  11.     else:
  12.         if guess>secret:
  13.             print("大了大了")  
  14.         else:
  15.             print("小了小了")
  16.         temp=input("replay:")
  17.         guess=int(temp)
  18.         i+=1
  19.     if i==2:
  20.         print("游戏结束,你输了")
  21.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 18:13:19 | 显示全部楼层
ietar 发表于 2019-6-22 17:26
我试了下 输入确实是3次 只是第2次后就print你输了 但其实还能继续输入第3次

问题在于print你输了的位置 ...

谢谢谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 18:16:21 | 显示全部楼层
临溪 发表于 2019-6-22 10:51
1.因为print("游戏结束,你输了")在循环内,所以每次循环都会显示‘你输了’
2.while i=2:break
3 在prin ...

谢谢谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 18:28:34 | 显示全部楼层
临溪 发表于 2019-6-22 10:51
1.因为print("游戏结束,你输了")在循环内,所以每次循环都会显示‘你输了’
2.while i=2:break
3 在prin ...

好像还是有点不行啊,答案是2的话,输3、1后,输2没有显示东西而是直接结束了啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 18:30:19 | 显示全部楼层
ietar 发表于 2019-6-22 17:26
我试了下 输入确实是3次 只是第2次后就print你输了 但其实还能继续输入第3次

问题在于print你输了的位置 ...

好像还是有点不行啊,答案是4的话,输3、5后,输入4就会说“游戏结束,你输了”
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 18:33:51 | 显示全部楼层
临溪 发表于 2019-6-22 10:51
1.因为print("游戏结束,你输了")在循环内,所以每次循环都会显示‘你输了’
2.while i=2:break
3 在prin ...

怎么可以做到猜对了也能显示啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 18:58:15 | 显示全部楼层
临溪 发表于 2019-6-22 10:51
1.因为print("游戏结束,你输了")在循环内,所以每次循环都会显示‘你输了’
2.while i=2:break
3 在prin ...

这个代码好像在游戏结束之前还会提醒一下,怎么可以结束之前不用提醒了啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-22 19:07:37 | 显示全部楼层
库里冲鸭 发表于 2019-6-22 18:30
好像还是有点不行啊,答案是4的话,输3、5后,输入4就会说“游戏结束,你输了”

解决了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-1 20:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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