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

Nie rozumiem działania programu.

0 głosów
220 wizyt
pytanie zadane 3 kwietnia 2022 w Python przez niezalogowany

Wytłumaczyłby mi ktoś jak działa ten program.

 

for candidate in range(2,31):
    for divider in range(2, candidate):
        if candidate % divider == 0:

            print("%2d is not a prime number - divider is %2d" % (candidate, divider))
            


wyjście


4 is not a prime number - divider is  2
 6 is not a prime number - divider is  2
 6 is not a prime number - divider is  3
 8 is not a prime number - divider is  2
 8 is not a prime number - divider is  4
 9 is not a prime number - divider is  3
10 is not a prime number - divider is  2
10 is not a prime number - divider is  5
12 is not a prime number - divider is  2
12 is not a prime number - divider is  3
12 is not a prime number - divider is  4
12 is not a prime number - divider is  6
14 is not a prime number - divider is  2
14 is not a prime number - divider is  7
15 is not a prime number - divider is  3
15 is not a prime number - divider is  5
16 is not a prime number - divider is  2
16 is not a prime number - divider is  4
16 is not a prime number - divider is  8
18 is not a prime number - divider is  2
18 is not a prime number - divider is  3
18 is not a prime number - divider is  6
18 is not a prime number - divider is  9
20 is not a prime number - divider is  2
20 is not a prime number - divider is  4
20 is not a prime number - divider is  5
20 is not a prime number - divider is 10
21 is not a prime number - divider is  3
21 is not a prime number - divider is  7
22 is not a prime number - divider is  2
22 is not a prime number - divider is 11
24 is not a prime number - divider is  2
24 is not a prime number - divider is  3
24 is not a prime number - divider is  4
24 is not a prime number - divider is  6
24 is not a prime number - divider is  8
24 is not a prime number - divider is 12
25 is not a prime number - divider is  5
26 is not a prime number - divider is  2
26 is not a prime number - divider is 13
27 is not a prime number - divider is  3
27 is not a prime number - divider is  9
28 is not a prime number - divider is  2
28 is not a prime number - divider is  4
28 is not a prime number - divider is  7
28 is not a prime number - divider is 14
30 is not a prime number - divider is  2
30 is not a prime number - divider is  3
30 is not a prime number - divider is  5
30 is not a prime number - divider is  6
30 is not a prime number - divider is 10
30 is not a prime number - divider is 15

 

komentarz 3 kwietnia 2022 przez pionas0407 Gaduła (4,620 p.)
Najpierw musisz wiedzieć co to jest operacja Modulo:

https://forum.pasja-informatyki.pl/428471/jak-dziala-ten-kod-z-modulo

Następnie przestudiuj, jak działają pętle, na pewno samemu uda Ci się zrozumieć ten kod :)
komentarz 3 kwietnia 2022 przez VBService Ekspert (256,600 p.)

@Michal123456, możesz podejrzeć np. tak, co się "dzieje" w zależności od tego co dana zmienna zawiera.

 

[ on-line ]

 

for candidate in range(3,31):
    print('-'*40)
    for divider in range(2, candidate):
        print(f"Dla candidate={candidate} i divider={divider}")
        if candidate % divider == 0:
            print("%2d is not a prime number - divider is %2d" % (candidate, divider))

 

1 odpowiedź

+1 głos
odpowiedź 4 kwietnia 2022 przez dzihaaad Nowicjusz (220 p.)
Spróbuje wytłumaczyć choć sam jestem dopiero na początku swej programistycznej drogi... mam nadzieję że nie zamieszam...

Programik ten sprawdza czy wartość wywołana w pierwszej, zewnętrznej pętli jest podzielna (bez reszty) przez wartości wywołane w pętli wewnętrznej.

Pętla zewnętrzna podaje do pętli wewnętrznej "kandydata do sprawdzenia" o wartościach z zakresu  range(2, 31), kolejno w każdym przejściu od 2 do 30.

Warunek "if" w pętli wewnętrznej sprawdza naszego kandydata czy jest on podzielny "bez reszty" przez liczby z jej zakresu range(2, candidate) czyli od 2 do kandydata (jego samego nie uwzględniając).

Każdorazowo gdy spełniony zostanie warunek "if" zwracany jest komunikat że liczba nie jest liczbą pierwszą oraz wartość znalezionego dzielnika. W momencie gdy wszystkie dzielniki (z przedziału 2 do candidate) zostaną sprawdzone następuje wyjście do pętli zewnętrznej i podanie kolejnego kandydata...i tak do wyczerpania zapasów.

Sprawdzamy pierwszego kandydata 2 (z pętli zewn.) przez zakres (2, 2) i-  tu mam lekką zagadkę wydaje mi się że program nie znajdzie tego dzielnika - ponieważ sam "kandydat" nie będzie sprawdzany (będę wdzięczny za korektę jeżeli się mylę ). W związku z czym nie zostanie wyświetlony komunikat i program wyjdzie do pętli zewnętrznej.

Następnie sprawdzamy 3 czy jest podzielne bez reszty przez wartości z przedziału (2,3) czyli tylko przez 2. Nie jest podzielne więc znów program nic nie wyświetli i przejdzie do pętli zewnętrznej.

Teraz bierzemy na warsztat 4 i sprawdzamy czy jest podzielne przez wartości z przedziału (2,4).  Znajduje 2. Wyświetla komunikat. Sprawdza 3 i znów wychodzi do pętli zewnętrznej.. i tak do końca czyli do 30.

Będę wdzięczny za wykrycie wszelkich nieścisłości rozumowania.

Podobne pytania

0 głosów
0 odpowiedzi 187 wizyt
pytanie zadane 9 kwietnia 2022 w Python przez niezalogowany
+1 głos
2 odpowiedzi 1,796 wizyt
0 głosów
2 odpowiedzi 7,431 wizyt
pytanie zadane 5 listopada 2016 w Python przez Krzysiek Rojowski Obywatel (1,110 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 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

Kursy INF.02 i INF.03
...