2015-04-28 9 views
-2

Простая программа, которая подсчитывает голоса четырех кандидатов. Голосовые поступления поступают по одному, где число голосов четыре человека обозначается цифрой, Наконец печать победителя на экране.Голосование не учитывается

есть мой код

candList = [0, 0, 0, 0] 

while True: 
    print '1 for First Candidate' 
    print '2 for Second Candidate' 
    print '3 for Third Candidate' 
    print '4 for Fourth Candidate' 
    print '5 for Exit Poll' 

    cid = input('Enter Candidate Number to Vote: ') 

    if cid == 5: 
     break 

    candList[cid - 1] 

vote = max(candList) 
candidate = candList.index(vote) + 1 
print 'Winner is Candidate', candidate, 'with', vote, 'Votes' 

Но проблема голосования не считается .. я дать 1 кандидат 3 голоса, но, наконец, печать

Result is : Winner is Candidate 1 with 0 Votes 
+0

'Eval (raw_input())'? Ты серьезно? – Shashank

+0

Что вы ожидаете от 'list [id - 1]' делать, точно ?! Возможно, вы имели в виду 'list [id] - = 1'? И ** не называйте свой собственный список 'list' **. – jonrsharpe

+0

использовать 'input' вместо' raw_input' и no 'eval' – Morb

ответ

3

Вы никогда не назначаете значение list[cid - 1]. Вы должны изменить эту строку в следующем:

list[cid - 1] += 1 

Кроме того, я рекомендовал бы вам не использовать list как имя для вашего списка.

4

Есть ряд проблем в коде ,

Прежде всего, id - встроенная функция, не используйте id в качестве имени переменной. То же самое касается list Во-вторых, линия 15 (list[id-1]) явно ничего не делает. В-третьих, вы не должны использовать eval для преобразования строк в целые числа, вместо этого используйте int.

Этот код должен выполнять работу, но у него все еще есть некоторые оговорки: пользователь может ввести 15 или не номер, и программа будет прекращена, также она не справится с ситуацией, когда два кандидата получают одинаковое количество голосов

lst = [0, 0, 0, 0] 

while True: 
    print '1 for First Candidate' 
    print '2 for Second Candidate' 
    print '3 for Third Candidate' 
    print '4 for Fourth Candidate' 
    print '5 for Exit Poll' 

    cid = int(input('Enter Candidate Number to Vote: ')) 

    if cid == 5: 
     break 

    lst[cid - 1] += 1 

vote = max(lst) 
candidate = lst.index(vote) + 1 
print 'Winner is Candidate', candidate, 'with', vote, 'Votes' 
+0

«id» и «list» - это простые имена в Python и не зарезервированы каким-либо образом, вполне законно использовать эти имена по своему усмотрению. Сделать это первым элементом в списке проблем является вводящим в заблуждение. Это всего лишь косметические проблемы. – skyking

+0

@skyking Я не согласен с тобой по этому поводу. Тень «список» и другие встроенные функции являются источником путаницы и серьезной проблемой с моей точки зрения. – Alik

+0

Люди всегда будут не соглашаться на косметологические вопросы, просто не сложно определить, кто прав, а кто не прав. Другие проблемы в коде - это код, который выдает исключение и не выполняет то, что предназначено. – skyking

0

Проверить это Вы не меняете соответствующих лиц рассчитывать изменить код

list = [0, 0, 0, 0] 

while True: 
    print '1 for First Candidate' 
    print '2 for Second Candidate' 
    print '3 for Third Candidate' 
    print '4 for Fourth Candidate' 
    print '5 for Exit Poll' 

    id = int(raw_input('Enter Candidate Number to Vote: ')) 

    if id == 5: 
     break 
#Change Here add the count 
    list[id - 1] = list[id-1]+1 

vote = max(list) 
candidate = list.index(vote) + 1 
print 'Winner is Candidate', candidate, 'with', vote, 'Votes' 
Смежные вопросы