Primzahlen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mto99
User
Beiträge: 15
Registriert: Mittwoch 30. Oktober 2019, 17:35

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
Benutzeravatar
__blackjack__
User
Beiträge: 14050
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
mto99
User
Beiträge: 15
Registriert: Mittwoch 30. Oktober 2019, 17:35

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)
mto99
User
Beiträge: 15
Registriert: Mittwoch 30. Oktober 2019, 17:35

aber wir dürfen keine Biblitothek importieren
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und was macht eine Primzahl aus? Und wie verhaelt sich das zu der von dir gezeigten Funktion?
Benutzeravatar
__blackjack__
User
Beiträge: 14050
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten