鱼C论坛

 找回密码
 立即注册
查看: 3890|回复: 29

[技术交流] Python:每日一题 143

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

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

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

x
本帖最后由 冬雪雪冬 于 2018-2-5 20:38 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
我们知道input返回的值都是字符串,现在要求如果可以转换为整数则用int转为整数,如'2', '-3',如果是浮点数则用float转为浮点数,如'12.34', '-3.2E5',如果不能转换则保留为字符串。
注不要用eval函数。

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-1-18 11:17:26 | 显示全部楼层
本帖最后由 弟大勿波 于 2018-1-18 14:13 编辑
  1. def getval(a):
  2.     try:
  3.         a= int(a)
  4.     except:
  5.         a= float(a)
  6.     finally:
  7.         return a
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-18 13:50:36 | 显示全部楼层
x = input('something:')
if x.isdigit():
        x = int(x)
elif '.' in x:
        if x.count('.') == 1:
                x = float(x)

print(x)
print(type(x))

点评

有小数点的不一定能转为浮点数,如"a.b",没有小数点的也有可能转为浮点数,如"1e3"  发表于 2018-2-5 20:41
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-18 14:00:03 | 显示全部楼层
  1. num = input("要检查的字符:")
  2. lists = num.split('.')
  3. #计算长度
  4. lenct = len(lists)

  5. if lenct == 2:
  6.     #计算的两个是否是整型标识
  7.     l = 0;
  8.     for i,n in enumerate(lists):
  9.         if n.isnumeric():
  10.             l = l+1;
  11.     if l == 2:
  12.         print('字符是浮点型 %s' % float(num))
  13.     else:
  14.         print('字符是字符串类型: %s' % str(num))
  15. elif lenct == 1:
  16.     if num.lstrip('-').isdigit():

  17.         print('字符是整型: %s' % int(num))
  18.     else:
  19.         print('字符是字符串类型: %s' % str(num))
  20. else:
  21.     print('字符是字符串类型: %s' % str(num))
复制代码

点评

1e3这类的不能转换  发表于 2018-2-5 20:43
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-18 14:02:42 | 显示全部楼层
  1. temp= input('随便输入吧,能报错算我输!')
  2. try:
  3.         a = int(temp)
  4.         print('你输入了一个整数!数字是%d'%a)
  5. except:
  6.         try:
  7.                 b = float(temp)
  8.                 print('你输入了一个浮点数!数字是%f'%b)
  9.         except:
  10.                 print('看你随便你怎么输我就是不报错!你输入的什么都不是,只能当成字符串啦:%s'%temp)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-18 14:22:58 From FishC Mobile | 显示全部楼层
a = '1235'


try:
    b = int(a)
except ValueError:
    try:
        b= float(a)
    except ValueError:
        b = a
finally:
    print b

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-18 15:33:05 | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-1-18 15:36 编辑
  1. #  第一感用正则,但是还没学,只能一层一层的if.
  2. #  经验证可行。不过没有考虑到e大写(用lower()应该就可以了),及+(正号)的情况(需要再多几个if)。


  3. def isInt(a):
  4.     if a.isnumeric() or (a[0] == '-' and a[1:].isnumeric()):
  5.         return True

  6. def isFloat(a):
  7.     if a[0] != '-':
  8.         if a.replace('e','').replace('.','').replace('-', '').isnumeric():
  9.             if a.count('.') == 1:
  10.                 if a.count('e') == 0:
  11.                     return True
  12.                 elif a.count('e') == 1:
  13.                     if a[-1] == 'e':
  14.                         return False
  15.                     else:
  16.                         index_e = a.index('e')
  17.                         if isFloat(a[:index_e]) and isInt(a[index_e+1:]):
  18.                             return True
  19.             elif a.count('.') == 0:
  20.                 if a.count('e') == 1:
  21.                     if a[-1] == 'e':
  22.                         return False
  23.                     else:
  24.                         return True
  25.     else:
  26.         return isFloat(a[1:])
  27.                     
  28. def changeType():
  29.     a = input('请输入一个字符串:').strip()
  30.     if a == '':
  31.         a = input('请输入一个字符串:')
  32.     elif isInt(a):
  33.         a = int(a)
  34.     elif isFloat(a):
  35.         a = float(a)
  36.     print('字符串转换后Type为:{0}, 值为:{1}'.format(type(a), a))

  37. for i in range(15):
  38.     print(i, '-->', end = ' ')
  39.     changeType()
复制代码
1.png

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-18 17:18:56 | 显示全部楼层
obj=input('Please input object:')

if isinstance(obj,int)==True:
     print( int(obj))
elif isinstance(obj,float)==True:
    print( float(obj))
else:
    print( str(obj))


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

使用道具 举报

发表于 2018-1-18 18:40:06 | 显示全部楼层
想不到怎么弄,只好跟着题目说的一路转换下去了
一对比,感觉eval真强大
  1. def new_input(prompt=""):
  2.     temp = input(prompt)
  3.     try:
  4.         return int(temp)
  5.     except ValueError:
  6.         try:
  7.             return float(temp)
  8.         except ValueError:
  9.             return temp
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-19 05:19:35 | 显示全部楼层
  1. def isfloat(string):
  2.     try:
  3.         float(string)
  4.         return True
  5.     except ValueError:
  6.         return False

  7. def iscomplex(string):
  8.     try:
  9.         complex(string)
  10.         return True
  11.     except ValueError:
  12.         return False

  13. def convert_string(string):
  14.     if string.isdigit():
  15.         return int(string)
  16.     elif isfloat(string):
  17.         return float(string)
  18.     elif iscomplex(string):
  19.         return complex(string)
  20.     else:
  21.         return string

  22. if __name__ == '__main__':
  23.     string = convert_string(input('>>> '))
  24.     print(type(string))
复制代码

点评

输入-12试试  发表于 2018-2-5 20:47
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-19 08:56:42 | 显示全部楼层
a = input('请输入:')
try:
    b = int(a)
    print(b,'数字')
except:
    try :
        b= float(a)
        print(b,'浮点')
    except:
        print(a,'字符')

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-19 09:10:57 | 显示全部楼层
  1. def fun143(x):
  2.     try:
  3.         return int(x)
  4.     except:
  5.         pass
  6.     try:
  7.         return float(x)
  8.     except:
  9.         return x

  10. if __name__ == '__main__':
  11.     x = input('输入字符串:')
  12.     print(fun143(x))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-19 10:10:15 | 显示全部楼层
  1. num_input = input('请输入任意字符:')
  2. try:
  3.         int(num_input)
  4.         print('整数字符转换为整数:%d'%int(num_input))
  5. except ValueError as reason:
  6.         try:
  7.                 float(num_input)
  8.                 print('浮点数字符转换为浮点数:%f'%float(num_input))
  9.         except ValueError as reason:
  10.                 print('不能转化保留为字符串:%s'%num_input)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-19 10:47:33 | 显示全部楼层
感觉方法有点傻,不过也想不到别的方法了,请大神指点~

  1. def input1(msg):
  2.     s1 = input(msg)
  3.     try:
  4.         i1 = int(s1)
  5.         return i1
  6.     except ValueError:
  7.         try:
  8.             f1 = float(s1)
  9.             return f1
  10.         except ValueError:
  11.             return s1


  12. a = input1("请输入:")
  13. print(a)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-19 14:09:19 | 显示全部楼层
temp = input('请输入值')

if temp == isInt(str):
    return int(temp)
if temp == ^[-+]?[0-9]*\.?[0-9]+$:
    return float(temp)
else:
        return str(temp)

点评

isInt是什么函数?  发表于 2018-2-5 20:49
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-19 18:52:09 | 显示全部楼层
  1. def fun( string ):
  2.     try:
  3.         return int(string)
  4.     except:
  5.         try:
  6.             return float(string)
  7.         except:
  8.             return string

  9. def main():
  10.     s = input('请输入一个字符串: ')
  11.     res = fun( s )
  12.     print('res = ',res, ',', type(res).__name__ )

  13. if __name__ == "__main__":
  14.     main()
复制代码

结果:
  1. ==================== RESTART: H:\Desktop\Game\Game143.py ====================
  2. 请输入一个字符串: 123
  3. res =  123 , int
  4. >>>
  5. ==================== RESTART: H:\Desktop\Game\Game143.py ====================
  6. 请输入一个字符串: 3e-2
  7. res =  0.03 , float
  8. >>>
  9. ==================== RESTART: H:\Desktop\Game\Game143.py ====================
  10. 请输入一个字符串: jack
  11. res =  jack , str
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-23 15:34:24 | 显示全部楼层
想不出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-23 16:06:29 | 显示全部楼层
其他鱼友的答案带我提交后可以查看吗?

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

使用道具 举报

发表于 2018-1-23 17:39:13 | 显示全部楼层
本帖最后由 mike0724 于 2018-1-23 17:58 编辑

my_input=input("请输入:")
try:
        my_input = int(my_input)
        print("可以转换int")
except:
        try:
                my_input = float(my_input)
                print("可以转换float")
        except  :
                print("就是字符串")

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-24 22:23:21 | 显示全部楼层
  1. def myinput():
  2.     data = input('请输入:')
  3.     try:
  4.         new_data = int(data)

  5.     except ValueError:
  6.         try:
  7.             new_data = float(data)
  8.         except ValueError:
  9.             return data
  10.     return new_data
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 06:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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