2017-06-13 4 views
0

Beispiel wenn die Zeichenkette "xxxyyz" hätte, wäre die Ausgabe 3x2y1z Ich bin mir nicht sicher, wie ich diese Frage machen soll und ich habe mehrere Methoden ausprobiert, aber kann nicht annähernd in die Nähe kommen Ausgang IBerechnen der Lauflängencodierung einer Zeichenkette

s = input("Please type a sentence or word: ") 
i = 0 
count = 1 
while len(s) <=i: 
    if s[i] == s[i+1]: 
     count = count+1 
     s1 = count + s[i] 

erste Woche Lernen Programmierung wollen und ich weiß, was im falsch ist da oben hoffentlich jemand klar helfen könnte und möglicherweise erklären, was soll ich tun es Ihnen danken!

Antwort

0

Dies ist eine Version, die Sie ausprobieren könnten. es nutzt zip über zwei benachbarte Zeichen der Eingabezeichenfolge in der gleichen Zeit iterieren und enumerate Lage sein, zu drucken, was am Ende der Schleife bleibt:

strg = "xxxyyz" 

mult = 1 
lgth = len(strg) 
for i, (prev, nxt) in enumerate(zip(strg, strg[1:])): 
    if prev != nxt: 
     print('{}{}'.format(mult, prev), end='') 
     mult = 1 
    else: 
     mult += 1 
    if i == lgth-2: # print what is left at the end of the string 
     print('{}{}'.format(mult, nxt)) 

die Schleife überfährt

i (prev, nxt) 
------------- 
0 ('x', 'x') 
1 ('x', 'x') 
2 ('x', 'y') 
3 ('y', 'y') 
... 

tatsächlich gibt es keine Notwendigkeit für die enumerate; nxt ist zugänglich nach der Schleife:

mult = 1 
for prev, nxt in zip(strg, strg[1:]): 
    if prev != nxt: 
     print('{}{}'.format(mult, prev), end='') 
     mult = 1 
    else: 
     mult += 1 
print('{}{}'.format(mult, nxt)) 
+0

vielen Dank, jetzt muss ich nur verstehen, was aufzuzählen und zip bedeuten, aber es hilft alles klar, bis die andere Situationen! – BrianStolars

+0

Sorry, nur ein weiteres Problem, wenn ich in xxxyyzz die Ausgabe gibt mir 3x2y1y statt 3x2y1z, habe ich versucht, ändern die "wenn ich == lgth-2" und herumspielen mit anderen Abschnitten, aber nicht sicher, warum es y statt z gibt – BrianStolars

+0

? ... ich bekomme "3x2y2z" für den Eingang "xxxyyzz". –

0

Verwenden collections.Counter es

import collections 
collections.Counter(your_string) 
Verwandte Themen