2016-08-31 6 views
-3

Ich kann nicht herausfinden, warum das letzte Zeichen in einer Zeichenfolge immer weggelassen wird, wenn ich versuche, die folgenden:Zählen doppelte Zeichen

def duplicate_count(text): 
    num = 0 
    count = {} 
    for char in text: 
     print(count.items()) 
     if char in count.keys(): 
      count[char] += 1 
     else: 
      count [char] = 1 
    for key in count: 
     if count[key] == 1: 
      num = 0 
     else: 
      num = count[key] - 1 
    return (num) 

char_s = 'abcde' 
print (duplicate_count(char_s)) 
+8

Fügen Sie Ihrer Frage die folgenden Informationen hinzu: 1) Was glauben Sie, was Ihre Funktion macht? 2) Was für einen Output bekommst du? 3) Welche Leistung haben Sie erwartet und warum? Veröffentliche dies nicht als Kommentar. Klicke auf den Bearbeiten-Button unter deiner Frage und lege ihn direkt dort hinein. –

+0

Es ist nicht weggelassen. Ihre Funktion druckt 'count.items()' _before_, indem sie das neue Zeichen hinzufügt, so dass das Zeichen scheinbar fehlt, aber das ist es wirklich nicht. –

+2

Es lohnt sich, einige echte Duplikate in Ihre 'char_s'-Variable zu schreiben ... –

Antwort

2

Sie Ausgang nur die Zählungen vor einem bestimmten Zeichen hinzugefügt werden, so werden Sie sehe nie die endgültigen Zählungen. Sie können Ihre Druckanweisung nach Ihrer if verschieben, wenn Sie dies ändern möchten.

Das andere Problem ist, dass Ihr Programm nur die doppelte Anzahl des letzten Eintrags in Ihrem Wörterbuch zurückgibt. Sie müssten je nach Ihren Anforderungen ein neues Wörterbuch erstellen oder den höchsten Wert von num verwenden.

2

Das letzte Zeichen wird nicht weggelassen, es wurde noch nicht zu count hinzugefügt, wenn Sie print(count.items()) aufrufen.

0

Meiner Meinung nach könnte dies mehr Segmentierung verwenden. Meiner Meinung nach sollten Sie sich nicht darauf konzentrieren, doppelte Buchstaben zu zählen; Sie sollten den Umfang Ihrer Funktion einschränken, um zu ermitteln, welche Buchstaben vorkommen und wie oft sie auftreten. Dies kann leicht in einer Wörterbuchvariablen gespeichert werden.

Beispiel:

def string_occurence (string): 
    dict={} 
    for char in string: 
     dict [char]=string.count (char) 
    return dict 

Sie können auch diese optimieren, indem sie eine Reihe von einzigartigen Charakteren zu schaffen, bevor die Zeichenfolge Überprüfung:

def string_occurence (string): 
    char_set=set ([char for char in string]) 
    dict={} 
    for char in char_set: 
     dict [char]=string.count (char) 
    return dict 

Dies hängt davon ab, wie Sie Ihren Steuerfluss arbeiten wollen, aber Ich denke, die zweite Funktion würde am besten für Sie funktionieren.

Verwandte Themen