代码应该创建一个包含五个列表的列表,每个列表都是根据用户每次输入的数字(五个)创建的。所以例如如果用户键入
1 2 3 4 5
1 2
1.5 2
2.2
1
输出应为:[[1, 2, 3, 4, 5], [1, 2], [1.5, 2], [2,2], [1]]
任何帮助表示赞赏。我知道要解决这个问题,你需要将字符串转换为int或float,但似乎无法使其工作。
nlist = []
n = len(nlist)
while n < 5:
num = input("Enter a Number: ").split()
for x in num:
if '.' in num[x]:
num[x] = float(num[x])
else:
num[x] = int(num[x])
nlist.append(num)
n = n + 1
print(nlist)
答案 0 :(得分:1)
基本上在您的代码中,您尝试访问x
循环中列表num
的{{1}}元素,但for in
不是内容中元素的索引列表,但引用它。
看看修改后的代码:
x
所以对于以下输入:
nlist = []
n = len(nlist)
while n < 5:
num = input("Enter a Number: ").split()
tmplist = []
for x in num:
if '.' in x:
x = float(x)
else:
x = int(x)
tmplist.append(x)
nlist.append(tmplist)
n = n + 1
print(nlist)
将输出:
Enter a Number: 1 2 3 4 5
Enter a Number: 1 2
Enter a Number: 1.5 2
Enter a Number: 2.2
Enter a Number: 1
答案 1 :(得分:0)
这种方法可以完成你所追求的效果,并且用更少的线条来实现:
nList = []
for n in range(5):
#Takes an input "5 3.5 5 2 3" converts it to [5, 3.5, 5, 2, 3]
listItems = list(map(eval, input("Numbers for sub-list: ").split()))
#Append the list to the nList
nList.append(listItems)
print(nList)
因此,不是嵌套两个循环,而是在' listItem '变量中,它只是将输入作为字符串:
"5 3.5 2"
分裂:
input().split()
["5", "3.5", "2"]
然后将每个项目映射到'eval',根据字符串选择float或integer:
list(map(eval, input().split()))
[5, 3.5, 2]
重要说明:'eval'可能是一个危险的命令,请务必在进一步使用之前查看其中的文档。请查看以下评论以获取更多详细信息。
<强>替代地强> 如果您不想使用eval,请考虑以下解决方案:
nList = []
for n in range(5):
itemList = input("Numbers to add: ").split()
subList = []
for item in itemList:
if "." in item:
item = float(item)
else:
item = int(item)
subList.append(item)
nList.append(subList)
print(nList)
答案 2 :(得分:0)
将list comprehension
与str.find
一起使用,看看是否要转换为float
或int
:
>>> out = []
>>> for i in range(n):
inp = input().split()
out.append([ float(ele) if ele.find('.')>-1 else int(ele) for ele in inp])
#driver values:
IN : n = 5
IN :
1 2 3 4 5
1 2
1.5 2
2.2
1
OUT : [[1, 2, 3, 4, 5], [1, 2], [1.5, 2], [2.2], [1]]