• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python, dziwne zachowanie programu

+1 głos
343 wizyt
pytanie zadane 23 grudnia 2019 w Python przez martin1724 Użytkownik (690 p.)
import math
def czyPierwsza(x):
    for i in range(2,int(math.sqrt(x))+1):
        print(x%i)
        if x % i == 0:
            return False
        return True

def genPierwszych(n):
    for i in range(2,n+1):
        if czyPierwsza(i):
            yield i
        else:
            pass
print(list(genPierwszych(22)))

# rozwiązanie alterntatywne za pomoca iteratora
class itPierwszych:
    def __init__(self,n):
        self.i = 1
        self.n = n
    def __next__(self):
        while 1:
            self.i += 1
            if self.i > self.n:
                raise StopIteration
            if czyPierwsza(self.i):
                return self.i
        
    def __iter__(self):
        return self

print(list(itPierwszych(22)))

Cześć! Mógłby mnie ktoś naprowadzić dlaczego program, wypisuje niektóre liczby które nie należa do pierwszych np.: 9 i 21?

1 odpowiedź

+1 głos
odpowiedź 23 grudnia 2019 przez Michałełe Nałogowiec (25,600 p.)
wybrane 27 grudnia 2019 przez martin1724
 
Najlepsza

Witam

Załóżmy ,że funkcja czy pierwsza otrzymuje jako argument x liczbę 9

def czyPierwsza(x):
    for i in range(2,int(math.sqrt(x))+1): # Pętla wykona się 2 razy
        print(x%i)
        if x % i == 0: # Po raz pierwszy ten if się nie spełni, czyli z automatu  zwracamy True
            return False
        return True

Rozwiązaniem będzie danie return True za pętle sprawdzającą

def czyPierwsza(x):
    for i in range(2,int(math.sqrt(x))+1):
        print(x%i)
        if x % i == 0:
            return False
    return True

 

Podobne pytania

+1 głos
1 odpowiedź 2,133 wizyt
+1 głos
2 odpowiedzi 2,042 wizyt

93,754 zapytań

142,714 odpowiedzi

323,359 komentarzy

63,348 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...