鱼C论坛

 找回密码
 立即注册
查看: 3889|回复: 10

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

[复制链接]
发表于 2018-2-18 17:59:10 | 显示全部楼层 |阅读模式

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

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

x
  1. import random
  2. secret = random.randint(1,10)
  3. print ('------------------------不放猜一下老子心里面那个数---------------------')
  4. lht = input('不要墨迹哦,快猜:')
  5. number = int(lht)
  6. while type (lht)!= type(1):
  7.         print ('抱歉格式错误')
  8.         lht = input ('请输入一个整数:')
  9.         if type(lht)==type(1):
  10.                 break
  11. while number != secret:
  12.         lht = input('猜错了请重新输入:')
  13.         number = int(lht)
  14.         if number == secret:
  15.                 break
  16.         else:
  17.              if number > secret:
  18.                     print('大了,大了''\n')
  19.              else:
  20.                 print("小了,小了"'\n')
  21. print('你是老子的蛔虫吗''\n''猜对了也没有奖励')
  22. print('游戏结束不玩了')
复制代码
最佳答案
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('游戏结束,不玩拉^_^')
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-18 18:13:15 | 显示全部楼层
1.如果输入的是汉字字符串或者浮点数字符串,这一行会报错(例: '你',''1.5")
  1. number = int(lht)
复制代码


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


3.代码有点重复
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-18 18:27:18 | 显示全部楼层
字符串的isdigit方法可以判断字符串是不是正整数。不能判断负数和浮点数。
或者try...except来判断。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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('游戏结束,不玩拉^_^')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我就不知道为什么一开始 guess = 0
然后 while 后面 guess 和 secret 比较 ,这两个比较肯定为真啊, 那比较有什么用?直接只比较times
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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中体现。我知道比较难理解,建议可以自己按程序的每一步走走看,这样很有帮助哦。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

嗯。。好像是那样
那个按程序一步一步进行的功能在哪找
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-19 17:10:46 | 显示全部楼层
圣剑三刀。abx 发表于 2018-2-19 16:23
我们理下思路,程序的目的是:答对了游戏结束,答错了重答,有三次机会。
所以guess 和 while比较就是为 ...
  1. import random
  2. secret = random.randint(1,10)
  3. print ('------------------------不放猜一下老子心里面那个数---------------------')
  4. print ('不妨猜一下老子心里面那个数字')
  5. times = 3
  6. while times > 0:
  7.         lht = input('请输入一个整数:')
  8.         if  lht.isdigit():
  9.                 number = int (lht)
  10.                 if number == secret :
  11.                         print ('我操,你是老子肚子里的蛔虫吗')
  12.                         print ('猜对了也没有奖励')
  13.                 elif number > secret :
  14.                         print ('大了 大了')
  15.                 else:
  16.                         print ('小了 小了')
  17.                 if times > 1 :
  18.                         print ('在试一次吧')
  19.                 else:
  20.                         print ('机会用光了')
  21.         else :
  22.                 print ('输入的格式错误,重新输入')
  23.         
  24.         times = times - 1

  25. print('游戏结束不玩了')
复制代码



没赋初值也可以啊 而且我看着第一次比较也在while内
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-19 17:20:43 | 显示全部楼层
涛4091 发表于 2018-2-19 17:10
没赋初值也可以啊 而且我看着第一次比较也在while内

嗯对的,我仔细看了下,你的问题就在如果机会没用完就答对了,程序还是会让你输入数字对吧。我们希望答对了程序就结束了。这就是guess(你的lht)为什么要存在、赋值且与secret作比较的原因。你可以让它跑起来看看我说的对不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

那加个 break 我试了试 也可以吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-19 18:38:50 | 显示全部楼层
涛4091 发表于 2018-2-19 17:31
那加个 break 我试了试 也可以吧?

嗯,能答对程序结束就对啦。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 08:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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