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

时间:2018-04-23 15:02:02

标签: python python-3.x list dictionary

我正在使用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

4 个答案:

答案 0 :(得分:2)

您不一定知道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"的相同结果。如果重要,可以使用拆分两次:

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

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

答案 1 :(得分:2)

您可以使用切片。

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

答案 2 :(得分: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是第一个单词,name是第一个索引和最后一个连接成一个字符串之间的所有内容,第三个​​参数实际上是最后一个单词。

希望有所帮助。

答案 3 :(得分:1)

这将有效:

var start = Date.now(),
    diff,
    minutes,
    seconds;