Palindrom Programm

Code-Stücke können hier veröffentlicht werden.
Antworten
Milcheiweiß
User
Beiträge: 8
Registriert: Donnerstag 3. Oktober 2019, 12:34

Donnerstag 3. Oktober 2019, 12:52

Hi Ihr,

Ich habe erst kürzlich mit dem Prgrammieren angfangen und habe ein Programm geschrieben das mehr macht als es sollte.
Die Aufgabe ist ein Programm zu schreiben das alle Zahlen zwischen 1 und 1000 ausgibt deren Quadrate Palindrome sind.
Also wie "Otto" von vorne nach hinten gleich sind.
11 wäre so ein Beispiel, da 11 quadriert 121 ist und somit von vorne nach hinten gleich ist.
Mein Programm gibt mir alle Zahlen aus die ich brauche, aber zusätlich kommt nach der 3 noch 2,3,3.
ich habe keine Ahnung warum.
Die Zahlenfolge ist 1,2,3,2,3,3,11,22,26,101,111,121,202,212,264,307,836.

der Code den ich in Python 3.7 geschrieben habe lautet:

for a in range(1, 1001):
while str(a ** 2) == str(a ** 2)[::-1]:
print(a)
a = a + 1

also warum sind da die zusätzlichen 2,3,3 und wie bekommt man die raus?

vielen Dank,

M.
__deets__
User
Beiträge: 8090
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 3. Oktober 2019, 12:55

Bitte in Zukunft Code-Tags zur Auszeichnung deines Codes verwenden. Sonst gehen die in Python relevanten Einrueckungen verloren.

Zum Code: warum eine while-Schleife in einer for-Schleife? Letztere reicht, und die Bedingung der while-Schleife sollte in einem if ausgewertet werden, und dann eben a ausgegeben werden.
nezzcarth
User
Beiträge: 996
Registriert: Samstag 16. April 2011, 12:47

Donnerstag 3. Oktober 2019, 15:34

Weshalb wird 'a' denn inkrementiert? Das hat nur einen temporären Effekt, da der Name beim nächsten Durchlauf der For-Schleife wieder an den Wert gebunden wird, der an der Reihe wäre. Daher erhälst du die seltsame Zahlenfolge, die du gezeigt hast. Wie __deets__ schon schrieb, reicht hier ein einfaches If-Konstrukt. (Unabhängig davon könnte man diese Zeile übrigens als 'i += 1' schreiben.)
Benutzeravatar
kbr
User
Beiträge: 1144
Registriert: Mittwoch 15. Oktober 2008, 09:27

Donnerstag 3. Oktober 2019, 16:21

Aufgrund der inneren while Schleife bekommst Du die zusätzliche Ausgaben dann, wenn die Bedingung des Quadrat-Palindroms sowohl für a, als auch für a+1 erfüllt ist. Bei einstelligen Zahlen kommt das vor. Tipp: eine einfache for Schleife ohne irgendwelche inneren Inkrementierungen führt geradewegs zum Ziel.
Milcheiweiß
User
Beiträge: 8
Registriert: Donnerstag 3. Oktober 2019, 12:34

Montag 7. Oktober 2019, 09:55

Vielen Dank!
Ich habe nicht daran gedacht statt der While Schleife einfach ein if zu verwenden.
Jetzt klappt es.

viele Grüße,

M.
Antworten