我是python中编码的新手,正在努力实现这一点。
如果来自用户的输入是"0";姓名年龄;它工作得很好。但我希望它能在用户输入(姓名+年龄(或(姓名+姓氏+年龄(时工作。如果我输入3个值,我会得到ValueError:太多的值无法解压缩(预期为2(
如果将name,lastname,age,=map(str,sys.stdin.readline((.split(((添加到代码中。当用户输入姓名+姓氏+年龄时,我得到了一个值不足的错误
希望有人能帮我:(
name, age, =map(str, sys.stdin.readline().split())
age = int(age)
if "Paul" in (name):
result1 = (age*2)
print("Answer is", + result1)
这里有一种可能性-读取没有映射的输入行,解析它,然后根据结果列表中的元素数量区分输入,
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)
如果输入不符合预期,则此代码将引发异常。相反,您可以不断提示用户,直到他们输入正确的值。如果您决定保留异常方法,请考虑使用信息更丰富的异常消息。
您可以使用join()
和列表切片将除最后一个值之外的所有值连接为一(name
(:,而不是试图将split()
的结果解压缩为两个变量
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
您不能以这种方式将某个事物拆分为动态数量的变量。
相反,你需要捕获输入,然后计算出传入了多少字段
user = map(str, sys.stdin.readline().split())
lastname = ''
name = user[0]
age = user[1]
if len(user) == 3:
lastname = user[1]
age = user[2]