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
Primzahlen
- __blackjack__
- User
- Beiträge: 14051
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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)
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
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()
danach muss die prim Funktion nehmen und eine neu Funtkion schreiben, die auf zwillingsprimzahl prüft( erklärt in der ersten Frage)
- __blackjack__
- User
- Beiträge: 14051
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@mto99: Also bei dem gezeigten Quelltext bekomme ich einen `TypeError`:
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:
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:
Zwischenstand:
Was gibt Deine Funktion eigentlich bei 4 zurück? Falls Du das am Code nicht ablesen kannst, probier es einfach mal aus.
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 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
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
Code: Alles auswählen
def prim(number):
while True:
if number % 2 != 0:
return number != 1
elif number == 2:
return True
“Vir, intelligence has nothing to do with politics!” — Londo Mollari