鱼C论坛

 找回密码
 立即注册
查看: 991|回复: 11

[已解决]关于小游戏的改进

[复制链接]
发表于 2020-4-29 15:36:46 | 显示全部楼层 |阅读模式

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

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

x
import random
secret = random.randint(1,100)
time = 1
print("开始游戏√")
temp = input("猜猜我心里的数字:")
guess = int(temp)
if guess == secret:
    print("猜对啦!")
else:
    if guess > secret:
        print("大了")
    else:
        print("小了")
while (guess != secret) and (time<3):
    temp = input("再给你一次机会吧")
    guess = int(temp)
    if guess == secret:
        print("猜对啦!")
    else:
        if guess > secret:
            print("大了")
        else:
            print("小了")
        time = time+1
if time >= 3:
    print("你输啦")
print("游戏结束啦")
请问这样改可以么qwq
最佳答案
2020-4-29 15:52:32
只需要将while循环加一个缩进即可,要放在else里,不然第一次猜对了他还会再给你猜一次。完整代码如下:
  1. import random
  2. secret = random.randint(1,100)
  3. time = 1
  4. print("开始游戏√")
  5. temp = input("猜猜我心里的数字:")
  6. guess = int(temp)
  7. if guess == secret:
  8.     print("猜对啦!")
  9. else:
  10.     if guess > secret:
  11.         print("大了")
  12.     else:
  13.         print("小了")
  14.     while (guess != secret) and (time<3):
  15.         temp = input("再给你一次机会吧")
  16.         guess = int(temp)
  17.         if guess == secret:
  18.             print("猜对啦!")
  19.         else:
  20.             if guess > secret:
  21.                 print("大了")
  22.             else:
  23.                 print("小了")
  24.             time = time+1
  25.     if time >= 3:
  26.         print("你输啦")
  27. print("游戏结束啦")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 15:48:14 | 显示全部楼层
重复代码比较多,想办法再改一改。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 15:52:32 | 显示全部楼层    本楼为最佳答案   
只需要将while循环加一个缩进即可,要放在else里,不然第一次猜对了他还会再给你猜一次。完整代码如下:
  1. import random
  2. secret = random.randint(1,100)
  3. time = 1
  4. print("开始游戏√")
  5. temp = input("猜猜我心里的数字:")
  6. guess = int(temp)
  7. if guess == secret:
  8.     print("猜对啦!")
  9. else:
  10.     if guess > secret:
  11.         print("大了")
  12.     else:
  13.         print("小了")
  14.     while (guess != secret) and (time<3):
  15.         temp = input("再给你一次机会吧")
  16.         guess = int(temp)
  17.         if guess == secret:
  18.             print("猜对啦!")
  19.         else:
  20.             if guess > secret:
  21.                 print("大了")
  22.             else:
  23.                 print("小了")
  24.             time = time+1
  25.     if time >= 3:
  26.         print("你输啦")
  27. print("游戏结束啦")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 16:02:11 | 显示全部楼层
本帖最后由 heidern0612 于 2020-4-29 16:11 编辑
  1. import random
  2. secret = random.randint(1,10)
  3. time = 0
  4. flag = 0
  5. print("开始游戏√")

  6. while time != 3 :
  7.     temp = input("猜猜我心里的数字:")
  8.     guess = int(temp)
  9.     if guess == secret:
  10.         print("猜对啦!")
  11.         break
  12.     else:
  13.         if guess > secret:
  14.             print("大了")
  15.         else:
  16.             print("小了")
  17.         time = time+1
  18.         if time == 3 and flag == 0:
  19.             print("再给你一次机会吧")
  20.             flag = 1
  21.             time = 2
  22. print("游戏结束")           
复制代码
待编辑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 16:09:53 | 显示全部楼层
重复代码过多。
可以更加精简
  1. import random
  2. secret=random.randint(1,10)
  3. promt="你猜猜我心里想的1~10中的哪个数字:"
  4. i=3
  5. while i:
  6.     temp =input (promt)
  7.     i-=1
  8.     promt="还有%d次机会,你再猜一次:"%i
  9.     guess = int (temp)
  10.     if guess > secret:
  11.             print("大了,猜大了")
  12.     elif guess< secret:
  13.             print("小了,猜小了")
  14.     if guess == secret:
  15.         print ("猜对了,你真是我肚里的蛔虫啊!")
  16.         print ("猜中也没什么奖励了")
  17.         break
  18. else:
  19.     print("你的机会用光了!")
  20. print("游戏结束,不玩啦^_^")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 17:23:22 | 显示全部楼层

大神,请问两个问题哈
1.这里的flag是定义做什么的?为什么后面还要有个flag=1,time=2呢
2.当time==3和flag==0的时候,要写在while下面么,已经不是while成立的条件了啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 17:45:47 | 显示全部楼层
本帖最后由 heidern0612 于 2020-4-29 17:50 编辑
Lucky.Jobling 发表于 2020-4-29 17:23
大神,请问两个问题哈
1.这里的flag是定义做什么的?为什么后面还要有个flag=1,time=2呢
2.当time==3 ...


1、这个flag就相当于一个开关,默认是关着的(等于0),当你time等于3的时候,这个开关就开了(重新赋值等于1)。赋值之后下次再while循环到这的时候,由于不满足flag等于0,所以就不判断time==3的条件了。所以能保证这个if分支只执行了一次。


2、你得弄明白while循环的含义,while循环每次循环都是程序从头走到尾,除非是有break和continue破坏了当次循环。

time==3的时候,是不满足当前while循环的条件了,但是这次循环下面的程序还没执行呢,当次循环的程序还没结束呢,下面的if还得跑完。

假如满足当前time 等于3,并且flag等于0(默认等于0)的情况,进入if分支,我把这个flag开关(重新赋值为1)打开,并且重新赋值了time,让time等于2,这次执行完了之后,由于time不等于3,还会从开开始循环最后一次。

并且由于我flag重新赋值了1,最下面的if条件并不满足,所以就满足了只重新猜一次的需求。

说白了,这只是利用变量做了个开关的小技巧,让某个满足条件的程序只运行一次就销毁。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 12:26:38 | 显示全部楼层
heidern0612 发表于 2020-4-29 17:45
1、这个flag就相当于一个开关,默认是关着的(等于0),当你time等于3的时候,这个开关就开了(重新赋 ...

谢谢大神,但是还是有些不明白
1、while里的循环是对第一次和第二次进行判断,这两次time都不等于3,最后的if也不会执行啊,第三次的时候time=3执行if,这个时候time已经不满足while的条件,那程序不是直接继续往下执行打印“游戏结束”就结束了么,flag控制if条件执行一次该怎么理解。。。
2、最后一个if条件是写在while循环里的,如果和while对齐,不缩进,程序正确么
3、while条件满足的时候就从头到尾执行所有程序,是不是不管条件是否成立,后面的程序都会一股脑地执行到整个程序结束?那break和contunue的意义是什么啊,反正程序都会一直走,中间打断或者继续还有什么特别用处么

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

使用道具 举报

发表于 2020-4-30 12:41:21 | 显示全部楼层
heidern0612 发表于 2020-4-29 17:45
1、这个flag就相当于一个开关,默认是关着的(等于0),当你time等于3的时候,这个开关就开了(重新赋 ...

我试了,不缩进,程序不正确,第四次的时候不能再输入答案就游戏结束了。为什么缩进到while下,即使time=3了,也可以进行while下面的程序?
开始游戏√
猜猜我心里的数字:1
小了
猜猜我心里的数字:2
小了
猜猜我心里的数字:3
小了
再给你一次机会吧
游戏结束
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 12:44:07 | 显示全部楼层
本帖最后由 heidern0612 于 2020-4-30 12:58 编辑
Lucky.Jobling 发表于 2020-4-30 12:26
谢谢大神,但是还是有些不明白
1、while里的循环是对第一次和第二次进行判断,这两次time都不 ...


1、第三次的时候time是等于3了,但是第三次程序还没执行完啊,它不还得往下执行完了才能跳出while循环再执行下面的游戏结束么?

flag只是个变量的名字,你可以起名叫charge或者temple都是可以的。

当循环到time等于3的时候,满足time ==3并且 flage ==0,就进入了if分支判断。

进入之后,我把flag改成1,保证下次循环到if这里,不满足这个if条件。

并且为了保证while不结束,我把time重新赋值等于2(也就是说,本来应该time等于3结束while循环的,因为我的重新赋值,所以又循环了一次),而由于不满足while里time不等于3的条件,所以又从头循环了一次。

这次执行到if的时候,虽然time == 3了,但是if不等于0(上面我重新赋值了flag等于1),所以不执行if条件。

当这次循环完成,由于time又等于3了,所以跳出了循环。


2、不能和while对齐,如果对齐的话,就没办法从头再循环一次了。

3、while条件为假的时候,确实是不断循环;但当while为真的时候,也得循环完当前次数才算结束。

break的意义在于,不管你下面还有什么程序,当while运行到这的时候,后面写的再多也不执行了,直接跳出while,执行下面的语句。

而continue的意义在于,不管你下面还有什么内容,当while运行到这的时候,后面写的再多也不执行了,直接跳出当次循环,再从头执行while。

两个区别在于,一个强制破坏了while,相当于说对程序说,到我break这就不执行循环了。

而continue在于告诉程序,当你执行到我这的时候,别往下执行了,继续你的下次循环吧。



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

使用道具 举报

发表于 2020-4-30 13:55:23 | 显示全部楼层
heidern0612 发表于 2020-4-30 12:44
1、第三次的时候time是等于3了,但是第三次程序还没执行完啊,它不还得往下执行完了才能跳出while循环 ...

3、while条件为假的时候,确实是不断循环;但当while为真的时候,也得循环完当前次数才算结束。

这里是不是说反了啊,while条件是真的时候才会不断循环?

有一点明白了,再多一些程序里吃透,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 13:57:03 | 显示全部楼层
Lucky.Jobling 发表于 2020-4-30 13:55
3、while条件为假的时候,确实是不断循环;但当while为真的时候,也得循环完当前次数才算结束。

这里 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 11:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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