Top Banner
22

Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Jul 08, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Ìåòîäè÷êà ïî Python 3 (v1.31)

R314 & TL

15 äåêàáðÿ 2017 ã.

Page 2: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Îãëàâëåíèå

1 Ââîä, âûâîä è ïåðåìåííûå 21.1 Ïðîñòåéøàÿ ïðîãðàììà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Óñëîâíûå îïåðàòîðû è öèêëû . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.2.1 Óñëîâíûé îïåðàòîð . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.2 Öèêë ñ ïðåäóñëîâèåì . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2.3 Ïåðåáîð ýëåìåíòîâ ìíîæåñòâà . . . . . . . . . . . . . . . . . . . . . 31.2.4 Ïðåðûâàíèå öèêëà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2.5 �Èíà÷å� ïîñëå öèêëîâ! . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.3 Ôîðìàòèðîâàííûé âûâîä . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3.1 Ñòðîêè ñ ïîäñòàíîâêîé . . . . . . . . . . . . . . . . . . . . . . . . . 41.3.2 Ïåðå÷èñëåíèå àðãóìåíòîâ . . . . . . . . . . . . . . . . . . . . . . . . 5

1.4 Ââîä . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.4.1 �Ñûðîé� ââîä . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.4.2 Ïàðñèíã . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.4.3 Ôàéëîâûé ââîä-âûâîä . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.5 Ââîä ÷èñåë . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Èëëþñòðàöèè àëãîðèòìèçàöèè 122.1 Ìàòåìàòèêà è îïåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2 Ñóììà N ÷èñåë . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 N! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4 Ôèáîíà÷÷è . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.5 Òÿæ¼ëûé, ìåäëåííûé Ïèòîí . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3 Ñòðóêòóðû äàííûõ 173.1 Êîðòåæè è ñïèñêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.2 Ñòåê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.3 Î÷åðåäü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.4 Äåê (î÷åðåäü î äâóõ êîíöàõ) . . . . . . . . . . . . . . . . . . . . . . . . . . 193.5 Ñåò (ìíîæåñòâî óíèêàëüíûõ ýëåìåíòîâ) . . . . . . . . . . . . . . . . . . . 193.6 Ñëîâàðü (àññîöèàòèâíûé ìàññèâ) . . . . . . . . . . . . . . . . . . . . . . . 20

1

Page 3: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Ãëàâà 1

Ââîä, âûâîä è ïåðåìåííûå

1.1 Ïðîñòåéøàÿ ïðîãðàììà

1 print (’Hello, World!’)

Äàííûé êîä âûâîäèò íà ýêðàí ñòðîêó �Hello, World!�.Ôóíêöèÿ print() âûâîäèò íà ýêðàí ñâîé àðãóìåíò (òî, ÷òî äàíî â ñêîáêàõ).Êîä íà Ïèòîíå ñîõðàíÿåòñÿ â ôàéëå ñ ðàñøèðåíèåì .py è çàïóñêàåòñÿ èç êîíñîëè îäíîéèç ñëåäóþùèõ êîìàíä:

1 > python program.py2 Hello, World!

1 > py −3 program.py2 Hello, World!

1.2 Óñëîâíûå îïåðàòîðû è öèêëû

1.2.1 Óñëîâíûé îïåðàòîð

Àëãîðèòìè÷åñêàÿ êîíñòðóêöèÿ �åñëè óñëîâèå, òî äåëàé äåéñòâèÿ, èíà÷å äåëàé äðóãèå

äåéñòâèÿ� îïèñûâàåòñÿ â Ïèòîíå ñ ïîìîùüþ if-else. Óñëîâèå â óñëîâíîì îïåðàòîðåïèøåòñÿ â ñêîáêàõ, è â ñëó÷àå, åñëè óñëîâèå � èñòèíà (èëè íå íîëü), âûïîëíÿåòñÿäåéñòâèå, óêàçàííîå ñðàçó ïîñëå îïåðàòîðà. Îïöèîíàëüíî ìîæíî ïîñëå äåéñòâèÿ äëÿif äîáàâèòü êîìàíäó else, â òàêîì ñëó÷àå åñëè óñëîâèå â óñëîâíîì îïåðàòîðå � ëîæü(èëè íîëü), âûïîëíèòñÿ äåéñòâèå, óêàçàííîå ñðàçó ïîñëå else. êà÷åñòâå óñëîâèÿ ìîæíî èñïîëüçîâàòü íåñêîëüêî âûðàæåíèé, îáúåäèí¼ííûõ ëîãè÷å-ñêèìè îïåðàòîðàìè. Îïåðàòîð and (ëîãè÷åñêîå �È�) äà¼ò èñòèíó òîëüêî òîãäà, êîãäà ïðè-ìåíÿåòñÿ ê äâóì âûðàæåíèÿì, òàêæå äàþùèì èñòèíó. Îïåðàòîð or (ëîãè÷åñêîå �ÈËÈ�)äà¼ò ëîæü òîëüêî òîãäà, êîãäà ïðèìåíÿåòñÿ ê äâóì âûðàæåíèÿì, òàêæå äàþùèì ëîæü.Îïåðàòîð not (ëîãè÷åñêîå �ÍÅ�) ìåíÿåò èñòèíó íà ëîæü, è íàîáîðîò.

2

Page 4: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Ïðèìåð: ïðîâåðèòü, ÷òî ÷èñëî a âõîäèò â äèàïàçîí çíà÷åíèé [5, 10]:

1 if(a >= 5 and a <= 10):2 print("YES")3 else:4 print("NO")

1 if(a < 5 or a > 10):2 print("NO")3 else:4 print("YES")

1.2.2 Öèêë ñ ïðåäóñëîâèåì

Åñëè êîìàíäà èëè êîìàíäû â óñëîâíîì îïåðàòîðå äîëæíû âûïîëíÿòüñÿ íå îäèí ðàç,à ìíîãî ðàç, ïîêà óñëîâèå âîçâðàùàåò èñòèíó, ïðèìåðÿþò îïåðàòîð while. Ïðîâåðèâóñëîâèå íà èñòèííîñòü, îïåðàòîð âûïîëíèò êîìàíäó ïîñëå while, à çàòåì ñíîâà ïðîâåðèòóñëîâèå, è ñíîâà âûïîëíèò êîìàíäó, è òàê äàëåå äî òåõ ïîð, ïîêà óñëîâèå íå ñòàíåòëîæíûì.Ïóñòü íàäî âûâåñòè ÷èñëà òî 1 äî 10 (ñì. ñëåäóþùóþ ñåêöèþ Ôîðìàòèðîâàííûé âûâîä):

1 i = 12 while(i <= 10):3 print(i, end = ’ ’)4 i += 1

1.2.3 Ïåðåáîð ýëåìåíòîâ ìíîæåñòâà

Öèêë, â êàæäîé èòåðàöèè êîòîðîãî ïåðåìåííàÿ ññûëàåòñÿ íà ñëåäóþùèé ýëåìåíò ìíî-æåñòâà, ïîêà îíè íå çàêîí÷àòñÿ. Äëÿ ïåðåáîðà ïîñëåäîâàòåëüíîñòåé ÷èñåë ìîæíî ñî-çäàâàòü ìíîæåñòâà ñ ïîìîùüþ ôóíêöèè range() (ñì. äîêóìåíòàöèþ); íåêîòîðûå ìíî-æåñòâà ñèìâîëîâ ñîäåðæàòñÿ â áèáëèîòåêå string (ñì. äîêóìåíòàöèþ).Ñ ïîìîùüþ for êîä èç ïðåäûäóùåãî ïðèìåðà ìîæíî çàïèñàòü â äâå ñòðîêè:

1 for i in range(1, 11):2 print(i, end = ’ ’)

1.2.4 Ïðåðûâàíèå öèêëà

Îñîáûå êîìàíäû break è continue ïîçâîëÿþò ïðåðâàòü õîä âûïîëíåíèÿ öèêëà èçíóòðèöèêëà. Êîìàíäà break ìîìåíòàëüíî çàâåðøàåò âûïîëíÿþùèéñÿ öèêë (òîëüêî îäèí!), àêîìàíäà continue ïðåðûâàåò òåêóùóþ èòåðàöèþ è ïåðåõîäèò ê ñëåäóþùåé.Ýòè îïåðàöèè ïîëåçíû, êîãäà óñëîâèåì âûïîëíåíèÿ öèêëà íåëüçÿ ïîëíîñòüþ îïèñàòüâñþ ëîãèêó àëãîðèòìà. Îíè ïðèìåíÿþòñÿ, íàïðèìåð, êîãäà íåèçâåñòíî, â êàêîé ìîìåíòâíóòðè öèêëà âûïîëíèòñÿ íóæíîå óñëîâèå.

3

Page 5: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Ïóñòü íàäî âîçâîäèòü â êâàäðàò ââîäèìûå ÷èñëà äî òåõ ïîð, ïîêà íà ââîä íå áóäåò äàííîëü:

1 while(1 == 1):2 a = int(input())3 if(a == 0):4 break5 print(a*a)

1.2.5 �Èíà÷å� ïîñëå öèêëîâ!

Îïåðàòîð else ìîæíî èñïîëüçîâàòü íå òîëüêî ïîñëå if, íî è ïîñëå while è for. Êîìàí-äû â áëîêå else áóäóò âûïîëíÿòüñÿ â ñëó÷àå çàâåðøåíèÿ öèêëà ïî óñëîâèþ èëè ïðèçàâåðøåíèè îáõîäà ýëåìåíòîâ ìíîæåñòâà, íî íå áóäóò â ñëó÷àå çàâåðøåíèÿ öèêëà ïîêîìàíäå break.

1.3 Ôîðìàòèðîâàííûé âûâîä

1.3.1 Ñòðîêè ñ ïîäñòàíîâêîé

Ïðè âûâîäå ôóíêöèåé print() ñòðîêè ìîæíî ïîäñòàâëÿòü â íå¼ çíà÷åíèÿ.  òîì ìåñòå,ãäå â âûâîäèìóþ ñòðîêó íóæíî âñòàâèòü íóæíîå çíà÷åíèå, ïèøåòñÿ îïåðàòîð % è òàêíàçûâàåìûé ñïåöèôèêàòîð (äëÿ öåëûõ ÷èñåë ýòî áóêâà d). Ïîñëå ñàìîé ñòðîêè ñòàâèòñÿçíàê %, à ïîòîì â ñêîáêàõ ÷åðåç çàïÿòóþ ïåðå÷èñëÿþòñÿ âñå ïîäñòàâëÿåìûå çíà÷åíèÿâ òîì æå ïîðÿäêå, â êîòîðîì îíè äîëæíû áûòü ïîäñòàâëåíû â ñòðîêó.

1 print (’%d + %d = %d’ % (3, 5, 3+5))2 print (’And %d * %d = %d’ % (3, 5, 3*5))

Âûïîëíåíèå ïðîãðàììû

1 > python program.py2 3 + 5 = 83 And 3 * 5 = 15

Ñïèñîê íåêîòîðûõ ñïåöèôèêàòîðîâ äëÿ ðàçëè÷íûõ òèïîâ äàííûõ:

d, i Çíàêîâîå öåëîå äåñÿòè÷íîå ÷èñëî

o Çíàêîâîå öåëîå âîñüìåðè÷íîå ÷èñëî

x, X Çíàêîâîå øåñòíàäöàòåðè÷íîå ÷èñëî

f, F Âåùåñòâåííîå ÷èñëî

c Ñèìâîëüíàÿ ïåðåìåííàÿ

s Ñòðîêà

4

Page 6: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Ïðèìåð èñïîëüçîâàíèÿ ðàçëè÷íûõ ñïåöèôèêàòîðîâ:

1 print (’My name is %s.\nI am %i and love the number %12.4f’ %2 (’Ruslan’, 22, 3.1415926))3 print (’My name is %s.\nI am %i and love the number %2.10f’ %4 (’Ruslan’, 22, 3.1415926))

(Çàìå÷àíèå: íà ñàìîì äåëå ïåðåíîñîâ ñòðîêè ìåæäó % è ïåðå÷èñëåíèåì ïåðåìåííûõáûòü íå äîëæíî. Îíè äîáàâëåíû, ÷òîáû êîä âìåùàëñÿ â ñòðàíèöó)

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 My name is Ruslan.3 I am 22 and love the number 3.14164 My name is Ruslan.5 I am 22 and love the number 3.1415926000

Îòäåëüíîå âíèìàíèå ñòîèò óäåëèòü âûâîäó âåùåñòâåííûõ ÷èñåë.  ýòîì ïðèìåðå ìåæäó% è ñïåöèôèêàòîðîì f ñòîÿò äîïîëíèòåëüíûå ïàðàìåòðû. ×èñëî äî òî÷êè � ýòî ìèíè-ìàëüíîå êîëè÷åñòâî ñèìâîëîâ, êîòîðîå äîëæíî çàíèìàòü âûâîäèìîå ÷èñëî öåëèêîì.�Ëèøíèå� ñèìâîëû çàáèâàþòñÿ ïðîáåëàìè. ×èñëî ïîñëå òî÷êè � ýòî êîëè÷åñòâî çíàêîâïîñëå çàïÿòîé, êîòîðîå äîëæíî áûòü ó âûâîäèìîãî ÷èñëà. Ýòîò ïàðàìåòð íå ïðîñòîîáðåçàåò ÷èñëî, à îêðóãëÿåò åãî ïî âñåì ïðàâèëàì (ïîýòîìó â âûâîäå ÷èñëî 3.1416, àíå 3.1415).Ýòè ïàðàìåòðû íåîáÿçàòåëüíû äëÿ èñïîëüçîâàíèÿ, â òàêîì ñëó÷àå ñïåöèôèêàòîð áóäåòâûãëÿäåòü ïðîñòî êàê %f. Åñëè æå èñïîëüçóåòñÿ òîëüêî îäèí èç ïàðàìåòðîâ, íóæíîîáÿçàòåëüíî ñòàâèòü òî÷êó: %.2f, %5.f.Âìåñòî èçâåñòíûõ çíà÷åíèé â êà÷åñòâå ïàðàìåòðîâ â ôóíêöèþ print() ìîæíî ïîäñòàâ-ëÿòü ïåðåìåííûå:

1 a = 32 b = 53 print (’%d + %d = %d’ % (a, b, a+b))4 print (’And %d * %d = %d’ % (a, b, a*b))

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 3 + 5 = 83 And 3 * 5 = 15

1.3.2 Ïåðå÷èñëåíèå àðãóìåíòîâ

Ó ôóíêöèè print() åñòü åù¼ îäèí �ðåæèì ðàáîòû� � âûâîä ïåðå÷èñëåííûõ ÷åðåç çà-ïÿòóþ àðãóìåíòîâ ñ îïðåäåë¼ííûì ðàçäåëèòåëåì sep è êîíöîì âûâîäà end (ñòðîêîâûåïåðåìåííûå). Ïî óìîë÷àíèþ (åñëè íå çàäàí) sep � ïðîáåë, à end � ïåðåâîä ñòðîêè.

5

Page 7: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

1 print (1, 2, 3, 4, 5)2 print (1, 2, 3, 4, 5, sep = ’~’, end = ’ ^___^’)

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 1 2 3 4 53 1~2~3~4~5 ^___^

1.4 Ââîä

1.4.1 �Ñûðîé� ââîä

Ñ÷èòûâàíèå ââîäà â Ïèòîíå îñóùåñòâëÿåòñÿ ôóíêöèåé input(). Ýòà ôóíêöèÿ âîçâðà-ùàåò âñå ñèìâîëû èç ââîäà äî áëèæàéøåãî ïåðåâîäà ñòðîêè.

1 name = input()2 print ("Hello", name)

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 Tanya3 Hello, Tanya

 ýòîì ïðèìåðå ïîñëå çàïóñêà ïðîãðàììû îíà îæèäàåò, ïîêà ïîëüçîâàòåëü íå ââåä¼ò ÷òî-òî (ìîæåò áûòü, è íè÷åãî) è íå íàæì¼ò êëàâèøó Enter (ñòðîêà 2 â ëèñòèíãå âûïîëíåíèÿïðîãðàììû). Ïîñëå ýòîãî ïðîãðàììà ïåðåõîäèò ê âûïîëíåíèþ ñëåäóþùåé êîìàíäû.

1.4.2 Ïàðñèíã

Ôóíêöèÿ input() ñ÷èòûâàåò âåñü ââîä äî ïåðåâîäà ñòðîêè â îäíó ñòðîêó, ïîýòîìó åñëèêàêèå-íèáóäü çíà÷åíèÿ äîëæíû ââîäèòüñÿ ÷åðåç ïðîáåë èëè ëþáîé äðóãîé ðàçäåëèòåëü,ââîä ïðèõîäèòñÿ ñíà÷àëà ðàçîáðàòü (ðàñïàðñèòü). Ïðèìåíÿåìûé ê ñòðîêå (à input()

âîçâðàùàåò ñòðîêó) ìåòîä split() ïîçâîëÿåò ïîäåëèòü ñòðîêó íà ÷àñòè â ñîîòâåòñòâèèñ çàäàííûì ðàçäåëèòåëåì. Åñëè ðàçäåëèòåëü íå çàäàí, îí ïî óìîë÷àíèþ ñ÷èòàåòñÿ ïðî-áåëîì.Ôóíêöèÿ split() âîçâðàùàåò ñòðóêòóðó äàííûõ ñïèñîê.

1 name1, name2 = input().split()2 print ("Hello, ", name1, ", I’m ", name2, sep = ’’)

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 Ruslan Tanya3 Hello, Ruslan, I’m Tanya

6

Page 8: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Åñëè íàì èçâåñòíî, ñêîëüêî èìåííî ñòðîê ÷åðåç ðàçäåëèòåëü ââåä¼ò ïîëüçîâàòåëü, ìîæ-íî ñ÷èòûâàòü èõ êàê â ïðèìåðå âûøå. Ìîæíî òàêæå ïðîñòî çàïèñûâàòü ðåçóëüòàò âñïèñîê, à ïîòîì âûâîäèòü åãî ñîæåðæèìîå ñ ïîìîùüþ îïåðàòîðà öèêëà for, êîòîðûéïåðåáèðàåò âñå çíà÷åíèÿ äàííîãî ñïèñêà a, ïîäñòàâëÿÿ èõ ïî î÷åðåäè â ïåðåìåííóþ x

(ñïèñêè è ïåðåìåííûå ìîæíî íàçûâàòü êàê óãîäíî).

1 a = input().split()2 for x in a:3 print(x)

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 Leonardo Donatello Raphael Michaelangelo3 Leonardo4 Donatello5 Raphael6 Michaelangelo

1.4.3 Ôàéëîâûé ââîä-âûâîä

Äàâàéòå ðàññìîòðèì åù¼ ïàðó ïðèìåðîâ ââîäà è âûâîäà ñ äîáàâ-ëåíèåì îñìûñëåííîé ìàíèïóëÿöèè äàííûìè � ñîðòèðîâêè. Âñòðî-åííàÿ ôóíêöèÿ ñîðòèðîâêè sort() óïîðÿäî÷èâàåò ýëåìåíòû ñïèñêàâ ïîðÿäêå âîçðàñòàíèÿ, à â ñëó÷àå ñòðîê � â ëåêñèêîãðàôè÷åñêîìïîðÿäêå (êàê â ñëîâàðå).

1 a = map(int, input().split())2 a.sort()3 for x in a:4 print(x, end = ’ ’)

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 Leonardo Donatello Raphael Michaelangelo3 Donatello Leonardo Michaelangelo Raphael

 ñëåäóþùåì ïðèìåðå ìû áóäåì ïðîäåëûâàòü òî æå, ÷òî è â ïðåäûäóùåì, äî òåõ ïîð,ïîêà ïîëüçîâàòåëü íå ââåä¼ò ïóñòóþ ñòðîêó, òî åñòü ïîêà äëèíà len(a) ñïèñêà ñëîâ a

íå ðàâíà íóëþ (êòî îïðåäåëèò, êàêóþ íåïóñòóþ ñòðîêó ìîæíî ââåñòè, ÷òîáû ïðîãðàììàçàâåðøèëàñü, èìååò ïðàâî íåìåäëåííî ïîòðåáîâàòü ñ íàñ êîíôåòêó).×òîáû â ïðèìåðå íå áûëî ïóòàíèöû â êîíñîëè ìåæäó òåì, ÷òî ââ¼ë ïîëüçîâàòåëü, èòåì, ÷òî âûâåëà ïðîãðàììà, ñäåëàåì ÷òî-òî íîâåíüêîå: ôàéëîâûé ââîä è âûâîä. Åñòüíåñêîëüêî ñïîñîáîâ ñäåëàòü òàê, ÷òîáû ïðîãðàììà ðàáîòàëà ñ ôàéëàìè.

7

Page 9: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Ïåðåíàïðàâëåíèå ïîòîêîâ

Ïðîñòåéøèé èç íèõ � ïåðåíàïðàâëåíèå ïîòîêîâ ââîäà è âûâîäà â êîíñîëè. Âìåñòî òîãî,÷òîáû ìåíÿòü ÷òî-òî â êîäå, ìû íåìíîãî ïî-äðóãîìó âûçûâàåì ïðîãðàììó.

1 def obrabotka():2 a = input().split()3 a.sort()4 for x in a:5 print(x, end = ’ ’)6 print()7 return len(a) != 08

9 while (obrabotka()):10 continue

Ïåðåä âûïîëíåíèåì ïðîêîììåíòèðóåì êîä.  í¼ì ìû ñîçäàëè ôóíêöèþ, êîòîðàÿ îáðà-áàòûâàåò îäíó ñòðîêó.  Python äëÿ ñîçäàíèÿ ôóíêöèé íàäî íàïèñàòü êëþ÷åâîå ñëîâîdef, äàëåå èìÿ ôóíêöèè, ïàðàìåòðû â êðóãëûõ ñêîáêàõ è äâîåòî÷èå. Äàëåå ñ îòñòó-ïîì â îäèí òàá èä¼ò òåëî ôóíêöèè. Êëþ÷åâîå ñëîâî return óêàçûâàåò íà âîçâðàùàåìîåçíà÷åíèå.Êðîìå ýòîãî, ìû èñïîëüçîâàëè öèêë while, ñèíòàêñèñ êîòîðîãî âïëîíå ëîãè÷åí. Ñëîâîcontinue ïî ñóòè óêàçûâàåò íà ïåðåõîä ê î÷åðåäíîìó âèòêó öèêëà (èòåðàöèè). Åãîñëåäóåò ïèñàòü â îäíîì èç äâóõ ñëó÷àåâ:

� ïðèíóäèòåëüíûé ïåðåõîä íà ñëåäóþùèé âèòîê öèêëà (äàëüíåéøèé êîä â öèêëå íåáóäåò âûïîëíÿòüñÿ íà òåêóùåì âèòêå);

� ïóñòîå òåëî öèêëà.

Òåïåðü ïåðåéä¼ì ê çàïóñêó. Ñíà÷àëà íàäî ñîçäàòü ôàéë, â êîòîðîì áóäåò ñîäåðæàòüñÿâåñü áóäóùèé ââîä:

input.txt

1 Leonardo Donatello Raphael Michaelangelo2 Kraang Shredder Bebop Rocksteady3

4

Ïîòîì ïðîãðàììà âûçûâàåòñÿ ñ äîïîëíèòåëüíûì êëþ÷îì ïåðåíàïðàâëåíèÿ ïîòîêà ââîäà-âûâîäà â êîíöå, ÷òîáû ââîä â ïðîãðàììó ïîñòóïàë èç ôàéëà:

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py < input.txt2 Donatello Leonardo Michaelangelo Raphael3 Bebop Kraang Rocksteady Shredder

Ìîæíî òàêæå ïåðåíàïðàâèòü âûâîä â ôàéë:

8

Page 10: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py < input.txt > output.txt

×òîáû ñ÷èòûâàòü äî êîíöà ôàéëà, ìîæíî ñ÷èòûâàòü ñòðî÷êè ôóíêöèåé input(), ïîêàå¼ ðàçìåð îòëè÷åí îò íóëÿ. Åñòü è äðóãèå ñïîñîáû ýòî ñäåëàòü.

×òåíèå èç ôàéëà â êîäå

Ðàññìîòðèì êîä, êîòîðûé âûïîëíÿåò òî æå ñàìîå, ÷òî è êîä â ïðåäûäóùåì ïðèìåðå,åñëè èñïîëüçîâàòü ðàáîòó ñ ôàéëàìè â ñàìîì êîäå.Èñïîëüçóåì äëÿ ýòîãî ôóíêöèþ îòêðûòèÿ ïîòîêîâ ôàéëîâ open() è âîçìîæíîñòè áèá-ëèîòåêè sys, â êîòîðîé ìîæíî ïåðåíàïðàâèòü ñòàíäàðòíûé ââîä èç ôàéëà è ñòàíäàðò-íûé âûâîä â ôàéë.Ôóíêöèÿ open() îòêðûâàåò ôàéë äëÿ ÷òåíèÿ èëè çàïèñè. Ïåðâûé àðãóìåíò � èìÿôàéëà, âòîðîé � ìîäèôèêàòîð, óêàçûâàþùèé, äëÿ ÷åãî îòêðûâàòü ôàéë ('w' äëÿ write,òî åñòü çàïèñè, 'r' äëÿ read, òî åñòü ÷òåíèÿ).Êðîìå ýòîãî, íîâûé êîä îò ñòàðîãî íè÷åì íå îòëè÷àåòñÿ:

1 import sys2 sys.stdin = open("input.txt", "r")3 sys.stdout = open("output.txt", "w")4

5 def obrabotka():6 a = input().split()7 a.sort()8 for x in a:9 print(x, end = ’ ’)

10 print()11 return len(a) != 012

13 while (obrabotka()):14 continue

input.txt

1 Leonardo Donatello Raphael Michaelangelo2 Kraang Shredder Bebop Rocksteady

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py

Ïîñëå çàïóñêà ïðîãðàììû â ôàéëå output.txt áóäåò ðåçóëüòàò.

output.txt

1 Donatello Leonardo Michaelangelo Raphael2 Bebop Kraang Rocksteady Shredder

9

Page 11: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

1.5 Ââîä ÷èñåë

Òàê êàê ôóíêöèÿ input() âîçâðàùàåò ñòðîêó, à íå ÷èñëî, ñòðîêîâîå çíà÷åíèå íåîá-õîäèìî ïðåîáðàçîâàòü â ÷èñëîâîå ïåðåä òåì, êàê ïðîèçâîäèòü ÷èñëîâûå ìàíèïóëÿöèèñî çíà÷åíèÿìè. Ïðèâåäåíèå ê òèïó äàííûõ â Ïèòîíå îñóùåñòâëÿåòñÿ ñ ïîìîùüþ ðÿäàôóíêöèé, êîòîðûå èìåþò íàãëÿäíûå èìåíà: int() äëÿ ïðèâåäåíèÿ â öåëî÷èñëåííûéòèï äàííûõ, float() � â âåùåñòâåííûé, str() � â ñòðîêîâûé.

1 a, b = input().split(’ ’)2 a = int(a)3 b = int(b)4 res = a + b5 print (res)

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 3 53 8

Äëÿ òîãî, ÷òîáû íå ïðèâîäèòü çíà÷åíèÿ êàæäîé ïåðåìåííîé ê äðóãîìó òèïó äàííûõâðó÷íóþ, èñïîëüçóþò ôóíêöèþ map(), êîòîðàÿ ïðèìåíÿåò çàäàííóþ ôóíêöèþ ê ñïèñêóçíà÷åíèé, êîòîðûé â íàøåì ñëó÷àå áóäåò ðåçóëüòàòîì ïðèìåíåíèÿ split() ê ââîäóinput(). Âûâîä ó ýòîãî êîäà áóäåò òàêîé æå, íî ñàì êîä çàíèìàåò ìåíüøå ñòðîê.

10

Page 12: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

1 a, b = map(int, input().split(’ ’))2 res = a + b3 print (res)

Ðàññìîòðèì ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè map() ñî ñâîåé ôóíêöèåé.  í¼ì ïîëüçîâà-òåëü ââîäèò ÷èñëî â âîñüìåðè÷íîé ñèñòåìå ñ÷èñëåíèÿ, à ïðîãðàììà äîëæíà ïåðåâåñòèåãî â øåñòíàäöàòåðè÷íóþ è âûâåñòè.Ôóíêöèÿ int8() óïðîùàåò èñïîëüçîâàíèå ôóíêöèè int(), êîòîðàÿ â äàííîì ñëó÷àåèñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû ïåðåâåñòè ñ÷èòàííûå äàííûå â âîñüìåðè÷íîå ÷èñëî (äëÿýòîãî ó ôóíêöèè int äîáàâëÿåòñÿ âòîðîé ïàðàìåòð � ñèñòåìà ñ÷èñëåíèÿ ââîäèìîãî÷èñëà).

1 def int8(x):2 return int(x, 8)3

4 a = map(int8, input().split())5 for x in a:6 print(’Octal number %o is hexadecimal number %X’ % (x, x))

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 773 Octal number 77 is hexadecimal number 3F

11

Page 13: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Ãëàâà 2

Èëëþñòðàöèè àëãîðèòìèçàöèè

2.1 Ìàòåìàòèêà è îïåðàòîðû

Îïåðàòîð Îïèñàíèå

() Ñêîáêè (ãðóïïèðîâêà âûðàæåíèÿ) (a * (b + c))

** Âîçâåäåíèå â ñòåïåíü (2**3 → 8)

~ Ïîáèòîâîå îòðèöàíèå

-x Îòðèöàòåëüíîå çíà÷åíèå

*, /, //, % Óìíîæåíèå, äåëåíèå, äåëåíèå íàöåëî, îñòàòîê îò äåëåíèÿ

+, - Ñëîæåíèå, âû÷èòàíèå

<<, >> Ïîáèòîâûé ñäâèã (x = 00000001, x<<2 = 00000100)

& Ïîáèòîâîå È (x = 0110, y = 1100, x & y = 0100)

^ Ïîáèòîâîå Èñêë. ÈËÈ (x = 0110, y = 1100, x^y = 1010)

| Ïîáèòîâîå ÈËÈ (x = 0110, y = 1100, x | y = 1110)

in, not in Âêëþ÷åíèå (x = [1, 5, 7, 8], 7 in x → true)

is, is not Èäåíòèôèêàöèÿ (5 is 7 → false)

<, <=, >, >=, <>, !=, == Ñðàâíåíèå

not x Ëîãè÷åñêîå îòðèöàíèå

and Ëîãè÷åñêîå È

or Ëîãè÷åñêîå ÈËÈ

Âñåì èçâåñòíî, ÷òî àðèôìåòè÷åñêèå îïåðàöèè èìåþò ñâîéñòâî ïîä íàçûâàíèåì �ïðèî-ðèòåò�. Íàïðèìåð, â âûðàæåíèè a+ b ∗ c ñíà÷àëà íàäî ïîñ÷èòàòü ïðîèçâåäåíèå b è c, à

12

Page 14: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

çàòåì óæå ïðèáàâèòü ðåçóëüòàò ê a. ýòîé òàáëèöå îïåðàòîðû ïåðå÷èñëåíû â ïîðÿäêå óáûâàíèÿ ïðèîðèòåòà, çà èñêëþ÷åíè-åì îïåðàòîðîâ âêëþ÷åíèÿ, èäåíòèôèêàöèè è ñðàâíåíèÿ � âñå îíè íà ñàìîì äåëå èìåþòîäèíàêîâûé ïðèîðèòåò.

2.2 Ñóììà N ÷èñåë

Ìû íå çíàåì, ñêîëüêî ÷èñåë ââåä¼ò ïîëüçîâàòåëü, íî âñ¼ ðàâíî ìîæåì ïîñ÷èòàòü èõ ñóì-ìó. Ñóììà ÷èñåë õðàíèòñÿ â ïåðåìåííîé res, êîòîðàÿ äîëæíà îáÿçàòåëüíî áûòü ðàâíîéíóëþ äî íà÷àëà ñóììèðîâàíèÿ. Âî-ïåðâûõ, òàê ìû îáîçíà÷àåì, ÷òî òàêàÿ ïåðåìåííàÿñóùåñòâóåò â íàøåé ïðîãðàììå, à âî-âòîðûõ, ïðèñâàèâàÿ åé çíà÷åíèå íîëü, ìû óâåðåíû,÷òî ðåçóëüòàò ïîäñ÷¼òà íå áóäåò èñïîð÷åí íåèçâåñòíûì çíà÷åíèåì.

1 a = list(map(int, input().split(’ ’)))2 res = 03 for x in a:4 res = res + x5 print(res)

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 3 5 10 5 43 27

 Ïèòîíå åñòü âñòðîåííàÿ ôóíêöèÿ äëÿ ïîäñ÷¼òà ñóììû ÷èñåë â ñïèñêå:

1 a = list(map(int, input().split(’ ’)))2 print(sum(a))

2.3 N!

Àëãîðèòìû âðîäå ïîäñ÷¼òà çíà÷åíèé ñóìì èëè ïðîèçâåäåíèé ïðàâèëüíûõ ïîñëåäîâà-òåëüíîñòåé ìîæíî ñ÷èòàòü äâóìÿ ñïîñîáàìè: ðåêóðñèâíî è èòåðàòèâíî. Åñëè ãîâîðèòüêðàòêî, ðåêóðñèâíûé ìåòîä ïîäðàçóìåâàåò, ÷òî â ôóíêöèè, êîòîðàÿ âîçâðàùàåò îòâåò,âûçûâàåòñÿ ýòà æå ñàìàÿ ôóíêöèÿ îò äðóãèõ ïàðàìåòðîâ, ÷òîáû ïîäñ÷èòàòü íåîáõî-äèìûå ïðîìåæóòî÷íûå çíà÷åíèÿ, à â èòåðàòèâíîì ìåòîäå âåñü ïîäñ÷¼ò âûïîëíÿþòñÿïîñëåäîâàòåëüíûìè êîìàíäàìè â îäíîì öèêëå.Äëÿ èëëþñòðàöèè ïðèìåðà íèæå ïðèâåäåíî äâà êîäà, êîòîðûå ñ÷èòàþò è âûâîäÿò ôàê-òîðèàë ââåä¼ííîãî ÷èñëà. Ôàêòîðèàë ÷èñëà N (N !) � ýòî ìàòåìàòè÷åñêàÿ ôóíêöèÿ,êîòîðàÿ äëÿ ëþáîãî íåîòðèöàòåëüíîãî öåëîãî ÷èñëà N ðàâíà ïðîèçâåäåíèþ âñåõ ÷èñåëîò 1 äî ýòîãî ÷èñëà âêëþ÷èòåëüíî. Ôàêòîðèàë ÷èñëà 0 ïðèíÿòî ñ÷èòàòü åäèíèöåé.

13

Page 15: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

1 def fact(n):2 if(n == 0):3 return 14 return n * fact(n−1)5

6 a = int(input())7 print(fact(a))

1 def fact(n):2 res = 13 for i in range(1, n+1):4 res *= i5 return res6

7 a = int(input())8 print(fact(a))

Âûïîëíåíèå ïðîãðàììû:

1 > python program.py2 53 120

Òî÷íî òàê æå, êàê â ñóììèðîâàíèè, ïåðåìåííîé res çäåñü çàðàíåå ïðèñâîåíî çíà÷å-íèå, íî òàê êàê çäåñü ñ÷èòàåòñÿ ïðîèçâåäåíèå ÷èñåë, à íå ñóììà, ïåðåìåííàÿ res ðàâíàåäèíèöå. Ïèòîíå åñòü âñòðîåííàÿ ôóíêöèÿ äëÿ ïîäñ÷¼òà ôàêòîðèàëà ÷èñëà:

1 import math2 a = int(input())3 print(math.factorial(a))

2.4 Ôèáîíà÷÷è

Ïîñëåäîâàòåëüíîñòü Ôèáîíà÷÷è � ýòî ïîñëåäîâàòåëüíîñòü ÷èñåë, çàäàííàÿ ñëåäóþùåéðåêóððåíòíîé ôîðìóëîé:

aN =

0, N = 0

1, N = 1

aN−1 + aN−2, èíà÷å

×èñëà Ôèáîíà÷÷è òàêæå ìîæíî íàõîäèòü èòåðàòèâíûì è ðåêóðñèâíûì ìåòîäîì, íîïðîñòî ðåêóðñèÿ â ýòîì ñëó÷àå áóäåò âûïîëíÿòü îãðîìíîå êîëè÷åñòâî ïîâòîðÿþùèõñÿîïåðàöèé. ×òîáû èçáåæàòü ýòîãî, èñïîëüçóþò çàïîìèíàíèå çíà÷åíèé.  ïðèìåðå íèæå

14

Page 16: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

ñïèñîê was õðàíèò â ñåáå çíà÷åíèÿ ðàíåå ïîäñ÷èòàííûõ ÷èñåë Ôèáîíà÷÷è, è ïðè çà-ïðîñå íà ÷èñëî Ôèáîíà÷÷è ñ íîìåðîì n îí ëèáî èñïîëüçóåò çàïèñàííîå â n-ì ýëåìåíòåñïèñêà çíà÷åíèå, ëèáî ñ÷èòàåò åãî, åñëè îíî åù¼ íå áûëî ïîäñ÷èòàíî (åñëè was[n] ==

-1, çíà÷èò, ýòî çíà÷åíèå íå ïîäñ÷èòàíî, ïîòîìó ÷òî ÷èñëî Ôèáîíà÷÷è íå ìîæåò áûòüîòðèöàòåëüíûì).Òàêæå ñòîèò çàìåòèòü, ÷òî äëÿ òîãî, ÷òîáû ñîçäàòü ñïèñîê êàêîé-ëèáî ôèêñèðîâàí-íîé äëèíû, çàïîëíåííûé îïðåäåë¼ííûìè îäèíàêîâûìè çíà÷åíèÿìè, èñïîëüçóåòñÿ ïðè¼ìêîíêàòåíàöèè (ñêëåèâàíèÿ) ìíîæåñòâà ñïèñêîâ.

1 was = [−1] * 5012 def fib(n):3 if(was[n] != −1):4 return was[n]5 if(n == 0):6 was[n] = 07 elif(n == 1):8 was[n] = 19 else:

10 was[n] = fib(n−1) + fib(n−2)11 return was[n]12

13 n = int(input())14 print(fib(n))

 ïèòîíå ãëóáèíà ðåêóðñèè � êîëè÷åñòâî ïîñëåäîâàòåëüíûõ ðåêóðñèâíûõ âûçîâîâ ôóíê-öèè � îãðàíè÷åíà âíóòðåííåé ïåðåìåííîé. Óâåëè÷èòü ãëóáèíó ðåêóðñèè ìîæíî âðó÷-íóþ êîìàíäîé sys.setrecursionlimit(), íî åñëè ñäåëàòü å¼ çíà÷åíèå ñëèøêîì áîëü-øèì è ñîçäàòü ðåêóðñèþ ñëèøêîì áîëüøîé ãëóáèíû, ïðîãðàììà çàïîëíèò âñþ äîñòóï-íóþ åé ïàìÿòü è àâàðèéíî çàâåðøèòñÿ.

1 import sys2 sys.setrecursionlimit(10001)3 was = [−1] * 100014 def fib(n):5 if(was[n] != −1):6 return was[n]7 if(n == 0):8 was[n] = 09 elif(n == 1):

10 was[n] = 111 else:12 was[n] = fib(n−1) + fib(n−2)13 return was[n]14

15 n = int(input())16 print(fib(n))

15

Page 17: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Îáðàòèòå âíèìàíèå íà óñëîâíóþ êîíñòðóêöèþ if - elif - else. Îíà ñîîòâåñòâóåòóòâåðæäåíèÿì â ðóññêîì ÿçûêå �åñëè óñëîâèå� � �èíà÷å, åñëè óñëîâèå� � �èíà÷å�, òîåñòü äåéñòâèå âíóòðè elif âûïîëíèòñÿ, òîëüêî åñëè íå âûïîëíèëîñü óñëîâèå ó if èâñåõ âûøåñòîÿùèõ elif è âûïîëíèëîñü óñëîâèå ó elif.Ïðåäûäóùèå ïðèìåðû êîäà òàêæå ãîäÿòñÿ äëÿ òîãî, ÷òîáû ïîñ÷èòàòü è âûâåñòè âñå÷èñëà Ôèáîíà÷÷è äî n-ãî âêëþ÷èòåëüíî, íî åñëè òðåáóåòñÿ ïðîñòî íàéòè n-å ÷èñëîÔèáîíà÷÷è, ìîæíî ïðîñòî ñëåäîâàòü ðåêóððåíòíîé ôîðìóëå â èòåðàòèâíîì âèäå.Äëÿ ýòîãî â êîäå íèæå èñïîëüçóåòñÿ ñïåöèàëüíàÿ ôóíêöèÿ range(). Ïðè âûçîâå range()ñ äâóìÿ öåëî÷èñëåííûìè ïàðàìåòðàìè, ñêàæåì, a è b, ãäå a íå ïðåâûøàåò b, îíà âåðí¼òñïèñîê, â êîòîðîì â âîçðàñòàþùåì ïîðÿäêå áóäóò çàïèñàíû âñå ÷èñëà îò a äî b. Ïðèâûçîâå ñ îäíèì ïàðàìåòðîì b îíà âåðí¼ò ñïèñîê ñ ÷èñëàìè îò 0 äî b.Ôóíêöèÿ range() ÷àùå âñåãî èñïîëüçóåòñÿ â öèêëàõ for äëÿ òîãî, ÷òîáû ïåðåìåííàÿ-ñ÷¼ò÷èê ìåíÿëàñü îïðåäåë¼ííûì îáðàçîì â îïðåäåë¼ííûõ ðàìêàõ.

1 def fib(n):2 a = 03 b = 14 for i in range(0, n−1):5 a, b = b, a+b6 return b7

8 n = int(input())9 print(fib(n))

10

Çàìåòüòå èíòåðåñíûé ïðè¼ì â ïðèñâàèâàíèè, êîòîðûé èñïîëüçóåòñÿ çäåñü, ÷òîáû ñîêðà-òèòü êîëè÷åñòâî ñòðîê êîäà è óìåíüøèòü åãî ñëîæíîñòü: êîðòåæó (äâóì ïåðåìåííûì÷åðåç çàïÿòóþ, ïî ñóòè - ñïèñîê) ïðèñâàèâàåòñÿ êîðòåæ, ÷òî çíà÷èò, ïåðâîìó ýëåìåí-òó ëåâîãî êîðòåæà ïðèñâàèâàåòñÿ çíà÷åíèå ïåðâîãî ýëåìåíòà ïðàâîãî êîðòåæà, âòîðîìóýëåìåíòó � çíà÷åíèå âòîðîãî è òàê äàëåå. Ñàìîå èíòåðåñíîå â ýòîì òî, ÷òî ïðèñâàèâàíèåïðîèñõîäèò ñëåäóþùèì îáðàçîì: ñíà÷àëà ïîäñ÷èòûâàþòñÿ çíà÷åíèÿ ïðàâîãî êîðòåæà,à òîëüêî çàòåì îíè ïðèñâàèâàþòñÿ ýëåìåíòàì ëåâîãî, ïîýòîìó åñëè ìû â ïðèñâàèâàíèèìåíÿåì çíà÷åíèå ïåðåìåííîé (â ïðèìåðå âûøå � îáåèõ, a è b), òî èì ïðèñâàèâàþòñÿçíà÷åíèÿ, âû÷èñëåííûå ñ ó÷¼òîì ñòàðûõ çíà÷åíèé ýòèõ ïåðåìåííûõ. Íàïðèìåð, åñëèíàïèñàòü ñòðî÷êó a, b = b, a, îíè ïîìåíÿþòñÿ çíà÷åíèÿìè, íî åñëè íàïèñàòü ñíà÷àëàa = b, à ïîòîì b = a, òî ïðè âûïîëíåíèè ïåðâîãî äåéñòâèÿ çíà÷åíèå a áóäåò íàâñåãäàïîòåðÿíî, è â ðåçóëüòàòå ó íàñ áóäóò äâå ïåðåìåííûå ñî ñòàðûìè çíà÷åíèÿìè b.

2.5 Òÿæ¼ëûé, ìåäëåííûé Ïèòîí

Äëÿ ïðîãðàììèðîâàíèÿ Ïèòîí � â ïåðâóþ î÷åðåäü î÷åíü óäîáíûé ÿçûê, êîòîðûé íåòðåáóåò êó÷è ëèøíåãî êîäà. Ê ñîæàëåíèþ, çà ñâîþ ëàêîíè÷íîñòü Ïèòîí ïëàòèò ñêî-ðîñòüþ èñïîëíåíèÿ è çàíèìàåìîé ïàìÿòüþ. Îá ýòîì ñëåäóåò ïîìíèòü â îëèìïèàäíîìïðîãðàììèðîâàíèè, êîãäà íà ñ÷åòó êàæäàÿ ìèëëèñåêóíäà è êàæäûé áàéò.

16

Page 18: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Ãëàâà 3

Ñòðóêòóðû äàííûõ

3.1 Êîðòåæè è ñïèñêè

È òî, è äðóãîå ÿâëÿåòñÿ ñòðóêòóðîé äëÿ õðàíåíèÿ ïîñëåäîâàòåëüíîñòè çíà÷åíèé, íîèõ íå ñëåäóåò ïóòàòü ìåæäó ñîáîé.Ñïèñêè îáúÿâëÿþòñÿ ñ ïîìîùüþ êâàäðàòíûõ ñêîáîê [a, b], ëþáàÿ ïîñëåäîâàòåëüíîñòüê ñïèñêó ïðèâîäèòñÿ ôóíêöèåé list(). Êàê ïðàâèëî, èõ èñïîëüçóþò äëÿ õðàíåíèÿ îä-íîòèïíûõ äàííûõ (íî ýòî íå îáÿçàòåëüíî). Ê ýëåìåíòàì ñïèñêà ìîæíî îáðàùàòüñÿ ïîèíäåêñó, è ðàáîòàòü ñ íèìè, êàê ñ îáû÷íûìè ïåðåìåííûìè.Êîðòåæè îáúÿâëÿþòñÿ ñ ïîìîùüþ êðóãëûõ ñêîáîê (a, b), ëþáàÿ ïîñëåäîâàòåëüíîñòü êêîðòåæó ïðèâîäèòñÿ ôóíêöèåé tuple(). Êàê ïðàâèëî, êîðòåæè èñïîëüçóþò äëÿ õðàíå-íèÿ ðàçëè÷íûõ ïàðàìåòðîâ (âåðîÿòíî, ðàçëè÷íûõ òèïîâ äàííûõ). Ê ýëåìåíòàì êîðòåæàìîæíî îáðàùàòüñÿ ïî èíäåêñó, íî ìåíÿòü òàêèì îáðàçîì çíà÷åíèÿ â êîðòåæå íåëüçÿ. îñòàëüíîì, ðàçëè÷èÿ ìåæäó ñïèñêîì è êîðòåæåì î÷åíü ðàçìûòû: ê íèì ïðèìåíÿþò-ñÿ îäíè è òå æå ôóíêöèè len() (êîëè÷åñòâî ýëåìåíòîâ), cmp() (ïðîâåðêà äâóõ ñïèñêî-â/êîðòåæåé íà ðàâåíñòâî), max() è min(). Íî äëÿ ñïèñêîâ òàêæå ðåàëèçîâàíû ìåòîäû,òàêèå êàê append(), count(), extend() è ïðî÷èå. Ïîäðîáíåå î ñïèñêàõ è êîðòåæàõ ìîæ-íî ïðî÷èòàòü â äîêóìåíòàöèè.

3.2 Ñòåê

Ñòðóêòóðà äàííûõ, ïîçâîëÿþùàÿ îñóùåñòâëÿòü ñëåäóþùèå îïåðàöèè ñ ìíîæåñòâîì:

� Äîáàâëåíèå ýëåìåíòà â ìíîæåñòâî;

� Ïîëó÷åíèå ïîñëåäíåãî äîáàâëåííîãî ýëåìåíòà;

� Óäàëåíèå ïîñëåäíåãî äîáàâëåííîãî ýëåìåíòà.

 ðåàëüíîì ìèðå îòëè÷íûì ïðèìåðîì ñòåêà ÿâëÿåòñÿ ñòîïêà (êíèã, íàïðèìåð): ìû ìî-æåì äîáàâëÿòü èëè óäàëÿòü ýëåìåíòû òîëüêî ñâåðõó, è âèäèì òîëüêî âåðõíèé ýëåìåíò.Ñòåê âûçîâîâ òîæå íàçâàí òàê íå ñëó÷àéíî.

17

Page 19: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

 Python ìîæíî â êà÷åñòâå ñòåêà èñïîëüçîâàòü ñïèñîê: ìåòîä append(a) äîáàâëÿåòýëåìåíò a â ñïèñîê, ìåòîä pop() óäàëÿåò ïîñëåäíèé ýëåìåíò.Ðàññìîòðèì ñëåäóþùóþ çàäà÷ó: â ñòåêå äîáàâëÿþòñÿ (çàïðîñ + ÷èñëî) è óäàëÿþòñÿ(çàïðîñ-) ÷èñëà, à òàêæå äàþòñÿ çàïðîñû (=) íà âûâîä ìèíèìàëüíîãî ÷èñëà íà âñ¼ììíîæåñòâå. Ââîä çàêàí÷èâàåòñÿ ïóñòîé ñòðîêîé.Âìåñòî òîãî, ÷òîáû êàæäûé ðàç èñêàòü ìèíèìóì, ñòîèò çàìåòèòü äâå âåùè: íîâîå ÷èñëîâ ñòåêå ëèáî íå èçìåíèò ìèíèìóì, åñëè îíî áîëüøå èëè ðàâíî åìó, ëèáî èçìåíèò, åñëèîíî ìåíüøå ìèíèìóìà; ïðè óäàëåíèè ÷èñëà, êàêèå áû èçìåíåíèÿ îíî íå ïðèâíîñèëî,îíè óõîäÿò âìåñòå ñ íèì, è ïîëîæåíèå îòêàòûâàåòñÿ ê áîëåå ñòàðîé âåðñèè.Òàêèì îáðàçîì, íàðÿäó ñî ñòåêîì ÷èñåë ìîæíî ñîçäàòü ñòåê ìèíèìóìîâ, ñ êîòîðûìáóäóò ïðîèñõîäèòü òå æå îïåðàöèè, ÷òî è ñî ñòåêîì ÷èñåë, òîëüêî äëÿ êàæäîãî äî-áàâëåííîãî ÷èñëà â ñòåê ìèíèìóìîâ áóäåò äîáàâëÿòüñÿ òåêóùèé ìèíèìóì: åñëè ÷èñëîáîëüøå ïðåäûäóùåãî ìèíèìóìà, òî áóäåò äîáàâëåí ñòàðûé ìèíèìóì, èíà÷å � íîâîå÷èñëî. Ïðè óäàëåíèè ÷èñëà óäàëèòñÿ è ñîîòâåñòâóþùèé åìó ìèíèìóì.Ïðè ýòîì, õðàíåíèå ñòåêà ÷èñåë ñòàíîâèòñÿ ëèøíèì.Âîò òàê ýòî ðåøåíèå âûãëÿäèò â êîäå:

1 st = []2 while(1 == 1):3 inf = input()4 if(len(inf)<1):5 break6 if(len(inf)>1):7 inf, n = inf.split()8 if(len(st)):9 n = min(int(n), st[−1])

10 else:11 n = int(n)12 st.append(n)13 elif(inf==’−’):14 st.pop()15 else:16 print(st[−1])

3.3 Î÷åðåäü

Ñòðóêòóðà äàííûõ, ïîçâîëÿþùàÿ îñóùåñòâëÿòü ñëåäóþùèå îïåðàöèè ñ ìíîæåñòâîì:

� Äîáàâëåíèå ýëåìåíòà â ìíîæåñòâî;

� Ïîëó÷åíèå ïåðâîãî äîáàâëåííîãî ýëåìåíòà;

� Óäàëåíèå ïåðâîãî äîáàâëåííîãî ýëåìåíòà.

Îòëè÷íûé æèâîé ïðèìåð î÷åðåäè â ðåàëüíîì ìèðå � î÷åðåäü. Ýëåìåíòû âñòàþò â îäèíêîíåö ìíîæåñòâà è æäóò, êîãäà îíè ñòàíóò ïåðâûìè, ÷òîáû óéòè èç íåãî.

18

Page 20: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Òåîðåòè÷åñêè, î÷åðåäü òàêæå ìîæíî ðåàëèçîâàòü ÷åðåç ñïèñêè, íî óäàëåíèå ýëåìåíòîâèç íà÷àëà ñïèñêà (èëè äîáàâëåíèå ýëåìåíòà â íà÷àëî ñïèñêà) � ýòî ñëèøêîì äîëãàÿîïåðàöèÿ ïî ñðàâíåíèþ ñ äîáàâëåíèåì (è óäàëåíèåì) ýëåìåíòîâ èç êîíöà. Ïîýòîìó âÏèòîíå â êà÷åñòâå î÷åðåäè èñïîëüçóþò âñòðîåííóþ ñòðóêòóðó äàííûõ äåê èç áèáëèî-òåêè collections.

3.4 Äåê (î÷åðåäü î äâóõ êîíöàõ)

Ñòðóêòóðà äàííûõ, ïîçâîëÿþùàÿ îñóùåñòâëÿòü ñëåäóþùèå îïåðàöèè ñ ìíîæåñòâîì:

� Äîáàâëåíèå ýëåìåíòà â �íà÷àëî� èëè �êîíåö� ìíîæåñòâà;

� Ïîëó÷åíèå îäíîãî èç äâóõ �êðàéíèõ� ýëåìåíòîâ;

� Óäàëåíèå îäíîãî èç äâóõ �êðàéíèõ� ýëåìåíòîâ.

Ðàáîòàåò ïîäîáíî î÷åðåäè, íî äîáàâëÿòü è óäàëÿòü ýëåìåíòû ìîæíî ñ îáîèõ êîíöîâ.Ñòàíäàðòíàÿ èìïëåìåíòàöèÿ äåêà â Ïèòîíå ñîäåðæèòñÿ â áèáëèîòåêå collections.Èñïîëüçóåò ñòàíäàðòíûå ìåòîäû append(a) è appendleft(a) äëÿ äîáàâëåíèÿ ýëåìåíòàa â äåê ñ êîíöà èëè ñ íà÷àëà (à òàêæå extend() è extendleft äëÿ äîáàâëåíèÿ ïîñëå-äîâàòåëüíîñòè ýëåìåíòîâ, ïðè÷¼ì ïîñëåäíèé ìåòîä �ïåðåâîðà÷èâàåò� äîáàâëÿåìóþ ïî-ñëåäîâàòåëüíîñòü), è pop() è popleft() äëÿ óäàëåíèÿ êðàéíèõ ýëåìåíòîâ. Åù¼ áîëüøåìåòîäîâ è ïðèìåíåíèé äåêà åñòü â äîêóìåíòàöèè.Âîò ïðèìåð ïðèìåíåíèÿ äåêà â êà÷åñòâå î÷åðåäè â ïðîñòîé çàäà÷å ïðî ýìóëÿöèþ î÷åðå-äè ñ çàïðîñàìè in n íà äîáàâëåíèÿ ÷èñëà n â î÷åðåäü, out íà âûâîä è óäàëåíèå ïåðâîãî÷èñëà èç î÷åðåäè, è end íà ïðåêðàùåíèå ââîäà:

1 from collections import deque2 queue = deque()3 while(1 == 1):4 query = input()5 if(query == ’end’):6 break7 if(query == ’out’):8 print(queue.popleft())9 else:

10 query, n = query.split()11 queue.append(n)

3.5 Ñåò (ìíîæåñòâî óíèêàëüíûõ ýëåìåíòîâ)

Ñòðóêòóðà äàííûõ â Python, êîòîðàÿ ïîääåðæèâàåò îïåðàöèè äîáàâëåíèÿ, óäàëåíèÿ èïîèñêà ýëåìåíòà âî ìíîæåñòâå. Ñåò õðàíèò òîëüêî óíèêàëüíûå ýëåìåíòû, òî åñòü â ñåòåíå ìîæåò áûòü äâóõ îäèíàêîâûõ ýëåìåíòîâ. Ïðè ïîïûòêå äîáàâèòü â ñåò íåóíèêàëüíûéýëåìåíò íè÷åãî íå èçìåíèòñÿ.

19

Page 21: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Ñåòû â Ïèòîíå ÿâëÿþòñÿ àíàëîãîì ñòðóêòóðû äàííûõ èç C++ unordered_set, òàê êàêîáà õðàíÿò ýëåìåíòû íåóïîðÿäî÷åííî è èñïîëüçóþò äëÿ áûñòðîé àäðåñàöèè äàííûõõýøè.Íåêîòîðûå ìåòîäû ñåòîâ:

� add(a) � äîáàâëåíèå ýëåìåíòà a âî ìíîæåñòâî;

� remove(a), discard(a) � óäàëÿåò ýëåìåíò èç ìíîæåñòâà; âî âòîðîì ñëó÷àå, â îò-ëè÷èå îò ïåðâîãî, ïðîèñõîäèò òàêæå ïðîâåðêà íà âõîæäåíèå ýëåìåíòà â ñåò ïåðåäóäàëåíèåì;

� first è second � îáðàùåíèå ê êëþ÷ó è çíà÷åíèþ ýëåìåíòà, ñîîòâåòñòâåííî (òàêêàê êàæäûé ýëåìåíò ìàïà � ýòî ïàðà, îáðàùåíèå ê íåìó ïðîèñõîäèò êàê â ïàðå).

� Ê ñåòàì ïðèìåíèìû îïåðàòîðû ïðîâåðêè íà âõîæäåíèå âî ìíîæåñòâî in, not in,à òàêæå îïåðàöèè ñî ìíîæåñòâàìè, òàêèå êàê îáúåäèíåíèå, ïåðåñå÷åíèå è èõ ïðî-èçâîäíûå (ñì. äîêóìåíòàöèþ).

Äëÿ ñîçäàíèÿ ñåòà èñïîëüçóåòñÿ êîíñòðóêòîð set(), à â ñëó÷àå ñîçäàíèÿ íåïóñòûõ ñåòîâòàêæå ìîæíî èñïîëüçîâàòü ôèãóðíûå ñêîáêè {}.Ïðèìåð çàäà÷è äëÿ èñïîëüçîâàíèÿ ñåòîâ: íà ââîä ïîäàþòñÿ ñòðîêè, è äëÿ êàæäîé ñòðîêèíàäî ñêàçàòü, áûëà ëè îíà äàíà ðàíåå èëè íåò:

1 s = set()2 while(1 == 1):3 string = input()4 if(len(string) < 1):5 break6 if(string in s):7 print(’YES’)8 else:9 print(’NO’)

10 s.add(string)

Åù¼ îäíà ïðîñòåéøàÿ çàäà÷à � èñïîëüçîâàíèå ñâîéñòâà ñåòà äëÿ íàõîæäåíèÿ êîëè÷å-ñòâà óíèêàëüíûõ ýëåìåíòîâ â ïîñëåäîâàòåëüíîñòè:

1 l = list(map(int, input().split()))2 s = set(l)3 print(len(s))

3.6 Ñëîâàðü (àññîöèàòèâíûé ìàññèâ)

Ñòðóêòóðà äàííûõ â Ïèòîíå, êîòîðàÿ ïîçâîëÿåò àññîöèèðîâàòü íåêîòîðûé êëþ÷ ñ íåêî-òîðûì çíà÷åíèåì, è îáðàùàòüñÿ ê çíà÷åíèþ ïî êëþ÷ó, êàê ïî èíäåêñó ìàññèâà.Ñëîâàðü â Ïèòîíå ìîæíî ñîçäàòü ñ ïîìîùüþ êîíñòðóêòîðà dict() èëè ôèãóðíûõ ñêî-áîê {}.

20

Page 22: Ìåòîäè÷êà ïî Python 3 (v1.31)acm.petrsu.ru/files/article/13/python_r314_tl.pdf · 1 > python program.py 2 Hello, World! 1 > py 3 program.py 2 Hello, World! 1.2 Óñëîâíûå

Íåêîòîðûå ôóíêöèè/ìåòîäû/îïåðàòîðû äëÿ ðàáîòû ñî ñëîâàðÿìè:

� [a] � îáðàùåíèå ê ýëåìåíòó ñ êëþ÷îì a, íî íå äîáàâëÿåò çíà÷åíèÿ ïî óìîë-÷àíèþ, åñëè òàêîãî ýëåìåíòà íå ñóùåñòâîâàëî;

� in, not it � ïðîâåðÿåò êëþ÷ íà âõîæäåíèå âî ìíîæåñòâî;

� del d[a] � óäàëÿåò ýëåìåíò ñ êëþ÷îì a èç ìíîæåñòâà d;

� keys(), values() � âîçâðàùàþò ïîñëåäîâàòåëüíîñòè (íî íå ñïèñêè!) âñåõ êëþ-÷åé è âñåõ çíà÷åíèé â ñëîâàðå, ñîîòâåòñòâåííî.

(Ñì. äîêóìåíòàöèþ)Âñïîìíèì, ÷òî ñîðòèðîâêà ïîäñ÷¼òîì çàêëþ÷àåòñÿ â ïîäñ÷¼òå êîëè÷åñòâà âõîæäåíèéýëåìåíòîâ â ìíîæåñòâî. Êàê ïðàâèëî, îíà ïðèìåíÿåòñÿ â ñëó÷àÿõ, êîãäà ïðè áîëüøîìêîëè÷åñòâå ýëåìåíòîâ êîëè÷åñòâî ðàçëè÷íûõ ýëåìåíòîâ ìàëî. Åñëè äèàïàçîí çíà÷åíèéíåâåëèê, ìîæíî èñïîëüçîâàòü äëÿ õðàíåíèÿ êîëè÷åñòâ ýëåìåíòîâ ìàññèâ, íî åñëè çíà-÷åíèÿ ìîãóò áûòü êàêèå óãîäíî, íî ãàðàíòèðîâàííî, ÷òî ðàçëè÷íûõ ñðåäè íèõ ìàëî,çàäà÷ó î ñîðòèðîâêå òàêîãî ìíîæåñòâà ÷èñåë ìîæíî ðåøèòü ñ ïîìîùüþ ñëîâàðÿ.

1 n = list(map(int, input().split()))2 d = {}3 for x in n:4 if(x not in d):5 d[x] = 16 else:7 d[x] += 18 for x in d:9 for i in range(d[x]):

10 print(x, end = ’ ’)

21