鱼C论坛

 找回密码
 立即注册
查看: 2363|回复: 7

Python代码 终端输入 -1 为什么会被识别成 str类型?

[复制链接]
发表于 2017-2-14 13:31:59 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 GrantWard 于 2017-2-14 16:48 编辑

以下是我写的代码,功能是根据用户输入的数字来判断要加载的问题

  1. #encoding: utf-8

  2. class Practices(object):
  3.     '''
  4.          第二讲动动手
  5.     '''
  6.     def practice0(self, name):
  7.         '''
  8.             编写程序,要求用户输入姓名,并打印“你好 + 姓名”
  9.         '''
  10.         print('你好, ' + name)


  11.     def practice1(self, num):
  12.         '''
  13.             要求用户输入1到100之间数字进行判断,输入符合要求打印'你妹好漂亮',不符合要求输出'你大爷好丑'
  14.         '''
  15.         if 1 <= num <= 100:
  16.             print('你妹好漂亮^_^')
  17.         else:
  18.             print('你大爷好丑T_T')

  19. def main():
  20.     '''
  21.       main 函数
  22.     '''
  23.     p = Practices()
  24.     temp = input('请输入要运行的题目: ')
  25.     if temp.isdigit():
  26.         num = int(temp)
  27.         if num > 0:
  28.             print(type(num))
  29.             user_input = input('请输入您的姓名: ')
  30.             p.practice0(user_input)
  31.         else:
  32.             temp = input('请输入1到100之间的数字: ')
  33.             if temp.isdigit():
  34.                 user_input = int(temp)
  35.                 p.practice1(user_input)
  36.             else:
  37.                 print('请输入数字')
  38.     else:
  39.         print('请输入数字')


  40. if __name__ == '__main__':
  41.     main()
复制代码


在终端中输入正数程序能正常运行,如果输入负数程序就会走请“输入数字”判断,请问我该怎么修改呢?或者说终端怎么正确输入负数


****************************************************************************************************************************
原帖以解决,参照各位大佬的回复修正bug后新代码如下:
  1. #encoding: utf-8

  2. class Practices(object):
  3.     '''
  4.          第二讲动动手
  5.     '''
  6.     def practice0(self, name):
  7.         '''
  8.             编写程序,要求用户输入姓名,并打印“你好 + 姓名”
  9.         '''
  10.         print('你好, ' + name)


  11.     def practice1(self, num):
  12.         '''
  13.             要求用户输入1到100之间数字进行判断,输入符合要求打印'你妹好漂亮',不符合要求输出'你大爷好丑'
  14.         '''
  15.         if 1 <= num <= 100:
  16.             print('你妹好漂亮^_^')
  17.         else:
  18.             print('你大爷好丑T_T')

  19. def main():
  20.     '''
  21.       main 函数
  22.     '''
  23.     p = Practices()
  24.     while True:
  25.         temp = input('请输入要运行的题目: ')
  26.         try:
  27.             num = int(temp)
  28.         except ValueError:
  29. ------------最新修正部分--------------
  30.              try:
  31.                 num = float(temp)
  32.             except ValueError:
  33.                 break
  34. -------------最新修正部分-------------
  35.         if num > 0:
  36.             user_input = input('请输入您的姓名: ')
  37.             p.practice0(user_input)
  38.         else:
  39.             temps = input('请输入1到100之间的数字: ')
  40.             try:
  41.                 number = int(temps)
  42.                 p.practice1(number)
  43.             except ValueError:
  44.                 print('请输入数字')


  45. if __name__ == '__main__':
  46.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-14 14:40:02 | 显示全部楼层
本帖最后由 lumber2388779 于 2017-2-14 14:41 编辑

temp = input('请输入要运行的题目: ')在这句后边加上
num = int(temp)试下
if temp.isdigit():改成if num.isdigit():
python3里面input默认接收到的事str类型,所以你输入的就是字符串
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-14 15:40:47 | 显示全部楼层
input以后是字符串类型的,所以要用int()强制转换成整形,且最好用try和except捕获下异常
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-14 15:47:47 | 显示全部楼层
可以用try来处理。
  1. while True:
  2.     temp = input('请输入要运行的题目: ')
  3.     try:
  4.         num = int(temp)
  5.         break
  6.     except ValueError:
  7.         print('请输入数字')
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
GrantWard + 5 + 5 + 3 谢大佬

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-14 15:49:38 | 显示全部楼层
本帖最后由 GrantWard 于 2017-2-14 15:54 编辑
lumber2388779 发表于 2017-2-14 14:40
temp = input('请输入要运行的题目: ')在这句后边加上
num = int(temp)试下
if temp.isdigit():改成if nu ...


谢大佬指正,另外大佬如果按照你这么改会引发另外一个错误,int 没有 isdigit方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-14 15:50:11 | 显示全部楼层
^ambition 发表于 2017-2-14 15:40
input以后是字符串类型的,所以要用int()强制转换成整形,且最好用try和except捕获下异常

谢大佬指正
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-14 16:16:47 | 显示全部楼层
GrantWard 发表于 2017-2-14 15:49
谢大佬指正,另外大佬如果按照你这么改会引发另外一个错误,int 没有 isdigit方法

说下抱歉- -我也不是什么大佬,我只是学过其他语言,python也是在学习中的
s为字符串 s.isdigit() 所有字符都是数字
增加函数
def func(x):
    try:
        x=int(x)
        return isinstance(x,int)
    except ValueError:
        return False
if temp.isdigit():改成if func(temp):
不过这种只能用于整形,浮点数会有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-14 16:37:44 | 显示全部楼层
本帖最后由 GrantWard 于 2017-2-14 16:49 编辑
lumber2388779 发表于 2017-2-14 16:16
说下抱歉- -我也不是什么大佬,我只是学过其他语言,python也是在学习中的
s为字符串 s.isdigit() 所有字 ...


最终嵌套try except 完美解决
  try:
            num = int(temp)
        except ValueError:
------------最新修正部分--------------
             try:
                num = float(temp)
            except ValueError:
                break
-------------最新修正部分-------------

参照我新改的帖子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-25 09:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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