【问题标题】:Trying to get multiple input from user. Int + Str试图从用户那里获得多个输入。整数 + 强度
【发布时间】:2021-09-17 03:54:03
【问题描述】:

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

如果来自用户的输入是“姓名年龄”,它就可以正常工作。但是如果用户输入(姓名+年龄)或(姓名+姓+年龄),我希望它能够工作。如果我输入 3 个值,我会得到 ValueError: too many values to unpack (expected 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)

【问题讨论】:

  • >>> name, lastname, age = map(str, sys.stdin.readline().split()) Name Lastname age >>> name 'Name' >>> lastname 'Lastname' >>> age 'age' 如果您的姓名/姓氏中没有空格,它会起作用

标签: python string input integer


【解决方案1】:

这是一种可能性——在没有映射的情况下读取输入行,对其进行解析,然后根据结果列表中的元素数量来区分输入,

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)

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

【讨论】:

    【解决方案2】:

    您可以使用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
    

    【讨论】:

    • 这正是我想要的!对我来说简单易懂:D 谢谢!
    • 还要注意,如果你只关心名字,你甚至不需要join;只需设置name, age = user[0], int(user[-1]) 以获取第一个和最后一个列表元素并忽略中间可能存在的任何内容。简单!
    【解决方案3】:

    您不能以这种方式将某事物拆分为动态数量的变量。

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

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

    【讨论】:

    • age = user[1] 应该在另一个 ifelse 分支中。 map(str, ...) 不是必需的,因为 sys.stdin.readline().split() 已经是一个字符串列表。因为map不是一个列表,[0]等不能和它一起使用,所以它甚至是有害的。
    猜你喜欢
    • 2013-01-18
    • 2019-06-19
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2020-02-22
    • 2021-05-04
    • 2019-04-11
    • 2021-05-09
    相关资源
    最近更新 更多