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.