wfjx_85 发表于 2017-12-13 16:22:49

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

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

发现问题之前
import random
secret = random.randint(1,10)
print('..........................我爱鱼C工作室..................')
teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
guess = int(teap)
num = 1
whilenum <=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
    whilenum <=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('游戏结束,不玩了!')

BngThea 发表于 2017-12-13 16:29:25

把if判断改成while判断,一直到输入数字
把这段代码:
teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
if isinstance(teap,int):
    guess = int(teap)
改成:
teap = input('不妨猜一下甲鱼现在心里想的是哪个数字:')
while not isinstance(teap,int):
    teap = input('请输入一个数字:')
guess = int(teap)

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

z199312 发表于 2017-12-13 17:37:02

这个。if判断在while的外面怎么循环呀 我给你改了一下看看是不是好理解了{:5_91:}
secret = random.randint(1,10)
num = 1
whilenum <=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('游戏结束,不玩了!')

像番茄加两个蛋 发表于 2017-12-13 18:06:58

使用try异常处理!

wfjx_85 发表于 2017-12-14 09:01:03

BngThea 发表于 2017-12-13 16:29
把if判断改成while判断,一直到输入数字
把这段代码:



验证了一下,无法进入数字大小的提示判断
不妨猜一下甲鱼现在心里想的是哪个数字:6
请输入一个数字
不妨猜一下甲鱼现在心里想的是哪个数字:3
请输入一个数字
不妨猜一下甲鱼现在心里想的是哪个数字:5
请输入一个数字
游戏结束,不玩了!
>>>

BngThea 发表于 2017-12-14 09:24:17

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


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

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

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

num = 1
whilenum <= 3:
    while not temp.isdigit():
      temp = input("请输入一个数字:")
    guess = int(temp)
   
    if guess == secret:
      print('我X,你是小甲鱼心里的蛔虫吗?!')
      print('哼,猜中了也没有奖励!')
      break
    elif guess > secret:
      print('哥,大了大了.....')
      if num < 3:
            temp = input('哎呀,猜错了,请重新输入:')
    else:
      print('嘿嘿,小了小了~~~')
      if num < 3:
            temp = input('哎呀,猜错了,请重新输入:')
    num = num + 1

print('游戏结束,不玩了!')

wfjx_85 发表于 2017-12-14 10:08:44

像番茄加两个蛋 发表于 2017-12-13 18:06
使用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('游戏结束,不玩了!')

wfjx_85 发表于 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('游戏结束,不玩了!')

wfjx_85 发表于 2017-12-14 10:25:54

BngThea 发表于 2017-12-14 09:24
我看错了,不能用isinstance函数,因为teap一直是str,不可能是int
应该改用str的isdigit函数



在运行过程中会报错。
你可以看看我回复的try语句,最后通过try语句循环搞定了。
页: [1]
查看完整版本: 跟小甲鱼老师学习到滴课遇到一个问题如何解决非数值输入的判断循环