2016-05-04 25 views
0

Zunächst einmal bin ich neu auf dieser Website und Programmierung, wenn mein Niveau des Schreibens Code schlecht ist oder die Art, wie ich meine frage Frage ist falsch, bitte zeigen Sie mir in die richtige Richtung.So finden Sie bestimmte Elemente in einer Liste und kombinieren sie in einer neuen Liste (Python3)

Ich habe ein Programm in Python3 geschrieben, das es mir ermöglicht, eine Liste aller Primzahlen zu erhalten, die weniger als gleich einer gegebenen Zahl N meiner Wahl sind. Wenn mein Eingang 10 zum Beispiel ist, wird mein Programm folgendes Ergebnis geben:

>>>primes(10) 
[2, 3, 5, 7] 

Jetzt versuche ich, ein Follow-up-Programm zu schreiben, die mir Anzahl von twinprimes für eine bestimmte Anzahl N. So zum Beispiel gibt : Wenn N = 10 ist, weiß ich, dass es zwei Twinprims [3,5] und [5,7] gibt. Ich habe versucht, die folgenden:

def twinprimes(n): 
    x = primes(n) 
    ps = [] 
    for i in range(len(x)): 
     if x[i]+2==x[i]: 
     ps.append((x[i]) 
    return ps 

So ps eine neue Liste zu machen Ich versuche, in dem alle die ersten Werte des Twinprime Paar hinzugefügt werden, so dass ich len(ps) finden den Gesamtwert der twinprimes zu finden.

Jetzt weiß ich, dass mit meinem Code viel falsch ist. Ich weiß einfach nicht, wie ich es zum Laufen bringen kann.

+1

Denken Sie über den folgenden Ausdruck: 'x [i] + 2 == x [i]'. Dies kann nicht für * irgendeine * gegebene Nummer gelten. '5 + 2' wird niemals gleich' 5' sein. Vielleicht wollten Sie das gegen eine andere Zahl in 'x' testen? Twinprimes werden zum Beispiel immer benachbart sein. –

+0

neben der Antwort unten gegeben: die 'ps.append ((x [i])' hat eine zu viele '(' und sollte eingerückt werden unter der 'if'-Anweisung –

Antwort

1

Sie versuchen, wenn eine Primzahl mit sich selbst gleich zu testen, ist plus 2:

if x[i]+2==x[i]: 

Keine Zahl jemals gleich selbst sein kann, sowie eine nicht-Null andere Zahl, so dass Test nie geht zu bestehen.

Sie wollen testen, ob die aktuelle Primzahl 2 weniger als die nächsten Nummer in Ihrer Liste:

if x[i] == x[i + 1] - 2: # two adjacent primes differ by 2 

Das in Probleme laufen wird mit i + 1 kein gültiger Index in x jedoch zu sein, weil Sie schließen sich an (aber nicht inklusive) len(x); len(x) + 1 wird Rais ein IndexError. Aber Sie brauchen nicht die letzte Primzahl ohnehin zu testen, so dass die folgenden funktionieren würde:

for i in range(len(x) - 1): 
    if x[i] == x[i + 1] - 2: 
     ps.append((x[i], x[i + 1])) 

Diese beiden Primzahlen hinzufügt.

Es gibt mehr pythonische Möglichkeiten, diese Liste zu erstellen; Paarung der Primzahlen mit zip() beispielsweise auf, und eine Liste Verständnis mit:

def twinprimes(n): 
    x = primes(n) 
    return [(a, b) for a, b in zip(x, x[1:]) if a == b - 2] 
+0

Danke! Ich mag die Einfachheit der letzten Option. Der erste Vorschlag brachte jedoch einen Fehler (erwartete einen eingerückten Block) für mich. – Whizkid95

+0

@ Whizkid95: dann stellen Sie sicher, dass Sie Ihren Code richtig eingerückt haben. Stellen Sie sicher, dass Sie Tabulatoren und Leerzeichen nicht versehentlich mischen (Python erweitert Tabs auf jede 8. Position, die Verwendung von Leerzeichen würde Verwirrung und seltsame Fehler vermeiden. –

Verwandte Themen