Python :: Aufgabe #2

10 Lösungen Lösungen öffentlich

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

Lösungen:

1 Kommentar
vote_ok
von ushy (470 Punkte) - 22.03.2015 um 19:46 Uhr
Quellcode ausblenden Python-Code
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)
vote_ok
von Urkel_ (50 Punkte) - 12.06.2015 um 10:33 Uhr
Quellcode ausblenden Python-Code
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
vote_ok
von lyso (40 Punkte) - 08.10.2015 um 16:29 Uhr
Quellcode ausblenden Python-Code
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)
vote_ok
von xy-no (250 Punkte) - 03.11.2015 um 11:33 Uhr
Quellcode ausblenden Python-Code
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
vote_ok
von AnnaIhrs (460 Punkte) - 03.06.2016 um 13:31 Uhr
Quellcode ausblenden Python-Code
#!/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)

vote_ok
von manoloForead (390 Punkte) - 22.03.2017 um 22:19 Uhr
Quellcode ausblenden Python-Code
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

vote_ok
von PythonIT (240 Punkte) - 19.08.2017 um 16:55 Uhr
Quellcode ausblenden Python-Code
# 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
vote_ok
von Supelir (100 Punkte) - 05.02.2019 um 19:28 Uhr
Quellcode ausblenden Python-Code
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))
vote_ok
von torstenkn (150 Punkte) - 01.05.2020 um 10:31 Uhr
Ergebnis der Folge 15 ist: 1321132132211331121321232221121113122113121122132112311321322112111312211312113221133211322112211213322112

Quellcode ausblenden 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))
vote_ok
von PythonLui (400 Punkte) - 06.04.2021 um 17:06 Uhr
Quellcode ausblenden Python-Code
# 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))
2096016

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.