鱼C论坛

 找回密码
 立即注册
查看: 741|回复: 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里,不然第一次猜对了他还会再给你猜一次。完整代码如下:
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("游戏结束啦")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 15:48:14 | 显示全部楼层
重复代码比较多,想办法再改一改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 15:52:32 | 显示全部楼层    本楼为最佳答案   
只需要将while循环加一个缩进即可,要放在else里,不然第一次猜对了他还会再给你猜一次。完整代码如下:
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("游戏结束啦")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

while time != 3 :
    temp = input("猜猜我心里的数字:")
    guess = int(temp)
    if guess == secret:
        print("猜对啦!")
        break
    else:
        if guess > secret:
            print("大了")
        else:
            print("小了")
        time = time+1
        if time == 3 and flag == 0:
            print("再给你一次机会吧")
            flag = 1
            time = 2
print("游戏结束")           
待编辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 16:09:53 | 显示全部楼层
重复代码过多。
可以更加精简
import random
secret=random.randint(1,10)
promt="你猜猜我心里想的1~10中的哪个数字:"
i=3
while i:
    temp =input (promt)
    i-=1
    promt="还有%d次机会,你再猜一次:"%i
    guess = int (temp)
    if guess > secret:
            print("大了,猜大了")
    elif guess< secret:
            print("小了,猜小了")
    if guess == secret:
        print ("猜对了,你真是我肚里的蛔虫啊!")
        print ("猜中也没什么奖励了")
        break
else:
    print("你的机会用光了!")
print("游戏结束,不玩啦^_^")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

大神,请问两个问题哈
1.这里的flag是定义做什么的?为什么后面还要有个flag=1,time=2呢
2.当time==3和flag==0的时候,要写在while下面么,已经不是while成立的条件了啊
想知道小甲鱼最近在做啥?请访问 -> 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条件并不满足,所以就满足了只重新猜一次的需求。

说白了,这只是利用变量做了个开关的小技巧,让某个满足条件的程序只运行一次就销毁。
想知道小甲鱼最近在做啥?请访问 -> 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的意义是什么啊,反正程序都会一直走,中间打断或者继续还有什么特别用处么

想知道小甲鱼最近在做啥?请访问 -> 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
小了
再给你一次机会吧
游戏结束
想知道小甲鱼最近在做啥?请访问 -> 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在于告诉程序,当你执行到我这的时候,别往下执行了,继续你的下次循环吧。



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

使用道具 举报

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

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

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

有一点明白了,再多一些程序里吃透,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这里 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 00:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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