在 python 中的一行中键入各种类型的输入并出现类型转换错误

Typing various types of inputs in a single line in python and typecasting error

我在 HackerRank 上找到了这个。

我不得不输入号码。学生(比如 n)。然后接下来的n行每行都有学生姓名,以及三个科目的分数,供用户输入。下一行是任何学生的名字。基于该输入,我必须计算该学生的平均值 marks.I 必须提供这样的输入(根据测试用例):

4
nameA 50 50 50
nameB 69 78 45
nameC 56 47 45 
nameD 57 49 30
nameC

因为我必须在同一行中提供多种类型的输入,而我试图附加列表时,它给了我一个 'invalid literal' 错误。所以我用了input().split(" ")。这是我的代码:

if __name__ == '__main__':

n = int(input())
list1 = []
for i in range(0,n):
    a = input().split(" ")
    b = input().split(" ")
    c = input().split(" ")
    d = input().split(" ")

    b = float(b)
    c = float(c)
    d = float(d)

    list1.append(a)
    list1.append(b)
    list1.append(c)
    list1.append(d)


name = input().split()
avg = 0.00
inn = list1.index(name)

avg = (list1[inn+1]+list1[inn+2]+list2[inn+3])/3

print(avg)

但这是显示的错误:

Traceback (most recent call last):
File "solution.py", line 11, in <module>
b = float(b)
TypeError: float() argument must be a string or a number, not 'list'

另一方面,如果我简单地使用 input() 进行输入,则会再次出现 'invalid literal with base 10' 错误。 类型转换出了什么问题?以及如何在一行中提供不同类型的输入(即使用空格)。我也尝试使用嵌套列表来做这个问题。但是如果我必须附加嵌套列表,语法必须是什么?

b = input().split(" ") b变量是list类型,split()方法make list of values,你可以这样做

#for example variable `a` is [1,2,3,4]
# make new list with `float`
a_float_lst = [float(x) for x in a]

# and now concatenate with our `list_1` list
list_1 += a_float_lst

更新

if __name__ == '__main__':
    lst = []
    for i in range(int(input())):
        student, b, c, d = input().split()
        lst.append([student, float(b), float(c), float(d)])

    name = input()
    inn = None
    for x in lst:
        if name in x:
            inn = x

    avg = (inn[1] + inn[2] + inn[3]) / 3
    print('{:.2f}'.format(avg))

输入

2
nameA 50 50 50
nameB 69 78 45
nameA

输出

50.0

调用 input() 会像 nameA 50 50 50 一样为您提取一行。对此进行拆分会给您一个列表,例如 ['nameA', '50', '50','50'].

您要做的是从一行中提取姓名和号码。像这样:

a, b, c, d = input().split( " " )