Python: как суммировать все значения с другим именем из dict в списке - PullRequest
0 голосов
/ 20 июня 2020

Я хочу распечатать оценки учеников, я попытался использовать count, но это не сработало

student_data = [{
"name":"Dos",
"Math":20,
"History":50,
"Science":60,},
{
"name":"moris",
"Math":20,
"History":50,
"Science":80,
}]

print(student_data)
name_search = str(input("Enter the student name: "))
for student in student_data:
    if student["name"] == name_search:
        print(student)
        dak = sum(student)
        print("Total:",dak)

Мой результат:

Enter the student name: Dos
{'name': 'Dos', 'Math': 20, 'History': 50, 'Science': 60}
Traceback (most recent call last):
  File "e:/New folder/tanya.py", line 18, in <module>
    dak = sum(student)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Желаемый результат:

Enter the student name: Dos
{'name': 'Dos', 'Math': 20, 'History': 50, 'Science': 60}
Total:130

должен ли я создавать новый оператор if или использовать неправильный оператор?

Ответы [ 4 ]

0 голосов
/ 20 июня 2020

Ваша большая ошибка состоит в том, что вы не понимаете, как работает функция суммы в python. Функция sum () принимает только список чисел и складывает их вместе, вы можете прочитать больше здесь: https://thepythonguru.com/python-builtin-functions/sum/

Также в python, и я предполагаю, что большинство языков программирования вы нельзя складывать строки с числами, числа - это элементы, которыми можно математически управлять, а не строки, если только вы не используете переменные для хранения числовых c значений.

Кроме того, чтобы добавить элементы, которые являются числами из словаря, вы должны выбрать их сначала вы выбираете элемент из словаря, используя его ключевое имя, и не забывайте, что для их суммирования они должны содержать числа c значения ej.

, чтобы узнать больше о словарях в python: https://www.w3schools.com/python/python_dictionaries.asp

Здесь наш словарь

data = {'a': 1, 'b': 2, 'c': 3}

Здесь создаем список чисел из значений словаря данных

list_of_numbers = [data ['a'], data ['b'], data ['c']]

Теперь мы можем сложить их с помощью функции sum ()

sum (list_of_numbers)

result of sum fu nction

6

Итак, в вашем коде это должно выглядеть так:

student_data = [{
"name":"Dos",
"Math":20,
"History":50,
"Science":60,},
{
"name":"moris",
"Math":20,
"History":50,
"Science":80,
}]


print(student_data)
name_search = str(input("Enter the student name: "))
for student in student_data:
    if student["name"] == name_search:
        print(student)
        scores = [student['Math'], student['History'], student['Science']]
        total_score = sum(scores)
        print("Total:", total_score)
0 голосов
/ 20 июня 2020

Вы должны сначала отфильтровать тип значения integer, а затем просуммировать все это с помощью функции sum(). Вы можете сделать это так

name_search = str(input("Enter the student name: "))
for student in student_data:
    if student["name"] == name_search:
        print(type(student['Math']))
        dak = sum([value for value in student.values() if type(value) == int])
        print("Total:",dak)

Результат будет следующим:

Enter the student name: Dos
{'name': 'Dos', 'Math': 20, 'History': 50, 'Science': 60}
Total: 130
0 голосов
/ 20 июня 2020

Sum не подойдет для вашего случая, так как он предназначен для сложения чисел. Это не означает, что сумма не может использоваться со словарем, но просто, когда она используется, все итерации должны быть числом (int или float). Кроме того, если вы просто используете sum(dict), вы суммируете все ключи словаря. Например,

scores = { 10: 'math', 20: 'science', 30: "English"}
print(sum(scores))

Результатом будет 60

Что касается count, он используется в списке или строке и возвращает только количество раз, когда указанный элемент c появится в списке. Например,

lst = ['math', 'science', 'english', 'math']
print(lst.count('math'))

Распечатает 2

Что касается вашего кода, вы можете перебрать все значения вашего словаря и проверить, являются ли они int или float. Затем суммируйте, если это так.

student_data = [{
"name":"Dos",
"Math":20,
"History":50,
"Science":60,},
{
"name":"moris",
"Math":20,
"History":50,
"Science":80,
}]

print(student_data)
name_search = str(input("Enter the student name: "))
for student in student_data:
    if student["name"] == name_search:
        print(student)
        dak = 0
        for value in student.values():
            if type(value) == int or type(value) == float:
                dak += value
        print("Total:",dak)
0 голосов
/ 20 июня 2020

Я создаю функцию sum_scores(), чтобы делать то, что вы хотите.

student_data = [{
"name":"Dos",
"Math":20,
"History":50,
"Science":60,},
{
"name":"moris",
"Math":20,
"History":50,
"Science":80,
}]

print(student_data)

name_search = str(input("Enter the student name: "))

def sum_scores(student):
    total_score = 0
    for key, val in student.items():
        if type(val) == int:
            total_score += val
    return total_score

for student in student_data:
    if student["name"] == name_search:
        print(student)
        dak = sum_scores(student)
        print("Total:",dak)

Вот результат:

Enter the student name: Dos
{'name': 'Dos', 'Math': 20, 'History': 50, 'Science': 60}
Total: 130

sum_scores() сначала проверяет, соответствует ли значение student относится к типу int. Если это так, он добавляет значение к totoal_score. В конце выполнения он возвращает сумму всех значений типа int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...