鱼C论坛

 找回密码
 立即注册
查看: 3587|回复: 8

[已解决]跟小甲鱼老师学习到滴课遇到一个问题如何解决非数值输入的判断循环

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

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

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

x
    简单实现一个小游戏的功能,随机输入一个数字,如果和设定的一致,退出;如果不一致再给3次机会。
  这个功能我实现了,但是在第五课小甲鱼老师说如果输入的不是数字,就会报错。我一开始没有注意,后来试了一下。发现有问题。
通过 isinstance(teap,int),可以判断,但是判断以后的循环,没有思路了。请各位大神指点!

发现问题之前
import random
secret = random.randint(1,10)
print('..........................我爱鱼C工作室..................')
teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
guess = int(teap)
num = 1
while  num <=3:
    if guess == secret:
        print('我X,你是小甲鱼心里的蛔虫吗?!')
        print('哼,猜中了也没有奖励!')
        num = 4
    else :
        if guess > secret:
            print('哥,大了大了.....')
            teap = input('哎呀,猜错了,请重新输入:')
            guess = int(teap)
            num = num + 1
        else:
            print('嘿嘿,小了小了~~~')
            teap = input('哎呀,猜错了,请重新输入:')
            guess = int(teap)
            num = num + 1
print('游戏结束,不玩了!')

修改有问题之后
import random
secret = random.randint(1,10)
print('..........................我爱鱼C工作室..................')
teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
if isinstance(teap,int):
    guess = int(teap)
    num = 1
    while  num <=3:
        if guess == secret:
            print('我X,你是小甲鱼心里的蛔虫吗?!')
            print('哼,猜中了也没有奖励!')
            num = 4
        else :
            if guess > secret:
                print('哥,大了大了.....')
                teap = input('哎呀,猜错了,请重新输入:')
                guess = int(teap)
                num = num + 1
            else:
                print('嘿嘿,小了小了~~~')
                teap = input('哎呀,猜错了,请重新输入:')
                guess = int(teap)
                num = num + 1
else :
    print('请输入一个数字')
print('游戏结束,不玩了!')
最佳答案
2017-12-13 18:06:58
使用try异常处理!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-13 16:29:25 | 显示全部楼层
把if判断改成while判断,一直到输入数字
把这段代码:
  1. teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
  2. if isinstance(teap,int):
  3.     guess = int(teap)
复制代码

改成:
  1. teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
  2. while not isinstance(teap,int):
  3.     teap = input('请输入一个数字:')
  4. guess = int(teap)
复制代码


调整一下缩进,删去else分支即可

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

使用道具 举报

发表于 2017-12-13 17:37:02 | 显示全部楼层
这个。if判断在while的外面怎么循环呀 我给你改了一下看看是不是好理解了
secret = random.randint(1,10)
num = 1
while  num <=3:
    teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
    if isinstance(teap,int):
        guess = int(teap)
        if guess == secret:
            print('我X,你是小甲鱼心里的蛔虫吗?!')
            print('哼,猜中了也没有奖励!')
            break
        else :
            if guess > secret:
                print('哥,大了大了.....')
                teap = input('哎呀,猜错了,请重新输入:')
                guess = int(teap)
                num = num + 1
            else:
                print('嘿嘿,小了小了~~~')
                teap = input('哎呀,猜错了,请重新输入:')
                guess = int(teap)
                num = num + 1
    else :
        print('请输入一个数字')
        num+=1
        continue
print('游戏结束,不玩了!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-13 18:06:58 | 显示全部楼层    本楼为最佳答案   
使用try异常处理!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-14 09:01:03 | 显示全部楼层
BngThea 发表于 2017-12-13 16:29
把if判断改成while判断,一直到输入数字
把这段代码:

验证了一下,无法进入数字大小的提示判断
不妨猜一下甲鱼现在心里想的是哪个数字:6
请输入一个数字
不妨猜一下甲鱼现在心里想的是哪个数字:3
请输入一个数字
不妨猜一下甲鱼现在心里想的是哪个数字:5
请输入一个数字
游戏结束,不玩了!
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-14 09:24:17 | 显示全部楼层
wfjx_85 发表于 2017-12-14 09:01
验证了一下,无法进入数字大小的提示判断
不妨猜一下甲鱼现在心里想的是哪个数字:6
请输入一个数字

我看错了,不能用isinstance函数,因为teap一直是str,不可能是int
应该改用str的isdigit函数

而且你的判断过程应该中每次输入都需要使用,所以应该放到整个循环内部
修改后的代码如下:

  1. import random
  2. secret = random.randint(1,10)
  3. print('..........................我爱鱼C工作室..................')
  4. temp = input('不妨猜一下甲鱼现在心里想的是哪个数字:')

  5. num = 1
  6. while  num <= 3:
  7.     while not temp.isdigit():
  8.         temp = input("请输入一个数字:")
  9.     guess = int(temp)
  10.    
  11.     if guess == secret:
  12.         print('我X,你是小甲鱼心里的蛔虫吗?!')
  13.         print('哼,猜中了也没有奖励!')
  14.         break
  15.     elif guess > secret:
  16.         print('哥,大了大了.....')
  17.         if num < 3:
  18.             temp = input('哎呀,猜错了,请重新输入:')
  19.     else:
  20.         print('嘿嘿,小了小了~~~')
  21.         if num < 3:
  22.             temp = input('哎呀,猜错了,请重新输入:')
  23.     num = num + 1

  24. print('游戏结束,不玩了!')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-14 10:08:44 | 显示全部楼层

感谢,我仔细上网查了一下,根据类似案例的介绍。成功解决
import random
secret = random.randint(1,10)
print('..........................我爱鱼C工作室..................')
num = 0
while 1:
    teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
    try:
        guess = int(teap)
    except:
        print('请输入一个数字!')
    else:
        break
while guess != secret and num <= 3:
    if guess > secret:
        print('哥,大了大了.....')
    elif guess < secret:
        print('嘿嘿,小了小了~~~')
    while 1:
        teap = input('哎呀,猜错了,请重新输入:')
        try:
            guess = int(teap)
        except:
            print('请输入一个数字!')
        else:
            break
    num = num + 1
else:
    print('我X,你是小甲鱼心里的蛔虫吗?!')
    print('哼,猜中了也没有奖励!')
print('游戏结束,不玩了!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-14 10:09:44 | 显示全部楼层
BngThea 发表于 2017-12-13 16:29
把if判断改成while判断,一直到输入数字
把这段代码:

谢谢,我通过try语句解决了
import random
secret = random.randint(1,10)
print('..........................我爱鱼C工作室..................')
num = 0
while 1:
    teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
    try:
        guess = int(teap)
    except:
        print('请输入一个数字!')
    else:
        break
while guess != secret and num <= 3:
    if guess > secret:
        print('哥,大了大了.....')
    elif guess < secret:
        print('嘿嘿,小了小了~~~')
    while 1:
        teap = input('哎呀,猜错了,请重新输入:')
        try:
            guess = int(teap)
        except:
            print('请输入一个数字!')
        else:
            break
    num = num + 1
else:
    print('我X,你是小甲鱼心里的蛔虫吗?!')
    print('哼,猜中了也没有奖励!')
print('游戏结束,不玩了!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-14 10:25:54 | 显示全部楼层
BngThea 发表于 2017-12-14 09:24
我看错了,不能用isinstance函数,因为teap一直是str,不可能是int
应该改用str的isdigit函数

在运行过程中会报错。
你可以看看我回复的try语句,最后通过try语句循环搞定了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 18:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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