2016-08-01 4 views
1

Ich bin ziemlich neu in der Programmierung/Python, so dass mein Code möglicherweise nicht die effizienteste sein. Dies bezieht sich speziell auf Problem 8 von Project Euler. Es lautet:ValueError beim Schleifen über sehr große kontinuierliche Zeichenfolge (Project Euler prob 8)

Finden Sie die dreizehn benachbarten Ziffern in der 1000-stelligen Nummer, die das größte Produkt haben. Was ist der Wert dieses Produktes?

Ich habe die Antwort mit dem Code unten gefunden, aber der Code gibt mir Probleme abhängig davon, wie ich die 1000-stellige Nummer definieren, die als a bezeichnet wird. Wenn a in einer einzigen Zeile geschrieben wird, funktioniert es gut, aber wenn ich es mit dreifachen Anführungszeichen auf mehreren Zeilen implementieren (getrennt durch eine Eingabe) gibt es ValueError s in der zweiten for Schleife beim Erreichen des Endes einer 'Zeile' von a .

Kann mir jemand erklären, warum das passiert und wie man damit umgehen kann? Danke im Voraus!

genauer zu sein, der Fehler Ich erhalte ist:

ValueError: invalid literal for int() with base 10: '\n' 

Siehe Code unten:

a = """7316717653... etc""" 

    product = 1 
    save = 0 
    list1 = [] 
    list2 = [] 

    for ab in range(0, len(a)-13): 
     start = ab 
     stop = ab+13 
     check = a[start:stop] 
     list1.append(check) 

    for a in list1: 
     for b in a: 
      product = product*int(b) 
     list2.append(product) 
     if product > save: 
      save = product 
      print('This is currently the largest product: ', product) 
      product = 1 
     else: 
      product = 1 

    print(max(list2)) 
+0

Es scheint, als wäre der Fehler in dem fehlenden Code, den Sie nicht hinzufügen möchten. Bitte geben Sie den ganzen Code ein, damit wir verstehen, was Sie versuchen zu tun. – pistache

+0

Die Art, wie Sie 'list1' generieren, bewirkt, dass einige Zeilentrennzeichen (' \ n') in 'a' enden, also in' b'. Wahrscheinlich möchten Sie Zeichen, die Zeilentrennzeichen sind, überspringen oder sicherstellen, dass sie nicht in "list1" landen. – pistache

+0

Hallo @pistache. Ich habe jetzt auch den ersten 'for'-loop-code eingefügt. Ich habe die Verkettungsmethode in Ihrer Antwort unten versucht, die wie ein Zauber wirkt. Ich bin immer noch unsicher, wo die Linientrennzeichen hinzugefügt werden. Ist das die Schleife oder die Methode, 'a' auf mehreren Codezeilen zu deklarieren, die' "" "1000-stellige Zahl" "" 'verwendet. Das war mir nicht bewusst. Jetzt, da ich es realisiere, ist es bedauerlich, dass ich meine 1000-stellige Zahl 'a' und meine' for' Loop-Variable 'a' auch anrufe ... – gaatjeniksaan

Antwort

0

Sie sind mit Zeilenumbrüchen (Zeilenseparatoren, geschrieben als ‚\ n enden ') in list1, was normal ist, wenn Sie Ihre Variable als mehrzeilige Textzeichenfolge schreiben.

Sie können versuchen, ohne Newline a als Text definiert, Standard-Python-Verkettung mit:

a = ( "123456789" "123456789" "123456789" )

Dies wird nicht ein Tupel erstellen (sie brauchen ein Komma), a wird die Zeichenfolge tatsächlich sein 123456789123456789123456789 , ohne irgendwelche trennenden Zeilenumbrüche, und int(b) hört auf sich zu beschweren.