鱼C论坛

 找回密码
 立即注册
查看: 1011|回复: 8

[已解决]关于input获取值转化为数据类型

[复制链接]
发表于 2018-9-13 13:33:07 | 显示全部楼层 |阅读模式

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

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

x
while 1:
    try:
        a = input("请以列表形式输入一组数:")
        b = input("请以列表形式输入一组数:")
    except:
        print("输入数据有误!")
    gap = abs(float(a[0])- float(b[0]))
    for x in a:
        x = int(x)
        for y in b:
            y = int(y)
            if gap >= abs(x - y):
               
                gap = abs(x - y)
                a0 = x
                b0 = y
    print("差值绝对值最小为:%s,两个数分别为:%s,%s"%(gap,a0,b0))

输入两个数组
[1,2,3,4]
[1,2,3,4]
提示报错:
File "E:/data/学习资料/python学习资料/PythonApp/everydaywork_208.py", line 8, in <module>
    gap = abs(float(a[0])- float(b[0]))
ValueError: could not convert string to float: '['
请问各位大佬,这是怎么回事
最佳答案
2018-9-13 14:32:01
IChoose 发表于 2018-9-13 14:03
a = input("请以列表形式输入一组数:")
b = []
b=

你输入的字符串是这样的   ''[1,2,3,4,5]
如果利用for循环,你需要把里面的所有字符挨个提取一遍
a = input()
for i in a:
   print(i)
这样的i会包括数字 逗号  中括号,  所以需要一个判断
if i in ['[',']',',']:
  pass
else:
  b.append(int(x))

不过这样做还是会有问题,当你列表中有多位数以上的数字时,列表不会加入多位数,而是会分开
就像  12   不会加 12   会添加  1 或者 2
所以上面的判断又不行,需要修改
于是可以通过字符串方法来修改
a = input()
b = a.split(',')
这样b是一个列表 里面的数字会是 [  '[1' ,'2','3' ,'4]'  ]    这样的
你需要把中括号去掉,利用上面的那个条件语句就可以做到
或者你可以利用python 中的re模块,也就是正则表达式
小甲鱼的扩展阅读里面有
https://fishc.com.cn/forum.php?m ... peid%26typeid%3D403
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-9-13 13:43:16 From FishC Mobile | 显示全部楼层
input的是一个字符串,不能变成浮点数,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-13 13:47:37 From FishC Mobile | 显示全部楼层
还有,input输入的字符串
'[1,2]'可以通过eval()
把字符串变成python能处理的数据,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-13 13:56:31 | 显示全部楼层
错误原因是Input函数获取到的值是一串字符串,你需要对字符串进行处理,才能得到你所需要的列表
至于处理方法可以用正则表达式,把字符串里面的数字一个一个提取出来,放进一个列表里面
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-13 14:03:51 | 显示全部楼层
RIXO 发表于 2018-9-13 13:56
错误原因是Input函数获取到的值是一串字符串,你需要对字符串进行处理,才能得到你所需要的列表
至于处理 ...

a = input("请以列表形式输入一组数:")
b = []
b=[int(x) for x in a]
类似于这样吗,但是还是报错,
File "E:\data\学习资料\python学习资料\PythonApp\Demo_test.py", line 3, in <listcomp>
    b=[int(x) for x in a]
ValueError: invalid literal for int() with base 10: '['
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-13 14:32:01 | 显示全部楼层    本楼为最佳答案   
IChoose 发表于 2018-9-13 14:03
a = input("请以列表形式输入一组数:")
b = []
b=

你输入的字符串是这样的   ''[1,2,3,4,5]
如果利用for循环,你需要把里面的所有字符挨个提取一遍
a = input()
for i in a:
   print(i)
这样的i会包括数字 逗号  中括号,  所以需要一个判断
if i in ['[',']',',']:
  pass
else:
  b.append(int(x))

不过这样做还是会有问题,当你列表中有多位数以上的数字时,列表不会加入多位数,而是会分开
就像  12   不会加 12   会添加  1 或者 2
所以上面的判断又不行,需要修改
于是可以通过字符串方法来修改
a = input()
b = a.split(',')
这样b是一个列表 里面的数字会是 [  '[1' ,'2','3' ,'4]'  ]    这样的
你需要把中括号去掉,利用上面的那个条件语句就可以做到
或者你可以利用python 中的re模块,也就是正则表达式
小甲鱼的扩展阅读里面有
https://fishc.com.cn/forum.php?m ... peid%26typeid%3D403
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-13 15:00:34 | 显示全部楼层
RIXO 发表于 2018-9-13 14:32
你输入的字符串是这样的   ''[1,2,3,4,5]
如果利用for循环,你需要把里面的所有字符挨个提取一遍
a = i ...

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

使用道具 举报

发表于 2018-9-13 15:44:01 From FishC Mobile | 显示全部楼层
IChoose 发表于 2018-9-13 15:00
get,谢谢

楼主,刚才网络不给力
那样的输入对用户来说其实不方便,要求用户在输入的时候以空格隔开就好

cin = input(...)
a = cin.split()
b = [ float(x) for x in a ]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-14 08:36:57 | 显示全部楼层
claws0n 发表于 2018-9-13 15:44
楼主,刚才网络不给力
那样的输入对用户来说其实不方便,要求用户在输入的时候以空格隔开就好

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-1 13:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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