Seite 1 von 1
Primzahlen
Verfasst: Donnerstag 21. November 2019, 19:38
von mto99
Hallo
ich muss eine Python Funktion schreiben, die die eigegeben Zahl auf eine Primzahl prüft.
und danach muss ich die Funktion nehmen und damit eine neue Funktion schreiben; und zwar: wenn man eine Primzahl mit 2 addiert und das Ergebnis eine Primzahl ist, ist es eine Zwillingsprimzahl.
Als Ausgabe sollen True oder False stehen.
vielen dank schon für eure Hilfe
Re: Primzahlen
Verfasst: Donnerstag 21. November 2019, 19:48
von __blackjack__
@mto99: Und wo hast Du jetzt genau ein Problem?
Code: Alles auswählen
#!/usr/bin/env python3
from sympy.ntheory.primetest import isprime
def is_twinprime(number):
return isprime(number) and isprime(number + 2)
Re: Primzahlen
Verfasst: Freitag 22. November 2019, 16:44
von mto99
Code: Alles auswählen
def prim(inpt_box):
while True:
if str(inpt_box/2).endswith("5"):
if inpt_box == 1:
return False
else:
return True
elif inpt_box == 2:
return True
prim()
das ist bisjetzt mein Code. Aber es ist nicht richtig. Z B: kommt bei 9 True raus.
danach muss die prim Funktion nehmen und eine neu Funtkion schreiben, die auf zwillingsprimzahl prüft( erklärt in der ersten Frage)
Re: Primzahlen
Verfasst: Freitag 22. November 2019, 16:44
von mto99
aber wir dürfen keine Biblitothek importieren
Re: Primzahlen
Verfasst: Freitag 22. November 2019, 16:47
von __deets__
Und was macht eine Primzahl aus? Und wie verhaelt sich das zu der von dir gezeigten Funktion?
Re: Primzahlen
Verfasst: Freitag 22. November 2019, 17:33
von __blackjack__
@mto99: Also bei dem gezeigten Quelltext bekomme ich einen `TypeError`:
Code: Alles auswählen
Traceback (most recent call last):
File "forum11.py", line 10, in <module>
prim()
TypeError: prim() missing 1 required positional argument: 'inpt_box'
Und bei „inept“ hast Du das „e“ vergessen. Wobei sich auch die Frage stellt warum das Argument `inept_box`, also „unpassende Kiste“ heisst. Das sollte doch wohl eine Zahl sein‽
Und ja, bei ``print(prim(9))`` kommt `True` heraus. Warum hast Du etwas anderes erwartet? Nur weil die Funktion `prim()` heisst, gibt die ja nicht auf magische Weise nur bei Primzahlen `True` zurück. Die macht das was Du sagst, und das ist bei 9 als Argument recht eindeutig `True` zurückgeben.
``str(number / 2).endswith("5")`` ist eine sehr umständliche Art zu prüfen ob eine Zahl ungerade ist. Normalerweise prüft man ob der Rest bei der ganzzahligen Division durch 2 nicht 0 ist. Um den Rest zu ermitteln gibt es den Modulo-Operator:
Code: Alles auswählen
In [7]: 9 % 2
Out[7]: 1
In [8]: 8 % 2
Out[8]: 0
In [9]: 7 % 2
Out[9]: 1
Also ``number % 2 != 0`` wäre dann der Test auf ungerade.
Das innere ``if``/``else`` gibt `False` zurück wenn die Bedingung `True` ergibt und umgekehrt. Dafür braucht man kein ``if``/``else`` sondern man gibt einfach die Negation von der Bedingung zurück:
Code: Alles auswählen
if number == 1:
return False
else:
return True
# ->
return number != 1
Zwischenstand:
Code: Alles auswählen
def prim(number):
while True:
if number % 2 != 0:
return number != 1
elif number == 2:
return True
Was gibt Deine Funktion eigentlich bei 4 zurück? Falls Du das am Code nicht ablesen kannst, probier es einfach mal aus.