Kaprekars konstant python programmering

Permalänk

Kaprekars konstant python programmering

Hej, jag håller på med en uppgift om Kaprekar konstant där 'Uppgiften består i att skriva ett program som givet ett ingångstal beräknar hur många iterationer det krävs innan ovanstående process kommer till 6174.
Indata består av ett fyrsiffrigt tal. Utdata ska vara antalet iterationer som krävs för att genom ovanstående process komma fram till talet 6174 från det angivna talet.'

Jag har alltså skrivet ett program i python som ska lösa detta men jag får inget svar från programmet. Jag vet att det programmet jag har skrivet kanske inte är det mest lämpade för att räkna ut antalet iterationer som krävs för att komma fram till kaprekars konstant men varför funkar det inte? (jag slutar på 7 iterationer då det är det maximala för att komma fram till konstanten givet vilket fyrsiffrigt ingångstal som helst).

# Indata fyrsiffrigttal = int(input("Ge fyrsiffrigttal: ")) n = fyrsiffrigttal # Utdata sorted(str(n).zfill(4)) sorted(str(n).zfill(4), reverse = True) large1 = int( "".join(sorted(str(n).zfill(4), reverse = True))) small1 = int( "".join(sorted(str(n).zfill(4)))) diff1 = int(large1)-int(small1) sorted(str(diff1).zfill(4)) sorted(str(diff1).zfill(4), reverse = True) large2 = int( "".join(sorted(str(diff1).zfill(4), reverse = True))) small2 = int( "".join(sorted(str(diff1).zfill(4)))) diff2 = int(large2)-int(small2) sorted(str(diff2).zfill(4)) sorted(str(diff2).zfill(4), reverse = True) small3 = int( "".join(sorted(str(diff2).zfill(4)))) large3 = int( "".join(sorted(str(diff2).zfill(4), reverse = True))) diff3 = int(large3)-int(small3) sorted(str(diff3).zfill(4)) sorted(str(diff3).zfill(4), reverse = True) large4 = int( "".join(sorted(str(diff3).zfill(4), reverse = True))) small4 = int( "".join(sorted(str(diff3).zfill(4)))) diff4 = int(large4)-int(small4) sorted(str(diff4).zfill(4)) sorted(str(diff4).zfill(4), reverse = True) small5 = int( "".join(sorted(str(diff4).zfill(4)))) large5 = int( "".join(sorted(str(diff4).zfill(4), reverse = True))) diff5 = int(large5)-int(small5) sorted(str(diff5).zfill(4)) sorted(str(diff5).zfill(4), reverse = True) large6= int( "".join(sorted(str(diff5).zfill(4), reverse = True))) small6 = int( "".join(sorted(str(diff5).zfill(4)))) diff6 = int(large6)-int(small6) sorted(str(diff6).zfill(4)) sorted(str(diff6).zfill(4), reverse = True) small7 = int( "".join(sorted(str(diff6).zfill(4)))) large7 = int( "".join(sorted(str(diff6).zfill(4), reverse = True))) diff7 = int(large7)-int(small7) KAPREKAR = 6174 if diff1 == KAPREKAR: print(n, "ger iteration") if diff2 == KAPREKAR: print(n, "ger två iterationer") if diff3 == KAPREKAR: print(n, "ger tre iterationer") if diff4 == KAPREKAR: print(n, "ger fyra iterationer") if diff5 == KAPREKAR: print(n, "ger fem iterationer") if diff6 == KAPREKAR: print(n, "ger sex iterationer") if diff7 == KAPREKAR: print(n, "ger sju iterationer")

Tack för hjälp

la till code-taggar
Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Medlem

Tjenare,

Jag håller också på med den uppgiften från KTH's Programmeringsteknik, webbkurs 6 hp .
Jag har skickat in den för rättning men vet dock inte om den är godkänd eller ej.

Till att börja med gjorde jag en while-slinga istället för att skriva ut hur programmet ska räkna hela tiden. Alltså dina large 1,2,3,4 osv.

Sen utskrift problemet vet jag inte riktigt hur du löser, men har du provat att använda if på första påståendet och sen elif på de resterande utom sista där du kan ha else:

# Ett program som visar hur if-elif-else fungerar KIMS_FRYSPUNKT = 5 KIMS_GLASSPUNKT = 20 temperatur = int(input("Ge utetemperatur: ")) if temperatur < KIMS_FRYSPUNKT: print("Burr, idag är det kallt ute!") elif temperatur > KIMS_GLASSPUNKT: print("Idag är det sommar ute!") else: print("Idag är det lagom varmt ute!")

edit: verkar som det blir konstigt när man postar och alla indrag försvinner.

la till code-taggar
Permalänk
Medlem
Skrivet av Admo:

Tjenare,

Jag håller också på med den uppgiften från KTH's Programmeringsteknik, webbkurs 6 hp .
Jag har skickat in den för rättning men vet dock inte om den är godkänd eller ej.

Till att börja med gjorde jag en while-slinga istället för att skriva ut hur programmet ska räkna hela tiden. Alltså dina large 1,2,3,4 osv.

Sen utskrift problemet vet jag inte riktigt hur du löser, men har du provat att använda if på första påståendet och sen elif på de resterande utom sista där du kan ha else:

Dold text

# Ett program som visar hur if-elif-else fungerar KIMS_FRYSPUNKT = 5 KIMS_GLASSPUNKT = 20 temperatur = int(input("Ge utetemperatur: ")) if temperatur < KIMS_FRYSPUNKT: print("Burr, idag är det kallt ute!") elif temperatur > KIMS_GLASSPUNKT: print("Idag är det sommar ute!") else: print("Idag är det lagom varmt ute!")

edit: verkar som det blir konstigt när man postar och alla indrag försvinner.

Använd kodtaggar [CODE] som jag gjort i citatet från dig ovan

Permalänk
Medlem

Sätt koden inom [.CODE][/CODE] (utan punkten) så blir den rätt formaterad.

Programmet verkar i princip funka för mig (bara att det fortsätter när konstanten är hittad) och du fick ett ganska bra tips om hur du kan lösa det av Admo.

Permalänk
Hedersmedlem
Skrivet av Samev:

Sätt koden inom [.CODE][/CODE] (utan punkten) så blir den rätt formaterad.

Programmet verkar i princip funka för mig (bara att det fortsätter när konstanten är hittad) och du fick ett ganska bra tips om hur du kan lösa det av Admo.

använd [noparse][/noparse] så behöver du inte använda punkten för att visa taggen. Gissa hur jag visar noparse-taggen?

Permalänk
Medlem
Skrivet av tvåpunktnoll:

Hej, jag håller på med en uppgift om Kaprekar konstant där 'Uppgiften består i att skriva ett program som givet ett ingångstal beräknar hur många iterationer det krävs innan ovanstående process kommer till 6174.
Indata består av ett fyrsiffrigt tal. Utdata ska vara antalet iterationer som krävs för att genom ovanstående process komma fram till talet 6174 från det angivna talet.'

Jag har alltså skrivet ett program i python som ska lösa detta men jag får inget svar från programmet. Jag vet att det programmet jag har skrivet kanske inte är det mest lämpade för att räkna ut antalet iterationer som krävs för att komma fram till kaprekars konstant men varför funkar det inte? (jag slutar på 7 iterationer då det är det maximala för att komma fram till konstanten givet vilket fyrsiffrigt ingångstal som helst).

# Indata fyrsiffrigttal = int(input("Ge fyrsiffrigttal: ")) n = fyrsiffrigttal # Utdata sorted(str(n).zfill(4)) sorted(str(n).zfill(4), reverse = True) large1 = int( "".join(sorted(str(n).zfill(4), reverse = True))) small1 = int( "".join(sorted(str(n).zfill(4)))) diff1 = int(large1)-int(small1) sorted(str(diff1).zfill(4)) sorted(str(diff1).zfill(4), reverse = True) large2 = int( "".join(sorted(str(diff1).zfill(4), reverse = True))) small2 = int( "".join(sorted(str(diff1).zfill(4)))) diff2 = int(large2)-int(small2) sorted(str(diff2).zfill(4)) sorted(str(diff2).zfill(4), reverse = True) small3 = int( "".join(sorted(str(diff2).zfill(4)))) large3 = int( "".join(sorted(str(diff2).zfill(4), reverse = True))) diff3 = int(large3)-int(small3) sorted(str(diff3).zfill(4)) sorted(str(diff3).zfill(4), reverse = True) large4 = int( "".join(sorted(str(diff3).zfill(4), reverse = True))) small4 = int( "".join(sorted(str(diff3).zfill(4)))) diff4 = int(large4)-int(small4) sorted(str(diff4).zfill(4)) sorted(str(diff4).zfill(4), reverse = True) small5 = int( "".join(sorted(str(diff4).zfill(4)))) large5 = int( "".join(sorted(str(diff4).zfill(4), reverse = True))) diff5 = int(large5)-int(small5) sorted(str(diff5).zfill(4)) sorted(str(diff5).zfill(4), reverse = True) large6= int( "".join(sorted(str(diff5).zfill(4), reverse = True))) small6 = int( "".join(sorted(str(diff5).zfill(4)))) diff6 = int(large6)-int(small6) sorted(str(diff6).zfill(4)) sorted(str(diff6).zfill(4), reverse = True) small7 = int( "".join(sorted(str(diff6).zfill(4)))) large7 = int( "".join(sorted(str(diff6).zfill(4), reverse = True))) diff7 = int(large7)-int(small7) KAPREKAR = 6174 if diff1 == KAPREKAR: print(n, "ger iteration") if diff2 == KAPREKAR: print(n, "ger två iterationer") if diff3 == KAPREKAR: print(n, "ger tre iterationer") if diff4 == KAPREKAR: print(n, "ger fyra iterationer") if diff5 == KAPREKAR: print(n, "ger fem iterationer") if diff6 == KAPREKAR: print(n, "ger sex iterationer") if diff7 == KAPREKAR: print(n, "ger sju iterationer")

Tack för hjälp

Innan alla ifs på slutet lägg in:

print(KAPREKAR, diff1, diff2, diff3, diff4, diff5, diff6, diff7);

Det är basic debuging. Du kollar vad dina variabler har för värde. Kanske har ingen samma värde som KAPREKAR? Då får du gå tillbaka i din kod och fundera över vad du gör fel.

Har någon av diff variablerna samma värde som KAPREKAR? Då vet du att felet ligger någon stans i:

if diff1 == KAPREKAR: print(n, "ger iteration") if diff2 == KAPREKAR: print(n, "ger två iterationer") if diff3 == KAPREKAR: print(n, "ger tre iterationer") if diff4 == KAPREKAR: print(n, "ger fyra iterationer") if diff5 == KAPREKAR: print(n, "ger fem iterationer") if diff6 == KAPREKAR: print(n, "ger sex iterationer") if diff7 == KAPREKAR: print(n, "ger sju iterationer")

Kan du se något fel?

Om jag skriver så här istället:

if False: print("1. skrivs jag ut?") if True: print("2. skrivs jag ut?") if True: print("3. skrivs jag ut?")

Vilka kommer skrivas ut?
2 och 3?

Säker?

Tänk efter.

Visa signatur

Programmerare -> PHP | HTML | CSS | JS | Java.

Permalänk

Fin feedback, tack för inputs

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Skrivet av Admo:

Tjenare,

Jag håller också på med den uppgiften från KTH's Programmeringsteknik, webbkurs 6 hp .
Jag har skickat in den för rättning men vet dock inte om den är godkänd eller ej.

Till att börja med gjorde jag en while-slinga istället för att skriva ut hur programmet ska räkna hela tiden. Alltså dina large 1,2,3,4 osv.

Sen utskrift problemet vet jag inte riktigt hur du löser, men har du provat att använda if på första påståendet och sen elif på de resterande utom sista där du kan ha else:

# Ett program som visar hur if-elif-else fungerar KIMS_FRYSPUNKT = 5 KIMS_GLASSPUNKT = 20 temperatur = int(input("Ge utetemperatur: ")) if temperatur < KIMS_FRYSPUNKT: print("Burr, idag är det kallt ute!") elif temperatur > KIMS_GLASSPUNKT: print("Idag är det sommar ute!") else: print("Idag är det lagom varmt ute!")

edit: verkar som det blir konstigt när man postar och alla indrag försvinner.

Jag tänkte också på att while-slinga är det 'riktiga' i det här fallet men hur ska man ställa upp den?
Antagligen så ska man använda
while fyrsiffrigttal != 6174 satsen och inte den vanliga while satsen med += n?

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Skrivet av Admo:

Tjenare,

Jag håller också på med den uppgiften från KTH's Programmeringsteknik, webbkurs 6 hp .
Jag har skickat in den för rättning men vet dock inte om den är godkänd eller ej.

Till att börja med gjorde jag en while-slinga istället för att skriva ut hur programmet ska räkna hela tiden. Alltså dina large 1,2,3,4 osv.

Sen utskrift problemet vet jag inte riktigt hur du löser, men har du provat att använda if på första påståendet och sen elif på de resterande utom sista där du kan ha else:

# Ett program som visar hur if-elif-else fungerar KIMS_FRYSPUNKT = 5 KIMS_GLASSPUNKT = 20 temperatur = int(input("Ge utetemperatur: ")) if temperatur < KIMS_FRYSPUNKT: print("Burr, idag är det kallt ute!") elif temperatur > KIMS_GLASSPUNKT: print("Idag är det sommar ute!") else: print("Idag är det lagom varmt ute!")

edit: verkar som det blir konstigt när man postar och alla indrag försvinner.

jag provade elif men elif innebär jag något som inte motsvarar if, right? och jag vill ju ha den första differensen som blir 6174 att skrivas ut alltså måste jag sätta allt = KAPREKAR, därav funkar inte elif då elif i detta fall är lika med if. Fast whileslinga är förmodligen det enda rätta sättet att göra det på även om det går med andra sätt, vet ej ^^

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Medlem

Då jag själv har pluggat programmering vet jag att om det är en lärare som rättar uppgiften kan det vara så att du får underkänt om du använder dig av upprepningar (som i dit första exempel) då det är fel sätt att tänka på programmerings problem. Vist finns det fall där man måste använda den typen av upprepning men det ska undvikas till varje pris, så fort du kommer till att du har skrivit nästan samma sak 3 gånger gör en loop av något slag.

Permalänk
Proffsmoddare

Nu är jag verkligen en glad amatör på låg nivå men är det nått sånt här du är ute efter?

#!/usr/bin/python tal = input("Tal: ") kap = 6174 iter=0 while True: iter = iter + 1 newtal = tal * iter print (str(tal) + " * " + str(iter) + " = " + str(newtal)) if newtal >= kap: print (str(iter) + " iterationer") break

Edit: Fixed

Visa signatur

"Computer games don't affect kids, I mean if PacMan affected us as kids, we'd all be running around in darkened rooms, munching pills and listening to repetitive music." - Kristian Wilson, Nintendo 1989

Permalänk
Skrivet av SleepstreameR:

Nu är jag verkligen en glad amatör på låg nivå men är det nått sånt här du är ute efter?

#!/usr/bin/python tal = input("Tal: ") kap = 6174 iter=1 while True: iter = iter + 1 newtal = tal * iter print (str(tal) + " * " + str(iter) + " = " + str(newtal)) if newtal >= kap: print (str(iter) + " iterationer") break

Det är i den stilen jag tänker mig med loopar, ska prova när jag kommer hem sen. Big thanks

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Medlem
Skrivet av tvåpunktnoll:

Jag tänkte också på att while-slinga är det 'riktiga' i det här fallet men hur ska man ställa upp den?
Antagligen så ska man använda
while fyrsiffrigttal != 6174 satsen och inte den vanliga while satsen med += n?

Jag gjorde så att jag beräknade första diff på ett liknande sätt som du gjorde, fast ditt sätt med .zfill fungerade bättre.
Då slapp man även problemet som uppstod när både small och large blev 999 och diff blev 0 och programmet slutade. För då sorterade programmet 0999 till bara 999 istället för 0999 och 9990.

# Indata fyrsiffrigttal = int(input("Ge fyrsiffrigttal: ")) n = fyrsiffrigttal # Utdata sorted(str(n).zfill(4)) sorted(str(n).zfill(4), reverse = True) large1 = int( "".join(sorted(str(n).zfill(4), reverse = True))) small1 = int( "".join(sorted(str(n).zfill(4)))) diff1 = int(large1)-int(small1)

Dit gjorde jag lika som dig. Sedan satte jag in en slinga lika som du nämnde
while fyrsiffrigttal != 6174
Men jag böt ut fyrsifrigttal mot diff.
Alltså, while diff ! = 6174
Sedan lät jag slingan beräkna ny large, small och diff för varje varv i tills diff blev 6174.

Du kan även lägga till så att programmet räknar varje gång den kör ett varv i while-slingan.

Permalänk
Medlem
Skrivet av tvåpunktnoll:

jag provade elif men elif innebär jag något som inte motsvarar if, right? och jag vill ju ha den första differensen som blir 6174 att skrivas ut alltså måste jag sätta allt = KAPREKAR, därav funkar inte elif då elif i detta fall är lika med if. Fast whileslinga är förmodligen det enda rätta sättet att göra det på även om det går med andra sätt, vet ej ^^

elif betyder "else if", dvs om den första if är falsk så går den vidare till nästa, dvs elif.

if a == 1: *kod* elif a==2: *kod* elif a==3: *kod* else: *kod*

Skillnaden att använda elif istället för massor av if är att bara en av alla elif kan hända men om du har flera if så kan flera hända, ex:

a==1 if a == 1: *kod1* elif a==1: *kod2* elif a==1: *kod3* else: *kod4*

Här kommer bara kod1 köras.

a==1 if a == 1: *kod1* if a==1: *kod2* if a==1: *kod3* else: *kod4*

här kommer kod1, kod2 och kod3 köras.

Permalänk
Skrivet av Admo:

Jag gjorde så att jag beräknade första diff på ett liknande sätt som du gjorde, fast ditt sätt med .zfill fungerade bättre.
Då slapp man även problemet som uppstod när både small och large blev 999 och diff blev 0 och programmet slutade. För då sorterade programmet 0999 till bara 999 istället för 0999 och 9990.

# Indata fyrsiffrigttal = int(input("Ge fyrsiffrigttal: ")) n = fyrsiffrigttal # Utdata sorted(str(n).zfill(4)) sorted(str(n).zfill(4), reverse = True) large1 = int( "".join(sorted(str(n).zfill(4), reverse = True))) small1 = int( "".join(sorted(str(n).zfill(4)))) diff1 = int(large1)-int(small1)

Dit gjorde jag lika som dig. Sedan satte jag in en slinga lika som du nämnde
while fyrsiffrigttal != 6174
Men jag böt ut fyrsifrigttal mot diff.
Alltså, while diff ! = 6174
Sedan lät jag slingan beräkna ny large, small och diff för varje varv i tills diff blev 6174.

Du kan även lägga till så att programmet räknar varje gång den kör ett varv i while-slingan.

Det är en dum fråga men hur gör man så diff-processen loopar?

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk

Skapa loop i python

Jag undrar som sagt hur man skapar en loop i pythonspråk så att en ekvation kommer fram till ett specifikt tal tillslut, t.ex med koden;

n = 3333
sorted(str(n).zfill(4))
sorted(str(n).zfill(4), reverse = True)
large = int( "".join(sorted(str(n).zfill(4), reverse = True)))
small = int( "".join(sorted(str(n).zfill(4))))
diff = int(large)-int(small)

så vill jag alltså att diff här ska loopa sig tills den kommer till 6174 (detta är alltså ett program för att beräkna iterationer för att komma fram till kaprekars konstant). En belöning väntar den som ger ett bra och förståligt svar. Koden skall vara väldigt nybörjarvänlig, danke!

(om du har lust kan du också skriva ytterligare kod för att få fram antalet iterationer som krävs för att komma till konstanten).

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Medlem

Finns en tråd om samma sak redan.

Permalänk
Proffsmoddare

#!/usr/bin/python n = input("n: ") iter = 0 while True: large = int( "".join(sorted(str(n).zfill(4), reverse = True))) small = int( "".join(sorted(str(n).zfill(4)))) n = int(large)-int(small) iter = iter + 1 print (str(n) + " iter " + str(iter)) if n == 0: print ("n is zero") break if n == 6174: print (str(n) + " in " + str(iter) + " iterations" ) break

Visa signatur

"Computer games don't affect kids, I mean if PacMan affected us as kids, we'd all be running around in darkened rooms, munching pills and listening to repetitive music." - Kristian Wilson, Nintendo 1989

Permalänk
Skrivet av SleepstreameR:

#!/usr/bin/python n = input("n: ") iter = 0 while True: large = int( "".join(sorted(str(n).zfill(4), reverse = True))) small = int( "".join(sorted(str(n).zfill(4)))) n = int(large)-int(small) iter = iter + 1 print (str(n) + " iter " + str(iter)) if n == 0: print ("n is zero") break if n == 6174: print (str(n) + " in " + str(iter) + " iterations" ) break

print(str(n) + " iteration " + str(iteration)) funkar inte

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Proffsmoddare

3177 iter 1 6354 iter 2 3087 iter 3 8352 iter 4 6174 iter 5 6174 in 5 iterations

Detta får jag som output t.ex, kolla så att du kopierat det rätt.

Jag kör det med en extern fil via terminalen. Om du kör med en äldre version av python kan du testa med bara print istället för print() (dvs ta bort parenteserna runt).

Visa signatur

"Computer games don't affect kids, I mean if PacMan affected us as kids, we'd all be running around in darkened rooms, munching pills and listening to repetitive music." - Kristian Wilson, Nintendo 1989

Permalänk
Medlem
Skrivet av tvåpunktnoll:

Det är en dum fråga men hur gör man så diff-processen loopar?

Du kan göra så här

#Själva loopen while diff != 6174 : # Det du använde för att beräkna diff large1 = int( "".join(sorted(str(n).zfill(4), reverse = True))) small1 = int( "".join(sorted(str(n).zfill(4)))) diff = int(large1)-int(small1)

Du kan namge variablerna som du vill, jag använde några som du använt förut.

Permalänk
Hedersmedlem

*Trådar sammanfogade*

Korspostning ger ett orättvist och rörigt forum, därför tillåter vi inte flera trådar om samma eller snarlik frågeställning. Det går bra att uppdatera/lägga till information i både trådstarten och rubriken.

Citat:

§ 3.3 Det är inte tillåtet att skapa flera trådar om samma ämne (så kallad korspostning). Detta gäller oavsett om trådarna placeras i samma forumdel eller i olika forumdelar. Om en moderator har låst en tråd är det inte tillåtet att skapa en ny tråd om samma ämne. Regeln finns för att alla ska få samma chans att få sina trådar uppmärksammade och för att forumet ska bli så överskådligt som möjligt.

Visa signatur

Danskjävel så krattar som en skrivare...

Permalänk
Skrivet av SleepstreameR:

#!/usr/bin/python n = input("n: ") iter = 0 while True: large = int( "".join(sorted(str(n).zfill(4), reverse = True))) small = int( "".join(sorted(str(n).zfill(4)))) n = int(large)-int(small) iter = iter + 1 print (str(n) + " iter " + str(iter)) if n == 0: print ("n is zero") break if n == 6174: print (str(n) + " in " + str(iter) + " iterations" ) break

Varför sätter du diff = n (n =n)?

Är #!/usr/bin/python förkoden för om det är fallet varför har du n = input("n: "), det är ju med i förkoden? Om det inte är fallet behöver väl du en while n ! slinga??

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Skrivet av SleepstreameR:

3177 iter 1 6354 iter 2 3087 iter 3 8352 iter 4 6174 iter 5 6174 in 5 iterations

Detta får jag som output t.ex, kolla så att du kopierat det rätt.

Jag kör det med en extern fil via terminalen. Om du kör med en äldre version av python kan du testa med bara print istället för print() (dvs ta bort parenteserna runt).

Koden fungerar ju perfekt fastän jag inte förstår vad som skapar loopen men sedan fungerade det inte förrän jag upptäckte att man inte kan skriva tal som 2222 (vilket är ganska självklart :). Är det while true som skapar loopen? bra sätt annars och det blir fint med printsen, thumbs up!

edit: Om man skriver 0 med koden så får man i och för sig (med modifierade prints)
0 skapar antalet iterationer 1
0 ger noll iterationer
1 iteration innebär väl att en utberäkning utförs innan talet blir 6174? t.ex. med talen 7146 eller 6741 osv. så 0 bör ge noll iterationer..
kan man sätta; if n < 6174 > n
print (str(n), "skapar antalet iterationer", str(iter))? så man slipper båda två

kommentera inte mina inlägg, är för trött för att skriva hah..

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Proffsmoddare

#!/usr/bin/python är bara för att mitt operativsystem ska veta vilket språk som används, det har inget med loopen eller programmet att göra.

n = input("n: ") är för att jag kör skriptet med terminalen, du kan likagärna skriva n = 20 eller vad du nu vill ha för siffra.

För att loopen ska kunna iterera måste n hela tiden bli det nya värdet från beräkningen, annars kommer du få en infinite loop då n kommer vara konstant. Därav bytte jag diff till n.

while True betyder bara att koden itererar hela tiden, jag stannar den senare med break när n nått 6174 eller 0. Du kan även skriva while n != 6174 med samma resultat och ta bort break i loopen.

Just nu säger iter bara hur många gånger det har skapats en ny n i loopen, om du flyttar iterationsräknaren till botten av loopen kommer den aldrig bli 1 vid ett tal som 6174 eller 7461 då loopen kommer ha stannat innan dess.

Det bästa är nog bara om du läser pythondokumentationen om hur looparna funkar.
https://wiki.python.org/moin/WhileLoop

n = input("n: ") iter = 0 while True: large = int( "".join(sorted(str(n).zfill(4), reverse = True))) small = int( "".join(sorted(str(n).zfill(4)))) n = int(large)-int(small) if n == 0: print ("n is zero") break if n == 6174: print (str(n) + " in " + str(iter) + " iterations") break iter = iter + 1

Visa signatur

"Computer games don't affect kids, I mean if PacMan affected us as kids, we'd all be running around in darkened rooms, munching pills and listening to repetitive music." - Kristian Wilson, Nintendo 1989

Permalänk

Tack för trevlig feedback adamo o sleepy och andra, detta kanske kan vara en tråd där man kan få lite hjälp med fortsättningen om det infinner sig .. hursomhelst, ha en fortsatt go sommar!

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Skrivet av SleepstreameR:

#!/usr/bin/python är bara för att mitt operativsystem ska veta vilket språk som används, det har inget med loopen eller programmet att göra.

n = input("n: ") är för att jag kör skriptet med terminalen, du kan likagärna skriva n = 20 eller vad du nu vill ha för siffra.

För att loopen ska kunna iterera måste n hela tiden bli det nya värdet från beräkningen, annars kommer du få en infinite loop då n kommer vara konstant. Därav bytte jag diff till n.

while True betyder bara att koden itererar hela tiden, jag stannar den senare med break när n nått 6174 eller 0. Du kan även skriva while n != 6174 med samma resultat och ta bort break i loopen.

Just nu säger iter bara hur många gånger det har skapats en ny n i loopen, om du flyttar iterationsräknaren till botten av loopen kommer den aldrig bli 1 vid ett tal som 6174 eller 7461 då loopen kommer ha stannat innan dess.

Det bästa är nog bara om du läser pythondokumentationen om hur looparna funkar.
https://wiki.python.org/moin/WhileLoop

n = input("n: ") iter = 0 while True: large = int( "".join(sorted(str(n).zfill(4), reverse = True))) small = int( "".join(sorted(str(n).zfill(4)))) n = int(large)-int(small) if n == 0: print ("n is zero") break if n == 6174: print (str(n) + " in " + str(iter) + " iterations") break iter = iter + 1

Jag förstår.. break är ju viktigt att ha med i koden.

Visa signatur

Corsair 600 T Silver / 4770k / Titan (SLI)

Permalänk
Medlem

/.../

Skrivet av SleepstreameR:

n = input("n: ") iter = 0 while True: large = int( "".join(sorted(str(n).zfill(4), reverse = True))) small = int( "".join(sorted(str(n).zfill(4)))) n = int(large)-int(small) if n == 0: print ("n is zero") break if n == 6174: print (str(n) + " in " + str(iter) + " iterations") break iter = iter + 1

Rätta mig om jag har fel, men bör inte värdet av "iter" i början vara 1?