试图从用户那里获得多个输入。智力+力量

Trying to get multiple input from user. Int + Str

我是 python 中的编码新手,正在努力完成这项工作。

如果用户输入的是“姓名年龄”,它就可以正常工作。但我希望它在用户输入(姓名+年龄)或(姓名+姓氏+年龄)时起作用。如果我输入 3 个值,我会得到 ValueError: too many values to unpack (expected 2)

如果将 name, lastname, age, =map(str, sys.stdin.readline().split()) 添加到代码中。当用户输入 name+lastname+age

时出现值不足错误

希望有人能帮助我:)

name, age, =map(str, sys.stdin.readline().split())
age = int(age)

if "Paul" in (name):

    result1 = (age*2)
    print("Answer is", + result1)

您不能通过这种方式将某些内容拆分为动态数量的变量。

相反,您需要捕获输入,然后计算出传入了多少字段。类似于:

user = map(str, sys.stdin.readline().split())
lastname = ''
name = user[0]
age = user[1]
if len(user) == 3:
    lastname = user[1]
    age = user[2]

与其尝试将 split() 的结果解压缩到两个变量中,不如使用 join() 结合列表切片将除最后一个值之外的所有内容合并为一个(name ):

user = input().split()
age = int(user[-1])
name = ' '.join(user[:-1])

if "Paul" in name:
    print(f"Answer is {age*2}")

无论名称中有多少个“单词”,这都有效:

Paul McCartney 42
Answer is 84
Pauline 42
Answer is 84
Paul W. S. Anderson 42
Answer is 84

这里有一个可能性——读取没有映射的输入行,解析它,然后根据结果列表中的元素数量区分输入,

import sys

entry = sys.stdin.readline()
entry = entry.strip().split()

if len(entry) == 2:
    # Name + age
    name = entry[0]
    age = int(entry[1])
    print(name, age)
elif len(entry) == 3:
    # Name + last name + age 
    name = entry[0]
    last_name = entry[1]
    age = int(entry[2])
    print(name, last_name, age)
else:
    raise ValueError('Wrong input arguments')

if "Paul" in (name):
    result1 = (age*2)
    print("Answer is", + result1)

如果输入不是预期的,此代码将引发异常。您可以继续提示用户,直到他们输入正确的值。如果您决定保留异常方法,请考虑使用信息量更大的异常消息。