2016-06-10 4 views
-4

Ich habe vielleicht viele Dinge falsch gemacht, da ich nur ein Anfänger bin. Aber würde mir bitte jemand helfen? Ziel ist es, das größte Palindrom aus dem Produkt zweier dreistelliger Zahlen zu drucken. Vielen Dank.Projekt Euler: Größtes Palindrom (Python). Was habe ich falsch gemacht?

palindromes = [] 
for i in range(100, 1000): 
    for x in range(100, 1000): 
     a = x*i 
     str(a) 
     b = a[::-1] 
     if a == b : 
      palindromes.append(a) 

print (palindromes[len(palindromes) - 1]) 
+1

Doppelpunkt nach 'Bereich (100, 1000)' und x ist nicht definiert fehlt. Für welches Projekt euler genau (Nummer) ist das? – Keatinge

+0

@Keatinge Ich habe diese Dinge im eigentlichen Code. Ich habe sie hier vergessen. Dies ist das vierte Problem im Archiv. – dsi411

+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren Code veröffentlicht und das Problem genau beschrieben haben. Dieser Code wird weiterhin nicht ausgeführt. Sie haben die Fehlermeldung nicht angezeigt. – Prune

Antwort

0

Basispunkte:

  • Wenn Sie die Zahl in einen String konvertieren, müssen Sie das Ergebnis speichern.
  • Sortieren Sie die Liste, wenn Sie fertig sind.
  • Verwenden rechten Ende Indizierung das letzte Element
  • Wenn Sie ein Palindrom finden, halten Sie die integer Form, so dass die Art funktioniert zu bekommen. Andernfalls erhält man '99999' als das größte Palindrom.

Code:

palindromes = [] 
for i in range(100, 1000): 
    for x in range(100, 1000): 
     a = str(x*i) 
     b = a[::-1] 
     if a == b : 
      palindromes.append(int(a)) 

print (sorted(palindromes)[-1]) 
+0

Vielen Dank! Das hat funktioniert! – dsi411

+0

Großartig! Denken Sie daran, nützliche Antworten zu wählen und Ihren Favoriten zu akzeptieren. So kann SO die Frage ordnungsgemäß archivieren. – Prune

2

Sie verwenden x in Ihrem Code, bevor es zu definieren, so dass Sie einen Fehler mit diesem Code erhalten. Sie haben auch andere Fehler: Sie sollten in der Lage sein, sie leicht mit den Tracebacks zu finden. Ein logischer Fehler ist, dass Sie die Zeichenkette a finden, aber nicht irgendwo speichern, also ist es verloren. Sie beginnen auch mit a als eine ganze Zahl und versuchen dann, es zu einer Zeichenkette zu machen: halten Sie Ihre Typen getrennt, es sei denn, Sie haben einen guten Grund, den Typ zu ändern. Sie sollten bessere Variablennamen verwenden: a,b,i,x sind lausige Namen. Schreib auf, was sie bedeuten! Das Eingeben von ein paar weiteren Zeichen ist billig und wird Fehler verhindern.

Jeder Palindrom muss das Produkt von zwei dreistelligen Zahlen, so dass Sie zwei verschachtelte Schleifen über range(100, 1000) benötigen. Verwenden Sie x als Ihre andere Loop-Variable und Sie müssen Ihren Code nicht viel ändern.

+0

Oh ja, ich hatte eine andere for-Schleife für x, aber ich habe vergessen, das zu setzen. Ich werde das hinzufügen. Vielen Dank. Ich habe a in eine Saite geändert, damit ich es umkehren kann. – dsi411

0

Vor dem Drucken hinzufügen Zeile:

palindrome.sort() 
Verwandte Themen