鱼C论坛

 找回密码
 立即注册
查看: 1070|回复: 2

[已解决]教学视频猜数游戏求助

[复制链接]
发表于 2017-12-22 12:29:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 xxpy_601 于 2017-12-22 12:30 编辑

看完课时5后,想改动一下猜数程序。
第一个疑问:

guess = int(input('你还有%d次机会,猜猜看:' % cishu))
改成了
guess = input('你还有%d次机会,猜猜看:' % cishu)
并在下方添加了while循环
    while cishu > 1 and not guess.isdigit():
        cishu = cishu - 1
        guess = input('你还有%d次机会,猜猜看:' % cishu)  
这里出现个问题,无法理解。
条件 cishu > 0 这个while循环,就会运行7次(每次都故意写成字母,不是数字),按理说,最后一次1-1应该等于0,但是为什么还会再次运行1次?
只有条件 写成  cishu > 1 的时候,才可以正常运行6次。
第二个问题:
下面代码中红色字体的问题。

注:为了方便运行查看结果,我将mishu 固定到1了。



import random
mishu = random.randint(1,1)
guess = 0
cishu = 6

print('不妨猜猜看,我心里的那个数是几?\n友情提示:1-10之间的某个数哦')
while guess != mishu and cishu > 0:
    guess = input('你还有%d次机会,猜猜看:' % cishu)
    while cishu > 1 and not guess.isdigit():     # 这里如果cishu写成> 0 就可以输入7次,无法理解这里为什么会这样
        cishu = cishu - 1
        guess = input('你还有%d次机会,猜猜看:' % cishu)  
        # 这里不知道次数用完了后,怎么跳出整个大循环并结束。
        # 想了很久后,添加下面else后,可以正常运行了,但是如果输入5次字母 最后一次猜对的话
        # 还是会提示 没有机会了,并结束程序,得不到正确结果。
        # 但是如果不在最后一次的时候,猜对,程序就没有问题。


    else:
        if cishu > 1:   #if cishu》= 1
            guess = int(guess)
            if guess > mishu:
                print('猜的有点大了,你还有%d次机会,再试试:' % cishu)
        
            if guess < mishu:
                print('猜的有点小了,你还有%d次机会,再试试:' % cishu)
            cishu = cishu - 1
        else:
            break
while guess == mishu:
    if cishu > 0:
        print('我草,还有%d次机会没用就猜对了,你是我肚子里的蛔虫吗?' % cishu)
        break
    else:
        print('我草,你是我肚子里的蛔虫吗?居然猜对了')
        break
else:
    print('哼,没机会了,游戏结束')

        
        
    # guess = input('你还有%d次机会,猜猜看:' % cishu)
    # a = isinstance(guess,int)
    # if a == True:
        # cishu = cishu - 1
        # if guess > mishu:
            # print('猜的有点大了,你还有%d次机会,再试试:' % cishu)
        # if guess < mishu:
            # print('猜的有点小了,你还有%d次机会,再试试:' % cishu)

# while guess == mishu:
    # if cishu > 0:
        # print('我草,还有%d次机会没用就猜对了,你是我肚子里的蛔虫吗?' % cishu)
        # break
    # else:
        # print('我草,你是我肚子里的蛔虫吗?居然猜对了')
        # break
# else:
    # print('哼,没机会了,游戏结束')
最佳答案
2017-12-22 12:48:39
1 从你的代码来看,如果将cishu > 0 改为 cishu > 1
那么一直输入非数字内层的while循环结束后cishu会等于1
此时提示还有1次机会是外层的while循环的第一条语句给出的

2 要跳出整个大循环可以通过设置一个flag来实现,初始化flag为假,如果次数用完,那么这个flag为真,
在外部部循环中加上一个判断语句
if flag:
        break
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-22 12:48:39 | 显示全部楼层    本楼为最佳答案   
1 从你的代码来看,如果将cishu > 0 改为 cishu > 1
那么一直输入非数字内层的while循环结束后cishu会等于1
此时提示还有1次机会是外层的while循环的第一条语句给出的

2 要跳出整个大循环可以通过设置一个flag来实现,初始化flag为假,如果次数用完,那么这个flag为真,
在外部部循环中加上一个判断语句
if flag:
        break
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-22 14:00:01 | 显示全部楼层
本帖最后由 xxpy_601 于 2017-12-22 14:01 编辑

1 从你的代码来看,如果将cishu > 0 改为 cishu > 1
那么一直输入非数字内层的while循环结束后cishu会等于1
此时提示还有1次机会是外层的while循环的第一条语句给出的

这里明白了
是指
while guess != mishu and cishu > 0:
    guess = input('你还有%d次机会,猜猜看:' % cishu)    是指 这里又给出了1次机会造成的。
    while cishu > 1 and not guess.isdigit():



2 要跳出整个大循环可以通过设置一个flag来实现,初始化flag为假,如果次数用完,那么这个flag为真,
在外部部循环中加上一个判断语句
if flag:
        break

这里还是没明白是加在什么地方。
是指在  while guess != mishu and cishu > 0:  外面加嘛?

另外,跳出循环的问题我用else(源代码中 注释下面的else)解决了(不知道对不对,不过能运行了,不过出现了以下问题),
最后出现的问题是:
在最后一次机会的时候 回答正确答案, 程序执行的是   错误的结果。
而 只要不是在最后一次的时候,回答正确答案,程序执行给出的就是正确的结果
零基础开始学的,问的问题可能比较傻,还请见谅哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-5 01:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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