Печатание различных типов входных данных в одной строке в python и ошибка при типизации - PullRequest
0 голосов
/ 06 июня 2018

Я нашел это на 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 'снова ошибка.Что не так с типизацией?И как я могу дать различные типы входов в одной строке (то есть, используя пробелы).Я пытался сделать этот вопрос, используя вложенные списки тоже.Но если мне нужно добавить вложенный список, какой должен быть синтаксис?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

При вызове input() вы получите одну строку, например nameA 50 50 50.Деление на это даст вам список вроде ['nameA', '50', '50','50'].

Что вы хотите сделать, это извлечь имя и числа из одной строки.Как то так:

a, b, c, d = input().split( " " )
0 голосов
/ 06 июня 2018

b = input().split(" ") b переменная имеет тип list, split() метод составляет список значений, вы можете сделать что-то вроде этого

#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
...