首页 > 解决方案 > 在 python 中的单行中键入各种类型的输入和类型转换错误

问题描述

我在 HackerRank 上找到了这个。

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

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

由于我必须在同一行上提供多种类型的输入,当我尝试附加列表时,它给了我一个“无效文字”错误。所以我用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(),则会再次出现“以 10 为基数的无效文字”错误。类型转换出了什么问题?以及如何在一行中提供不同类型的输入(即使用空格)。我也尝试使用嵌套列表来解决这个问题。但是如果我必须附加嵌套列表,那么语法必须是什么?

标签: pythonappendtypecasting-operator

解决方案


一个电话input()会给你一个像nameA 50 50 50. 对此进行拆分会给你一个类似的列表['nameA', '50', '50','50']

您要做的是从一行中提取名称和数字。像这样的东西:

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

推荐阅读