将多个字符串作为变量进入由空间分开的输入



我正在使用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个意大利面OK 0,则无效,因为预期3个值,而不是4。

我该如何考虑两个整数值之间的任何字符都是变量名称?

对不起,英语XD

您不一定知道 id2 third 参数;这是 last 参数。您可以使用扩展的Itable解开包装将所有中间参数收集到单个元组中。一旦有了中间争论的元组,就可以将它们重新加入。

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的相同结果。如果很重要,则可以使用两次分裂:

# 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将结果限制为单个拆分。结果,在第一个和最后一个空间上用于分裂;中间空间被保留。

您可以使用切片。

args = input('Enter ID, name, and second ID').split()
id1 = int(args[0])
id2 = int(args[-1])
name = " ".join(args[1:-1])

您可以使用python的切片符号

input_values = input("Press {}, o {} e o {}".format("id1", "name", "id2"))
listSplit = input_values.split()
id1 = listSplit[0]
name = join(listSplit[1:-1])
id2 = listSplit[-1]
def join(arr):
newStr = ""
for i in arr:
    newStr += i + " "
return newStr[:-1]

其中id1是第一个单词,名称是第一个索引和最后一个字符串的最后一个索引和 third> third 参数,实际上是最后一个单词。

希望会有所帮助。

这将有效:

split = input_values.split()
id1 = int(split[0])
id2 = int(split[-1])
name = " ".join(split[1:-1])

最新更新