Po uruchomieniu IDLE’a zgłasza się tryb interaktywny Pythona.
Wykorzystamy go do nauki szybkiego tworzenia sekwencji.
Do tworzenia sekwencji, których elementy należą do ciągu arytmetycznego, używamy funkcji range:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6,
7, 8, 9]
Pojedynczy parametr oznacza koniec (tj. pierwszy element nie należący do) sekwencji (pierwszym elementem zawsze jest zero).
Aby wyświetlić kwadraty liczb od 0 do 9, napiszemy:
>>> for x in range(10):
print x,'** 2 =',x*x
0 ** 2 = 0
1 ** 2 = 1
2 ** 2 = 4
3 ** 2 = 9
4 ** 2 = 16
5 ** 2 = 25
6 ** 2 = 36
7 ** 2 = 49
8 ** 2 = 64
9 ** 2 = 81
Aby zmienić pierwszy element tworzonej sekwencji używamy funkcji range z dwoma parametrami (początek i koniec):
>>> range(1,10)
[1, 2, 3, 4, 5, 6, 7,
8, 9]
Aby wyświetlić kwadraty liczb od 3 do 9, napiszemy:
>>> for x in range(3,10):
print x,'** 2 =',x*x
3 ** 2 = 9
4 ** 2 = 16
5 ** 2 = 25
6 ** 2 = 36
7 ** 2 = 49
8 ** 2 = 64
9 ** 2 = 81
Aby zmienić krok pomiędzy elementami tworzonej sekwencji używamy funkcji range z trzema parametrami (początek, koniec i krok):
>>> range(1,10,2)
[1, 3, 5, 7, 9]
Możemy w ten sposób również odwrócić kolejność elementów, poprzez użycie ujemnego kroku:
>>> range(9,0,-1)
[9, 8, 7, 6, 5, 4, 3,
2, 1]
Aby wyświetlić kwadraty liczb nieparzystych malejąco od 9 do 1, napiszemy:
>>> for x in range(9,0,-2):
print x,'** 2 =',x*x
9 ** 2 = 81
7 ** 2 = 49
5 ** 2 = 25
3 ** 2 = 9
1 ** 2 = 1
Celem pętli często jest wyświetlenie kolumny liczb. Aby liczby wyświetlane były w należyty sposób i w pożądanym miejscu używamy operatora formatowania % w połączeniu z ciągiem formatującym. Ciąg formatujący składa się ze znaku %, po którym następują opcje formatowania, ilość znaków przeznaczonych do wyświetlenia oraz typ danej do wyświetlenia (przy czym tylko trzeci element – tj. typ danych jest wymagany).
Typ danej sygnalizujemy pojedynczą literą. I tak:
>>> print "%s" % 1
1
>>> print "%s" % range(6)
[0, 1, 2, 3, 4, 5]
>>> print "%s" % "txt"
txt
>>> print "%c" % "A"
A
>>> print "%c" % 077
?
>>> print "%c" % 33
!
>>> print "%c" % "Abc"
# błąd!
Traceback
(most recent call
last):
File
"<pyshell#44>", line
print "%c" % "Abc"
TypeError
: %c requires int or char
>>> print "%i" % 0xff
255
>>> print "%i" % 2.2
2
>>> print "%i" %
"11" # błąd!
Traceback
(most recent call
last):
File
"<pyshell#32>", line
print "%i" % "11" # błąd!
TypeError
: int argument required
>>> print "%x" % 0xff
ff
>>> print "%x" % 2.2
2
>>> print "%x" % 22
16
>>> print "%o" % 0xff
377
>>> print "%o" % 2.2
2
>>> print "%o" % 077
77
>>> print "%e" % 1
1.000000e+000
>>> print "%e" % 1.23
1.230000e+000
>>> print "%e" % 123
1.230000e+002
>>> print "%f" % 123
123.000000
>>> print "%f" % 1.23
1.230000
Aby przekonać się na czym polega zaleta formatowania, wyświetlmy tabelę kwadratów i sześcianów wybranych liczb:
>>> for x in range(5,100,10):
print x,x**2,x**3
5 25 125
15 225 3375
25 625 15625
35 1225 42875
45 2025 91125
55 3025 166375
65 4225 274625
75 5625 421875
85 7225 614125
95 9025 857375
Jak widać kolumny liczb wyświetlane są nierówno. Spróbujmy
ustalić w formacie długość pola do wyświetlenia każdej liczby na 4, jej
kwadratu na
>>> for x in range(5,100,10):
print "%4i%6i%8i" %
(x,x**2,x**3)
5
25 125
15
225 3375
25
625 15625
35
1225 42875
45
2025 91125
55
3025 166375
65
4225 274625
75
5625 421875
85
7225 614125
95
9025 857375
Jak widać, efekt teraz jest znacznie bardziej przejrzysty.
Formatując liczby zmiennopozycyjne możemy także ustalić nie tylko całkowitą długość, ale także liczbę wyświetlanych miejsc po przecinku (np. na 3):
>>> for x in
range(5,100,10):
print "Pierwiastkiem liczby %2i
jest %5.3f" % (x,x**0.5)
Pierwiastkiem liczby 5 jest 2.236
Pierwiastkiem liczby 15
jest 3.873
Pierwiastkiem liczby 25
jest 5.000
Pierwiastkiem liczby 35
jest 5.916
Pierwiastkiem liczby 45
jest 6.708
Pierwiastkiem liczby 55
jest 7.416
Pierwiastkiem liczby 65
jest 8.062
Pierwiastkiem liczby 75
jest 8.660
Pierwiastkiem liczby 85
jest 9.220
Pierwiastkiem liczby 95
jest 9.747
Opcje formatowania modyfikują sposób wyświetlania liczb. Np. opcja + wymusza wyświetlanie znaku liczby, także dla liczb nieujemnych:
>>> for x in range (-10,11):
print "%+i" % x,
-10 -9 -8 -7 -6 -5 -4
-3 -2 -1 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10
Załóżmy, że chcemy otrzymać tabelę przeliczającą liczby dziesiętne na ósemkowe i szesnastkowe:
>>> for x in range(5,100,10):
print "%3i%6o%5x" %
(x,x,x)
5 5 5
15
17 f
25
31 19
35
43 23
45
55 2d
55
67 37
65
101 41
75
113 4b
85
125 55
95
137
Nie jest to jednoznaczne. Użycie opcji # spowoduje, że liczby ósemkowe i szesnastkowe będą poprzedzane właściwym prefiksem:
>>> for x in range(5,100,10):
print "%3i%#6o%#5x"
% (x,x,x)
5 05
0x5
15
017 0xf
25
031 0x19
35
043 0x23
45
055 0x2d
55
067 0x37
65
0101 0x41
75
0113 0x4b
85 0125 0x55
95 0137
0x5f
Z kolei użycie opcji - spowoduje, że liczby będą wyrównywane do lewej, a nie prawej krawędzi swojego pola:
>>> for x in range(5,100,10):
print
"%-3i%#-6o%#-5x" % (x,x,x)
5 05 0x5
15 017 0xf
25 031 0x19
35 043 0x23
45 055 0x2d
55 067 0x37
65 0101 0x41
75 0113 0x4b
85 0125 0x55
95 0137 0x5f
Natomiast użycie opcji 0 spowoduje, że pole przeznaczone na liczby będzie wypełniane nie spacjami, lecz zerami:
>>> for x in range(5,100,10):
print "%3i %#04o
%#04x" % (x,x,x)
5 0005 0x05
15 0017 0x0f
25 0031 0x19
35 0043 0x23
45 0055 0x2d
55 0067 0x37
65 0101 0x41
75 0113 0x4b
85 0125 0x55
95 0137 0x5f
Pętle mogą zawierać inne pętle – mówimy wtedy o nich, że są zagnieżdżone.
Spróbujmy wygenerować tabliczkę mnożenia:
>>> for x in
range(1,11):
print # przejście do nowego wiersza
for y in range(1,11):
print "%3i" % (x*y),
1 2 3
4 5 6 7 8
9 10
2
4 6 8
10 12 14
16 18 20
3
6 9 12
15 18 21
24 27 30
4
8 12 16
20 24 28 32 36 40
5
10 15 20
25 30 35
40 45 50
6
12 18 24
30 36 42
48 54 60
7
14 21 28
35 42 49
56 63 70
8
16 24 32
40 48 56
64 72 80
9
18 27 36
45 54 63
72 81 90
10
20 30 40
50 60 70
80 90 100
Nie wszystkie instrukcje w pętli muszą być wykonane za każdym razem. Do pomijania wszystkich instrukcji znajdujących się po niej w pętli służy instrukcja continue.
Załóżmy, że chcemy napisać program, który wyliczy i wyświetli pierwiastek kwadratowy dla każdej nieujemnej liczby z listy (lub krotki) podanej przez użytkownika.
Aby przejść do edycji nowego programu należy z menu File
wybrać polecenie New Window.
Otworzy się nowe okno, przeznaczone do edycji programu. Wybierzmy z menu File polecenie Save As. Wybieramy folder Moje dokumenty, następnie wpisujemy nazwę pierwiastki.py.
Przepiszmy następujący program:
#
Program, który wyliczy i wyświetli pierwiastek kwadratowy
# dla
każdej nieujemnej liczby z listy podanej przez użytkownika
W celu uruchomienia programu wybieramy z menu Run polecenie Run Module (lub wciskamy klawisz F5). Po chwili nasz program zostanie uruchomiony. Wypróbujmy:
Nie wszystkie zaplanowane obiegi pętli muszą być wykonane za każdym razem. Do przerywania pętli w dowolnym miejscu służy instrukcja break.
Załóżmy, że chcemy napisać program, który znajdzie i wyświetli pozycję na liście (lub w krotce) podanej przez użytkownika pierwszego wystąpienia liczby również podanej przez użytkownika.
Aby przejść do edycji nowego programu należy z menu File
wybrać polecenie New Window.
Otworzy się nowe okno, przeznaczone do edycji programu. Wybierzmy z menu File polecenie Save As. Wybieramy folder Moje dokumenty, następnie wpisujemy nazwę szukaj.py.
#
Program, który znajdzie i wyświetli pozycję na liście
#
pierwszego wystąpienia określonej liczby
Jak widać, w tej chwili program wypisuje już tylko pierwszą pozycję szukanej liczby.
Jeżeli jednak podamy liczbę, której nie ma na liście, nic nie zobaczymy:
Aby to naprawić, posłużymy się instrukcją else. Instrukcja ta określa co ma się wykonać na zakończenie pętli, ale tylko wtedy, gdy nie przerwano pętli instrukcją break.
Dopiszmy jeszcze dwie linie na końcu programu szukaj.py:
Wypróbujmy:
Wiemy już, jak przerwać we właściwym miejscu zbyt długą pętlę. Czasami jednak musimy użyć w programie pętli, której liczby powtórzeń nie jesteśmy w stanie w żaden sposób przewidzieć. Przypomnijmy sobie algorytm Euklidesa na wyliczanie Największego Wspólnego Dzielnika. Powtarzamy w nim operacje dzielenia, nie jesteśmy jednak w stanie z góry powiedzieć, ile tych operacji będzie.
Do tworzenia pętli o nieznanej liczbie powtórzeń w Pythonie służy instrukcja while.
Przejdźmy do okna trybu interaktywnego i wpiszmy:
Pętla typu while może również zawierać blok po else, wykonywany po ostatnim obiegu pętli:
Spróbujemy teraz napisać program na wyliczanie metodą Euklidesa NWD dwóch liczb podanych przez użytkownika. Aby przejść do edycji nowego programu należy z menu File wybrać polecenie New Window. Otworzy się nowe okno, przeznaczone do edycji programu. Wybierzmy z menu File polecenie Save As. Wybieramy folder Moje dokumenty, następnie wpisujemy nazwę nwd.py.
#
Wyliczanie NWD i NWW
# 1.
wprowadzanie liczb
# 2.
ustalenie która jest mniejsza
# 3.
pętla główna
# 4.
wyświetlenie rezultatów
Wypróbujmy:
Do wyszukania liczb pierwszych z podanego zakresu posłużymy się sitem Eratostenesa.
Algorytm ten polega na usuwaniu z badanego zakresu wszystkich wielokrotności kolejnych liczb pierwszych.
Aby przejść do edycji nowego programu należy z menu File wybrać polecenie New Window. Otworzy się nowe okno, przeznaczone do edycji programu. Wybierzmy z menu File polecenie Save As. Wybieramy folder Moje dokumenty, następnie wpisujemy nazwę pierwsze.py.
I.
Woda zamarza przy
II. Napisz program „oceny.py”, który wczytuje od użytkownika kolejne oceny i: