我需要一个程序 in Python ,它会要求用户在一行中输入多个数字,每个数字用空格分隔。与Enter your numbers: 2 1 5 8 9 5
一样,我需要打印[2, 1, 5, 8, 9, 5]
但到目前为止我制作的节目不接受空格,我该如何改变呢?还有一种方法可以使数字从最小到最大顺序排列吗?
这是我到目前为止所拥有的:
elx = []
el = input("Enter your numbers: ")
for i in el:
if el.isdigit():
elx.append(el)
break
if not el.isdigit():
print ("Number is invalid")
continue
print (elx)
答案 0 :(得分:2)
只需用空格分割,使用列表推导来检查字符串是否由数字组成:
nums = sorted([int(i) for i in input().split() if i.isdigit()])
答案 1 :(得分:2)
使用try / except和sorted:
while True:
el = input("Enter your numbers: ")
try:
elx = sorted(map(int, el.split()))
break
except ValueError:
print("Invalid input")
如果用户可以输入负数,则isdigit将失败。
此外,如果用户输入1 2 3 f 5
,我认为应该将其视为一个不被忽视的错误。
答案 2 :(得分:1)
s = input('Gimme numbers! ') # '1 2 3'
s = list(map(int, s.split()))
print(s) # [1, 2, 3]
这将生成一个包含数字(s.split(' ')
)的字符串列表,这些数字又由地图转换为整数。
最后,要对列表进行排序,请使用sort(s)
。
编辑:如official doc中所述,如果某些数字被两个空格分隔,则使用split(sep=' ')
会抛出异常,因为在这种情况下,分割会生成一个空字符串({{ 1}}),而'1 2'.split(' ') == ['1', '', '2']
将无法转换它。
感谢Padraic Cunningham指出这一点!