试图从用户那里获得多个输入。智力+力量
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)
如果输入不是预期的,此代码将引发异常。您可以继续提示用户,直到他们输入正确的值。如果您决定保留异常方法,请考虑使用信息量更大的异常消息。
我是 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)
如果输入不是预期的,此代码将引发异常。您可以继续提示用户,直到他们输入正确的值。如果您决定保留异常方法,请考虑使用信息量更大的异常消息。