鱼C论坛

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

[已解决]while循环的使用问题

[复制链接]
发表于 2017-3-31 14:38:24 | 显示全部楼层 |阅读模式

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

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

x
004讲中,我根据自己的理解写了下面的猜数字游戏, 很丑
代码如下:

  1. # 第一个小游戏.py

  2. import random
  3. times = 3

  4. secret = random.randint(1,10)
  5. temp = input('猜猜我现在想的是什么数字:')
  6. guess = int(temp)

  7. times = times - 1

  8. if guess == secret:
  9.     print('卧槽,猜的这么准!')
  10.     print('不玩啦,游戏结束!')
  11. else:
  12.     if guess > secret:
  13.         print('大啦大啦')
  14.     else:
  15.         print('小啦小啦')

  16.     temp = input('再试一次看看:')
  17.     guess = int(temp)
  18.     times = times - 1

  19.     if guess == secret:
  20.         print('卧槽,猜的这么准!')
  21.         print('不玩啦,游戏结束!')
  22.     else:
  23.         if guess > secret:
  24.             print('大啦大啦')
  25.         else:
  26.             print('小啦小啦')
  27.                  
  28.         temp = input('再试一次看看:')
  29.         guess = int(temp)
  30.         times = times - 1

  31.         if guess == secret:
  32.             print('卧槽,猜的这么准!')
  33.             print('不玩啦,游戏结束!')
  34.         else:
  35.             print('没机会啦,游戏结束!')
复制代码


执行的结果如下:

  1. 猜猜我现在想的是什么数字:6
  2. 大啦大啦
  3. 再试一次看看:2
  4. 小啦小啦
  5. 再试一次看看:4
  6. 没机会啦,游戏结束!
复制代码


问题来了,按照我这个写法,如果限定次数为10,那某段代码不是要重复很多遍? 自己尝试引入while循环,可是不知道怎么搞。

有没有大神可以在我这段代码的基础上进行改动,执行结果不变?不要求像鱼神的代码那么优美简洁的

最佳答案
2017-3-31 16:56:51
完全在你的代码上改的,改了5个地方,实现了循环,自己看注释

  1. import random
  2. times = 3

  3. secret = random.randint(1,10)
  4. temp = input('猜猜我现在想的是什么数字:')
  5. guess = int(temp)

  6. # times = times - 1  ------------------------------改动1:这个地方不需要,没有意义
  7. while times:        #---------------------------------------改动2:加入while,后面的要缩进
  8.   if guess == secret:
  9.       print('卧槽,猜的这么准!')
  10.       print('不玩啦,游戏结束!')
  11.       break                #------------------------------------改动3:猜对退出
  12.   else:
  13.     if guess > secret:
  14.       print('大啦大啦')
  15.     else:
  16.       print('小啦小啦')
  17.     guess = int(input("再猜一次:"))   #----------------------------改动4:猜错重新输入数字
  18.   times -=1                              #--------------------------改动5:猜一次减少一次机会
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-3-31 16:56:51 | 显示全部楼层    本楼为最佳答案   
完全在你的代码上改的,改了5个地方,实现了循环,自己看注释

  1. import random
  2. times = 3

  3. secret = random.randint(1,10)
  4. temp = input('猜猜我现在想的是什么数字:')
  5. guess = int(temp)

  6. # times = times - 1  ------------------------------改动1:这个地方不需要,没有意义
  7. while times:        #---------------------------------------改动2:加入while,后面的要缩进
  8.   if guess == secret:
  9.       print('卧槽,猜的这么准!')
  10.       print('不玩啦,游戏结束!')
  11.       break                #------------------------------------改动3:猜对退出
  12.   else:
  13.     if guess > secret:
  14.       print('大啦大啦')
  15.     else:
  16.       print('小啦小啦')
  17.     guess = int(input("再猜一次:"))   #----------------------------改动4:猜错重新输入数字
  18.   times -=1                              #--------------------------改动5:猜一次减少一次机会
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-4-7 17:02:42 | 显示全部楼层
gopythoner 发表于 2017-3-31 16:56
完全在你的代码上改的,改了5个地方,实现了循环,自己看注释

大神,感谢回复。我用你的代码试验了一下,发现了3个问题:
1、times限制的是3,实际可以猜4次:
  1. 猜猜我现在想的是什么数字:7
  2. 大啦大啦!
  3. 再试一次:6
  4. 大啦大啦!
  5. 再试一次:5
  6. 大啦大啦!
  7. 再试一次:4
复制代码

如果把上面第8行代码times = times - 1 加上后,就只能猜3次;
2、加入第8行代码times = times - 1后,第3次输入正确,没有输入正确的提示;
  1. 猜猜我现在想的是什么数字:6
  2. 大啦大啦!
  3. 再试一次:4
  4. 小啦小啦!
  5. 再试一次:5
复制代码

3、加入第8行代码times = times - 1后,第3次输入错误,没有('没机会啦,游戏结束')的提示
  1. 猜猜我现在想的是什么数字:7
  2. 大啦大啦!
  3. 再试一次:8
  4. 大啦大啦!
  5. 再试一次:9
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-7 17:32:58 | 显示全部楼层
陈芷韩 发表于 2017-4-7 17:02
大神,感谢回复。我用你的代码试验了一下,发现了3个问题:
1、times限制的是3,实际可以猜4次:

times = 3的时候,可以取值3,2,1,这个的确是3次没有错,但是这个值只是表示循环里面的次数
你之所以猜了4次,是因为第一次的猜不是在while循环里面的,第一次的次数跟times无关
我这个并没有错哦!


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

使用道具 举报

发表于 2017-4-7 17:43:11 | 显示全部楼层
本帖最后由 gopythoner 于 2017-4-7 17:49 编辑
陈芷韩 发表于 2017-4-7 17:02
大神,感谢回复。我用你的代码试验了一下,发现了3个问题:
1、times限制的是3,实际可以猜4次:


新改了2个地方,你要的只猜3次,机会用完给提示都有啦
  1. import random
  2. times = 2   #改动(1)次数为3次就改为2           
  3. secret = random.randint(1,10)
  4. temp = input('猜猜我现在想的是什么数字:')
  5. guess = int(temp)

  6. # times = times - 1  ------------------------------改动1:这个地方不需要,没有意义
  7. while times:        #---------------------------------------改动2:加入while,后面的要缩进
  8.   if guess == secret:
  9.       print('卧槽,猜的这么准!')
  10.       print('不玩啦,游戏结束!')
  11.       break                #------------------------------------改动3:猜对退出
  12.   else:
  13.     if times == 1:     #新改攻(2),这里当times=1之后还没才对就提示机会用完了
  14.       print("3次机会用完了,结束游戏")
  15.     elif guess > secret:     
  16.       print('大啦大啦')
  17.     else:
  18.       print('小啦小啦')
  19.     guess = int(input("再猜一次:"))   #----------------------------改动4:猜错重新输入数字
  20.   times -=1                              #--------------------------改动5:猜一次减少一次机会
复制代码


其实你只要明白循环的原理你自己就可以添加这2个改动的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-7 17:56:25 | 显示全部楼层
本帖最后由 gopythoner 于 2017-4-7 17:58 编辑
gopythoner 发表于 2017-4-7 17:43
新改了2个地方,你要的只猜3次,机会用完给提示都有啦


上面那个改错了,应该把times==1这个判断条件放在跟guess==secret这个判断条件同一个缩进位置,我上面那个放在了里面
那就只需要添加2行代码就行,改动只需要一个地方
  1. import random
  2. times = 3   
  3. secret = random.randint(1,10)
  4. temp = input('猜猜我现在想的是什么数字:')
  5. guess = int(temp)

  6. # times = times - 1  ------------------------------改动1:这个地方不需要,没有意义
  7. while times:        #---------------------------------------改动2:加入while,后面的要缩进
  8.   if guess == secret:
  9.       print('卧槽,猜的这么准!')
  10.       print('不玩啦,游戏结束!')
  11.       break                #------------------------------------改动3:猜对退出
  12.   elif times == 1:     #新改攻(1),这里当times=1之后还没才对就提示机会用完了
  13.       print("3次机会用完了,结束游戏")
  14.   else:
  15.     if guess > secret:     
  16.       print('大啦大啦')
  17.     else:
  18.       print('小啦小啦')
  19.     guess = int(input("再猜一次:"))   #----------------------------改动4:猜错重新输入数字
  20.   times -=1                              #--------------------------改动5:猜一次减少一次机会
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-4-10 15:09:00 | 显示全部楼层
gopythoner 发表于 2017-4-7 17:56
上面那个改错了,应该把times==1这个判断条件放在跟guess==secret这个判断条件同一个缩进位置,我上面 ...

感谢耐心的解答。
用您上面的代码试了下,如果第3次还没猜对,屏幕上会一直打印"3次机会用完了,结束游戏"。
在第14行后面加了一个break,完美解决
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 15:12:31 | 显示全部楼层
陈芷韩 发表于 2017-4-10 15:09
感谢耐心的解答。
用您上面的代码试了下,如果第3次还没猜对,屏幕上会一直打印"3次机会用完了,结束游 ...

可以的,你自己能看出来这里少一个break跳出的循环的设定,足以说明你对while循环有了足够的认识
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 12:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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