Skip to main content
 首页 » 编程设计

python之将多个字符串作为变量输入到以空格分隔的输入中

2025年05月04日20softidea

我正在使用 Python 3。

我需要从输入中获取三个值(以空格分隔)。这些值是一个整数、一个字符串和一个整数。
考虑到字符串可以有多个单词。 如果我设置两个词,它不起作用,因为每个词就像一个值。

我的代码是:

list_a = {} 
list_b = [] 
for i in range(4): 
    input_values = input("Press {}, {} and {}".format("id1", "name", "id2")) 
    id1, name, id2 = input_values.split() 
 
    list_a["id1"] = id1 
    list_a["name"] = name 
    list_a["id2"] = id2 
 
    list_b.append(dict(list_a)) 
 
print(list_b) 

如果我的输入类似于 1 name_ok 0,它就有效。但是,如果我的输入类似于 1 pasta ok 0,则不起作用,因为需要 3 个值,而不是 4。

如何判断两个整数值之间的任意一个字符都是变量名?

抱歉英文xD

请您参考如下方法:

您不一定知道id2 是第三个​​ 参数;这是最后一个 参数。您可以使用 extended iterable unpacking 将所有中间参数收集到一个元组中.一旦你有了中间参数的元组,你就可以将它们重新连接在一起。

id1, *names, id2 = input_valores.split() 
 
list_a["id1"] = int(id1) 
list_a["name"] = " ".join(names) 
list_a["id2"] = int(id2) 

这有点有损,因为它将名称中的任意空白缩减为单个空格; 1、"foo bar" 和 2 来自 "1 foo bar 2" 的结果相同和 "1 foo bar 2",例如。如果这很重要,您可以使用 split 两次:

# This is the technique alluded to in  Ignacio Vazquez-Abrams' comment. 
id1, rest = input_valores.split(None, 1) 
name, id2 = rest.rsplit(None, 1) 

rsplit 类似于 split,但从另一端开始。在这两种情况下,None 参数指定默认拆分行为(任意空格),参数 1 将结果限制为单个拆分。结果,第一个和最后一个空间用于拆分;保留中间空间。