Ich versuche, mit Python nach einem Palindrom zu suchen. Der Code, den ich habe, ist sehr "for"-Schleife intensiv.
Und es scheint mir, dass der größte Fehler, den die Leute machen, wenn sie von C zu Python wechseln, darin besteht, dass sie versuchen, C-Logik mit Python zu implementieren, was dazu führt, dass die Dinge langsam laufen, und es ist einfach nicht das Beste aus der Sprache.
Ich sehe auf dieser Website. Suche nach "C-style for", dass Python keine for-Schleifen im C-Stil hat. Das mag veraltet sein, aber ich interpretiere es so, dass Python seine eigenen Methoden dafür hat.
Ich habe versucht, mich umzusehen, aber ich kann keine aktuellen (Python 3) Ratschläge dafür finden. Wie kann ich eine Palindrom-Aufgabe in Python lösen, ohne die for-Schleife zu verwenden?
Ich habe dies in C im Unterricht gemacht, aber ich möchte es in Python machen, auf einer persönlichen Basis. Das Problem ist von der Euler-Projekt, große Website By the way,.
def isPalindrome(n):
lst = [int(n) for n in str(n)]
l=len(lst)
if l==0 || l==1:
return True
elif len(lst)%2==0:
for k in range (l)
#####
else:
while (k<=((l-1)/2)):
if (list[]):
#####
for i in range (999, 100, -1):
for j in range (999,100, -1):
if isPalindrome(i*j):
print(i*j)
break
Ich vermisse hier eine Menge Code. Die fünf Hashes sind nur eine Erinnerung für mich.
Konkrete Fragen:
In C würde ich eine for-Schleife machen, die den Index 0 mit dem Index max vergleicht, und dann den Index 0+1 mit max-1, bis irgendetwas passiert. Wie macht man das am besten in Python?
Meine for-Schleife (in im Bereich (999, 100, -1), ist dies ein schlechter Weg, um es in Python zu tun?
Hat jemand einen guten Rat, oder gute Websites, oder Ressourcen für Menschen in meiner Position? Ich bin kein Programmierer, ich strebe nicht danach, einer zu werden, ich möchte nur genug lernen, damit ich, wenn ich meine Bachelorarbeit (Elektrotechnik) schreibe, nicht gleichzeitig eine Programmiersprache lernen muss, während ich versuche, gute Ergebnisse in dem Projekt zu erzielen.
Jeder spezifische Code, der eine gute Lösung für dieses Problem bietet, wäre ebenfalls willkommen, ich muss gute Algorithmen lernen. Ich stelle mir 3 Situationen vor. Wenn der Wert Null oder einstellig ist, wenn er eine ungerade Länge hat, und wenn er eine gerade Länge hat. Ich hatte vor, for-Schleifen zu schreiben...
PS: Die Aufgabe lautet: Finde das höchstwertige Produkt zweier dreistelliger Ganzzahlen, das auch ein Palindrom ist.
Eine pythonische Methode, um festzustellen, ob ein bestimmter Wert ein Palindrom ist:
str(n) == str(n)[::-1]
Erläuterung:
n
gleich der invertierten String-Darstellung von n
ist.[::-1]
-Slice sorgt für die Invertierung der Zeichenkette==
Eine Alternative zu der eher unintuitiven [::-1]
-Syntax ist diese:
>>> test = "abcba"
>>> test == ''.join(reversed(test))
True
Die Funktion reversed
gibt eine umgekehrte Folge der Zeichen in test
zurück.
Die Funktion ''.join()
fügt diese Zeichen wieder zusammen, ohne etwas dazwischen.
Das Tolle an Python sind die Dinge, die man damit machen kann. Sie müssen keine Indizes für Strings verwenden.
Folgendes wird funktionieren (unter Verwendung von Slices)
def palindrome(n):
return n == n[::-1]
Es kehrt einfach n um und prüft, ob sie gleich sind. n[::-1]
kehrt n um (-1 bedeutet dekrementieren)
"2) Meine for-Schleife (in im Bereich (999, 100, -1), ist dies ein schlechter Weg, um es in Python zu tun?"
In Bezug auf die oben genannten, Sie wollen xrange
anstelle von range (weil range wird eine tatsächliche Liste zu erstellen, während xrange ist ein schneller Generator)
Meine Meinung zu Frage 3
Ich habe C vor Python gelernt, und ich habe nur die Dokumentation gelesen und auf der Konsole damit herumgespielt. (und auch mit dem Projekt Euler Probleme :)