У меня проблемы с получением счетчика на работу. То, что я пытаюсь сделать, это получить подсчет голосов. ключи - имена кандидатов, значения - количество голосов. Соберите эту информацию из пользовательского ввода и распечатайте окончательный подсчет голосов за кандидата.

from collections import Counter

name_vote =[]
count = int(input('How many?'))

while count >=1: 
    a=input('Name')
    b=input('Vote')
    c={ a:b }
    name_vote.append(c)
    count = count - 1

print(name_vote)

c = Counter()
for d in name_vote:
    c.update(d)

print(c)

Пользователь сначала сообщает, сколько голосов получено (это количество)

Поэтому входные данные выглядят так: сколько? = 6

Иоанна 2

Билл 5

Иоанна 4

Скотт 11

Джон 3

Скотт 1

Результат: (распечатка)

Иоанна 9

Билл 5

Скотт 12

Очень новичок в этом и очень ценю помощь. Пробовал искать решение в других постах, вот где я нашел счетчик. Но не работает в моем коде. Выдает ошибку:

Traceback (most recent call last):
  File "c:/Users/Rghol5212/hello/Dico.py", line 30, in <module>
    c.update(d)
  File "C:\Users\Rghol5212\AppData\Local\Programs\Python\Python37- 
 32\lib\collections\__init__.py", line 649, in update
    self[elem] = count + self_get(elem, 0)
TypeError: can only concatenate str (not "int") to str

Заранее спасибо.

0
TinFoil_Helmet 1 Май 2019 в 03:25

3 ответа

Лучший ответ

Попробуйте вместо этого использовать defaultdict. Если имя не существует в словаре, будет использоваться значение по умолчанию, равное нулю. Если имя существует, голоса просто увеличат количество.

from collections import defaultdict

name_vote = defaultdict(int)

count = int(input('How many?'))

while count >=1: 
    a=input('Name')
    b=input('Vote')
    name_vote[a] = name_vote[a] + int(b)
    count = count - 1

for k,v in name_vote.items():
    print("{} {}".format(k,v))
0
razdi 1 Май 2019 в 01:09

Использование счетчика

from collections import Counter

name_vote = Counter()

count = int(input('How many? '))

while count >= 1:
    name = input('Name ')
    vote = int(input('Vote '))
    name_vote += {name: vote}
    count -= 1

for name, cnt in name_vote.items():
    print("Name: {}, Vote: {}".format(name, cnt))
0
balderman 1 Май 2019 в 13:54

Я полагаю, что проблема в строке b=input('Vote'). Когда вы получаете b из ввода, его тип - string, вам нужно изменить его на int, чтобы можно было добавлять числа. Попробуйте, добавив одну строку кода b=int(b).

0
Juliecodestack 3 Май 2019 в 07:55