涛4091 发表于 2018-2-18 17:59:10

怎样判断输入一个东西为整数,老师说过有两种方法,我这种哪里错了

import random
secret = random.randint(1,10)
print ('------------------------不放猜一下老子心里面那个数---------------------')
lht = input('不要墨迹哦,快猜:')
number = int(lht)
while type (lht)!= type(1):
      print ('抱歉格式错误')
      lht = input ('请输入一个整数:')
      if type(lht)==type(1):
                break
while number != secret:
      lht = input('猜错了请重新输入:')
      number = int(lht)
      if number == secret:
                break
      else:
             if number > secret:
                  print('大了,大了''\n')
             else:
                print("小了,小了"'\n')
print('你是老子的蛔虫吗''\n''猜对了也没有奖励')
print('游戏结束不玩了')

°蓝鲤歌蓝 发表于 2018-2-18 18:13:15

1.如果输入的是汉字字符串或者浮点数字符串,这一行会报错(例: '你',''1.5")
number = int(lht)

2. lht 是字符串,类型永远与 1 这个整型是不一样的
type (lht)!= type(1):

3.代码有点重复

第四时空 发表于 2018-2-18 18:27:18

字符串的isdigit方法可以判断字符串是不是正整数。不能判断负数和浮点数。
或者try...except来判断。

圣剑三刀。abx 发表于 2018-2-18 21:36:27

input给的还是一个字符串,所以你type出来的一个是字符串,一个是整数当然不对啦
试试:
s = input('请输入一个整数:')
    while not s.isdigit():
    print('抱歉,输入不合法。',end='')
    s = input('请输入一个整数:')
具体用法见课后作业啦,再发一个完整版
import random
times = 3
secret = random.randint(1,9)
print('--------------我爱鱼C工作室--------------')
guess = 0
print("不妨猜一下小甲鱼心里想的是那个数字:",end="")
while (guess != secret) and (times > 0):
    temp = input()
    while not temp.isdigit():
      print('抱歉,输入不合法。',end='')
      temp = input('请输入一个整数:')
    guess = int(temp)
    times = times - 1
    if guess == secret:
      print('我草,你是小甲鱼心里的蛔虫吗?!')
      print('哼,猜中了也没有奖励!')
    else:
      if guess > secret:
            print('哥,大了大了~~~')
      else:
            print('嘿,小了!小了~~~')
      if times > 0:
            print('再试一次吧:',end="")
      else:
            print('机会用光咯T_T')
print('游戏结束,不玩拉^_^')

涛4091 发表于 2018-2-19 15:42:40

圣剑三刀。abx 发表于 2018-2-18 21:36
input给的还是一个字符串,所以你type出来的一个是字符串,一个是整数当然不对啦
试试:
s = input('请输 ...

我就不知道为什么一开始 guess = 0
然后 while 后面 guess 和 secret 比较 ,这两个比较肯定为真啊, 那比较有什么用?直接只比较times

圣剑三刀。abx 发表于 2018-2-19 16:23:23

涛4091 发表于 2018-2-19 15:42
我就不知道为什么一开始 guess = 0
然后 while 后面 guess 和 secret 比较 ,这两个比较肯定为真啊,...

我们理下思路,程序的目的是:答对了游戏结束,答错了重答,有三次机会。
所以guess 和 while比较就是为了答对了程序就结束了,而不是答对了还要答。(我自己也错过,可以运行试试哦)
第一个问题,为啥guess一开始赋值0,其实你赋值几都行,只有一个要求:不等于guess,也就是说,不能选用你随机模块的数字范围中的数。为什么?你发现吗第一次问你叫你要猜数字(在while外),而你答错了时让你重答(在while内),然而这样的话第一次因为在while外所以程序不会告诉你是大了还是下啦,答对了甚至直接程序结束。guess等于0就是让第一次你输入的数字就在while中体现。我知道比较难理解,建议可以自己按程序的每一步走走看,这样很有帮助哦。

涛4091 发表于 2018-2-19 16:56:52

圣剑三刀。abx 发表于 2018-2-19 16:23
我们理下思路,程序的目的是:答对了游戏结束,答错了重答,有三次机会。
所以guess 和 while比较就是为 ...

嗯。。好像是那样
那个按程序一步一步进行的功能在哪找

涛4091 发表于 2018-2-19 17:10:46

圣剑三刀。abx 发表于 2018-2-19 16:23
我们理下思路,程序的目的是:答对了游戏结束,答错了重答,有三次机会。
所以guess 和 while比较就是为 ...

import random
secret = random.randint(1,10)
print ('------------------------不放猜一下老子心里面那个数---------------------')
print ('不妨猜一下老子心里面那个数字')
times = 3
while times > 0:
      lht = input('请输入一个整数:')
      iflht.isdigit():
                number = int (lht)
                if number == secret :
                        print ('我操,你是老子肚子里的蛔虫吗')
                        print ('猜对了也没有奖励')
                elif number > secret :
                        print ('大了 大了')
                else:
                        print ('小了 小了')
                if times > 1 :
                        print ('在试一次吧')
                else:
                        print ('机会用光了')
      else :
                print ('输入的格式错误,重新输入')
      
      times = times - 1

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


没赋初值也可以啊 而且我看着第一次比较也在while内

圣剑三刀。abx 发表于 2018-2-19 17:20:43

涛4091 发表于 2018-2-19 17:10
没赋初值也可以啊 而且我看着第一次比较也在while内

嗯对的,我仔细看了下,你的问题就在如果机会没用完就答对了,程序还是会让你输入数字对吧。我们希望答对了程序就结束了。这就是guess(你的lht)为什么要存在、赋值且与secret作比较的原因。你可以让它跑起来看看我说的对不对

涛4091 发表于 2018-2-19 17:31:15

圣剑三刀。abx 发表于 2018-2-19 17:20
嗯对的,我仔细看了下,你的问题就在如果机会没用完就答对了,程序还是会让你输入数字对吧。我们希望答对 ...

那加个 break 我试了试 也可以吧?

圣剑三刀。abx 发表于 2018-2-19 18:38:50

涛4091 发表于 2018-2-19 17:31
那加个 break 我试了试 也可以吧?

嗯,能答对程序结束就对啦。
页: [1]
查看完整版本: 怎样判断输入一个东西为整数,老师说过有两种方法,我这种哪里错了