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

Python - liczby pierwsze

Object Storage Arubacloud
0 głosów
4,098 wizyt
pytanie zadane 4 grudnia 2015 w Python przez evergreen Użytkownik (680 p.)

Cześć, chcę napisać klasę w której iterując obiekt, bedą zwracane liczby pierwsze, a metoda "ile" będzie zwracać ile takich liczb jest. Mam taki oto kod:

class obiekt:
	def __init__(self):
		self.tab=[]
	def primes(self):
		for i in range(2,100):
			for j in self.tab:
				if i%j==0:
					break
				else:
					yield i
					self.tab.append(i)
	def show(self):
		print(self.tab)
	def ile(self):
		x=len(self.tab)

p=obiekt()
p.primes()
p.show()

jednak wyświetla mi pustą listę, dlaczego?

 

1 odpowiedź

0 głosów
odpowiedź 4 grudnia 2015 przez Michał628496 Pasjonat (17,340 p.)

Problem jest w linicjce 6 .Na początku lista jest pusta więc ta pętla się w ogóle nie wykona .

zrób tak:

class obiekt:
    def __init__(self):
        self.tab=[]
    def primes(self):
        for i in range(2,100):
            if len(self.tab)==0:
              self.tab.append(i)
            for j in self.tab:
                if i%j==0:
                    break
                else:
                    yield i
                    self.tab.append(i)

    def show(self):
        print(self.tab)
    def ile(self):
        x=len(self.tab)
 
p=obiekt()
p.primes()
p.show()

 

komentarz 4 grudnia 2015 przez evergreen Użytkownik (680 p.)
Hmm, nadal wyświetla się pusta tablica.
komentarz 4 grudnia 2015 przez Michał628496 Pasjonat (17,340 p.)

problem jest w tej pętli j , ja bym zrobiłł tak :

class obiekt():
    def __init__(self):
        self.tab=[]
        
    def primes(self):
        for i in range(2,100):
            p = True;
            for j in self.tab:
                    if(i%j == 0):
                        p =False
            if not p:
                    continue
            self.tab.append(i)
 
    def show(self):
        print(self.tab)
    def ile(self):
        x=len(self.tab)
        print(x)
 

p=obiekt()

p.primes()
p.show()

Pętla jest niepoprawna, bo jeśli się dzieli przez jakąś liczbę pierwszą to OK , należy przerwać. ale dodać liczbę należy dopiero po zakończeniu tej pętli jeśli się nie podzieliła , stąd utworzyłem zmienną p która będzie przechowywać informację czy liczba się przez coś podzieliła czy nie

Podobne pytania

+1 głos
2 odpowiedzi 799 wizyt
pytanie zadane 27 października 2019 w Python przez Krystian_nn Nowicjusz (150 p.)
0 głosów
0 odpowiedzi 423 wizyt
pytanie zadane 23 października 2019 w Python przez Krystian_nn Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 915 wizyt
pytanie zadane 20 października 2018 w Python przez lancernik Nowicjusz (150 p.)

92,556 zapytań

141,403 odpowiedzi

319,559 komentarzy

61,942 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...