Python :: Aufgabe #2
10 Lösungen

Zahlenfolge berechnen und fortsetzen
Anfänger - Python
von pocki
- 24.11.2012 um 19:50 Uhr
Es soll eine Zahlenfolge wiefolgt berechnet werden:
Die nacheinander folgenden gleichen Zahlen werden gezählt und zusammen mit der Zahl ausgegeben.
Aus der neu berechneten Zahlenfolge errechnet sich die nächste.
Beispiel:
1. Folge: 112
2. Folge: 2112 (2 Einser und 1 Zweier)
3. Folge: 122112 (1 Zweier, 2 Einser, und 1 Zweier)
usw.
Es soll nun mit dieser ersten Folge startend die 15. Folge berechnet und ausgegeben werden.
Wenn mehrstellige Zahlen vorkommen sind diese gleich auszugeben. Bsp: 12 Einser = 121
Die nacheinander folgenden gleichen Zahlen werden gezählt und zusammen mit der Zahl ausgegeben.
Aus der neu berechneten Zahlenfolge errechnet sich die nächste.
Beispiel:
1. Folge: 112
2. Folge: 2112 (2 Einser und 1 Zweier)
3. Folge: 122112 (1 Zweier, 2 Einser, und 1 Zweier)
usw.
Es soll nun mit dieser ersten Folge startend die 15. Folge berechnet und ausgegeben werden.
Wenn mehrstellige Zahlen vorkommen sind diese gleich auszugeben. Bsp: 12 Einser = 121
Lösungen:

def bestimme_folge(folge): a=len(folge) zähler=1 folge.append(0) neue_folge=[] for i in range(0,a): if folge[i] == folge[i+1]: zähler=zähler+1 elif folge[i]!=folge[i+1] and bool(folge[i+1])==True: neue_folge.append(zähler) neue_folge.append(int(folge[i])) zähler=1 elif bool(folge[i+1])==False: neue_folge.append(zähler) neue_folge.append(int(folge[i])) return neue_folge folge=[1] fehler=1 while fehler==1: try: anzahl=int(input('Geben sie die Anzahl der Stufen an:')) fehler=0 except: print('Ihre Eingabe war ungültig. Keine ganze Zahl.') for i in range(1,anzahl): print(folge) neue_folge=bestimme_folge(folge) folge=neue_folge print(folge)

Folge = "112" print ("Startfolge - 1 : " + Folge) for a in range(2,16): Zeichendavor = "0" Zaehler = 0 NeueFolge = "" for Zeichen in Folge: if Zeichen == Zeichendavor: Zaehler = Zaehler + 1 else: if Zaehler != 0: NeueFolge = NeueFolge + str(Zaehler) + str(Zeichendavor) Zaehler = 1 Zeichendavor = Zeichen NeueFolge = NeueFolge + str(Zaehler) + str(Zeichen) print( "Neue Folge - " + str(a) + " : " + NeueFolge) Folge = NeueFolge
Die Ausgabe:
Startfolge - 1 : 112
Neue Folge - 2 : 2112
Neue Folge - 3 : 122112
Neue Folge - 4 : 11222112
Neue Folge - 5 : 21322112
Neue Folge - 6 : 121113222112
Neue Folge - 7 : 11123113322112
Neue Folge - 8 : 3112132123222112
Neue Folge - 9 : 132112111312111213322112
Neue Folge - 10 : 11131221123113111231121123222112
Neue Folge - 11 : 3113112221121321133112132112211213322112
Neue Folge - 12 : 1321132132211211131221232112111312212221121123222112
Neue Folge - 13 : 1113122113121113222112311311221112131221123113112211322112211213322112
Neue Folge - 14 : 31131122211311123113322112132113212231121113112221121321132122211322212221121123222112
Neue Folge - 15 : 1321132132211331121321232221121113122113121122132112311321322112111312211312113221133211322112211213322112

def zahlen(x,y): result = [] count = 0 zahl = 0 place = 0 temp = [] temp += str(x) for i in range(y): while place <= int(len(temp)-1): zahl = temp[place] count += 1 place += 1 if place >= int(len(temp)-1) or temp[place] != zahl: result.append(str(count)) result.append(str(zahl)) count = 0 print "".join(result) temp = result result = [] place = 0 zahlen(112,5)

folge = '112' folgenNr = 1 while folgenNr <= 15: #nur die 15. Folge ausgeben if folgenNr == 15: print str(folgenNr) + '. Folge:', folge folgenNr += 1 neueFolge = '' anzahl = 1 for i in range(len(folge)): if i+1 >= len(folge): neueFolge += str(anzahl) neueFolge += str(folge[i]) elif folge[i] == folge[i+1]: anzahl += 1 elif folge[i] != folge[i+1]: neueFolge += str(anzahl) neueFolge += str(folge[i]) anzahl = 1 folge = neueFolge
Ausgabe:
15. Folge: 1321132132211331121321232221121113122113121122132112311321322112111312211312113221133211322112211213322112

#!/usr/bin/python3 # -*- coding: cp1252 -*- # #>>>autor: Sebastian Müller #>>>licence: GPL #>>>contact: mypythonmueller@gmail.com # program to create a serie of numbers at following rule at 15 steps # 1st : 112 >2x1+1x2 >>>2112 # 2nd : 2112 >1x2+2x1+1x2 >>>122112 # 3rd : 122112 >1x1+2x2+2x1+1x2 >>>11222112 # 4th : 11222112 >2x1+3x2+2x1+1x2 >>>21322112 ....etc. # programm zur erstellung einer zahlenfolge nach den folgenden regeln # 1. : 112 >2x1+1x2 >>>2112 # 2. : 2112 >1x2+2x1+1x2 >>>122112 # 3. : 122112 >1x1+2x2+2x1+1x2 >>>11222112 # 4. : 11222112 >2x1+3x2+2x1+1x2 >>>21322112 ....usw. # save the first number as a string in "reihe" # speicher die erste nummer als string in "reihe" reihe = "112" # initiate a loop with 15 rounds # schleife mit 15 runden for z in range(15): # the program # das programm rzahler = 0 azahler = 0 reiheerg = 0 for i in reihe: rzahler +=1 if rzahler == 1: a = i azahler += 1 continue elif i == a and len(reihe) == rzahler: if not reiheerg: reiheerg = str(azahler + 1) + str(a) else: reiheerg = reiheerg + str(azahler +1) + str(a) elif i != a and len(reihe) == rzahler: if not reiheerg: reiheerg = str(azahler) + str(a) + str(1) + str(i) else: reiheerg = reiheerg + str(azahler) + str(a) + str(1) + str(i) elif i != a: if not reiheerg: reiheerg = str(azahler) + str(a) a = i azahler = 1 else: reiheerg = reiheerg + str(azahler) + str(a) a = i azahler = 1 else: azahler += 1 reihe = reiheerg # output of the last 15th number # ausgabe der letzten 15. nummer print(reiheerg)

def create_next_row(value): count = 0 first_item = "0" result = "" for char in value: if char == first_item: count += 1 else: if count != 0: result += str(count) + str(first_item) count = 1 first_item = char result += str(count) + str(char) return result value = "112" print(value) for number in range(1, 15): new_value = create_next_row(value) print(new_value) value = new_value

# zahlenfolge.py def naechsteFolge(folge): vergleich = "0" gleiche = 0 folge2 = "" for c in str(folge): if c == vergleich: gleiche += 1 else: if gleiche != 0: folge2 = folge2 + str(gleiche) + str(vergleich) gleiche = 1 vergleich = c folge2 = folge2 + str(gleiche) + str(vergleich) return folge2 folge1 = str(input("Startfolge: ")) laenge = int(input("Länge der Folge: ")) for i in range(laenge): folge2 = naechsteFolge(folge1) print(str(i+1) + ".Folge: " + folge1) folge1 = folge2
Ich habe mir die anderen Lösungen noch nicht angesehen, aber ich hoffe, dass ich nicht das Gleiche habe

def to_index(prev, cur, till): count=[] for s in prev: if len(count)==0: count.append([s,1]) else: if s==count[-1][0]: count[-1][1]+=1 else: count.append([s,1]) newseq="" for l in count: newseq += (str(l[1])+l[0]) if cur==till-1: return [newseq] else: return [prev]+to_index(newseq, cur+1, till) print(to_index("112", 1, 15))
Ergebnis der Folge 15 ist: 1321132132211331121321232221121113122113121122132112311321322112111312211312113221133211322112211213322112
Python-Code

numSeries = 112 iterations = 14 #Helper function def nextNumber(Number): currentNumber = 0 currentCounter = 0 result = "" for m in range(len(str(Number))): # Erste Runde initialisiert Methode if currentNumber == 0: currentNumber = int(str(Number)[m]) currentCounter = 1 continue #Zahl gleich geblieben: Weiterzählen if str(currentNumber) == str(Number)[m]: currentCounter = currentCounter + 1 continue #Neue Zahl if str(currentNumber) != str(Number)[m]: result = result + str(currentCounter) + str(currentNumber) currentNumber = int(str(Number)[m]) currentCounter = 1 continue result = result + str(currentCounter) + str(currentNumber) return result #Main for i in range(iterations): numSeries = str(nextNumber(numSeries)) #Kann alle Folgen ausgeben #print("Runde " + str(i+2) + " : " + str(numSeries)) if i+2 == 15: print("Ergebnis der Folge 15 ist: " + str(numSeries))

# Es soll eine Zahlenfolge wiefolgt berechnet werden: # Die nacheinander folgenden gleichen Zahlen werden gezählt und zusammen mit der Zahl ausgegeben. # Aus der neu berechneten Zahlenfolge errechnet sich die nächste. # Beispiel: # 1. Folge: 112 # Ausgangsfolge x = "112" wiederholungen = 1 zeichenfolge = list(x) print(f"1. Folge: ", "".join(zeichenfolge)) while wiederholungen < 15: # Alle Werte zurücksetzten auf Anfang folge = [] index = 0 zeichen_platzhalter = zeichenfolge[0] # Folge durchlaufen und neue erstellen for zeichen in zeichenfolge: if zeichen_platzhalter != zeichen: folge.append(str(index)) folge.append(zeichen_platzhalter) index = 0 zeichen_platzhalter = zeichen index += 1 # Letzte Zählung an aktuelle Folge hängen folge.append(str(index)) folge.append(zeichen_platzhalter) zeichenfolge = folge wiederholungen += 1 # Ausgabe aktueller Folge print(f"{wiederholungen}. Folge: ", "".join(folge))