Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PythonΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 2

Автор Π ΠΎΠΌΠ°Π½ Π‘ΡƒΠ·ΠΈ

else:

 c = b

Π­Ρ‚ΠΎΡ‚ кусок ΠΊΠΎΠ΄Π° Π½Π° Python ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятСн ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ, ΠΊΡ‚ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚, Ρ‡Ρ‚ΠΎ if по–английски Π·Π½Π°Ρ‡ΠΈΡ‚ «Ссли», Π° else β€” Β«ΠΈΠ½Π°Ρ‡Π΅Β». ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ вСтвлСния ΠΈΠΌΠ΅Π΅Ρ‚ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π΄Π²Π΅ части, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ с отступом Π²ΠΏΡ€Π°Π²ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° вСтвлСния. Π‘ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ случай β€” ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±ΠΎΡ€Π° β€” ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ синтаксиса (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вычислСния Π·Π½Π°ΠΊΠ° числа):

if a < 0:

 s = -1

elif a == 0:

 s = 0

else:

 s = 1

Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ elif β€” это сокращСнный else if. Π‘Π΅Π· сокращСния ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ вСтвлСния:

if a < 0:

 s = -1

else:

 if a == 0:

  s = 0

 else:

  s = 1

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° print, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if–else β€” составной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

Π¦ΠΈΠΊΠ»Ρ‹

Π’Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ алгоритмичСской конструкциСй являСтся Ρ†ΠΈΠΊΠ». Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ дСйствия. Π’ Python ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π° Π²ΠΈΠ΄Π° Ρ†ΠΈΠΊΠ»ΠΎΠ²: Ρ†ΠΈΠΊΠ» ПОКА (выполняСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСйствиС) ΠΈ Ρ†ΠΈΠΊΠ» Π”Π›Π― (всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ). Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ» ПОКА Π½Π° Python:

s = "abcdefghijklmnop"

while s != "":

 print s

 s = s[1: -1]

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ while Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python: Β«ΠΏΠΎΠΊΠ° Π²Π΅Ρ€Π½ΠΎ условиС Ρ†ΠΈΠΊΠ»Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π°Β». Π’ языкС Python Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° выдСляСтся отступом. КаТдоС исполнСниС Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ убираСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ послСдний символ строки Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ останСтся пустая строка.

Для большСй гибкости ΠΏΡ€ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ break (ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ) ΠΈ continue (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ позволяСт ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ», Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ», пСрСйдя ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ (Ссли, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, выполняСтся условиС Ρ†ΠΈΠΊΠ»Π°).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ строки ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π΅, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π»ΠΈΠ½Π° большС 5:

f = open("file.txt", "r")

while 1:

 l = f.readline()

 if not l:

  break

 if len(l) > 5:

  print l,

 f.close()

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ бСсконСчный Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСрываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° пустой строки (l), Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.

Π’ языкС Python логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСсСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: Π½ΡƒΠ»ΠΈ, пустыС строки ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ None ΠΈ логичСский Π»ΠΈΡ‚Π΅Ρ€Π°Π» False ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «лоТь», Π° ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «истина». Для обозначСния истины ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 1 ΠΈΠ»ΠΈ True.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

Π›ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ True ΠΈ False для обозначСния логичСских Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ появились Π² Python 2.3. 

Π¦ΠΈΠΊΠ» Π”Π›Π― выполняСт Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ выводится Ρ‚Π°Π±Π»ΠΈΡ†Π° умноТСния:

for i in range(1, 10):

 for j in range(1, 10):

  print "%2i" % (i*j),

 print

Π—Π΄Π΅ΡΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ for ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ. Ѐункция range() ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ список Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈΠ· ΠΏΠΎΠ»ΡƒΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° [1, 10). ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ счСтчик Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· этого списка. ΠŸΠΎΠ»ΡƒΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ общСприняты Π² Python. БчитаСтся, Ρ‡Ρ‚ΠΎ ΠΈΡ… использованиС Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ мСньшС программистских ошибок. НапримСр, range(len(s)) ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ список индСксов для списка s (Π² Pythonβ€“ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0). Для красивого Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ умноТСния ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° опСрация форматирования % (для Ρ†Π΅Π»Ρ‹Ρ… чисСл Ρ‚ΠΎΡ‚ ΠΆΠ΅ символ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обозначСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ взятия остатка ΠΎΡ‚ дСлСния). Π‘Ρ‚Ρ€ΠΎΠΊΠ° форматирования (задаСтся слСва) строится ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ строка форматирования для printf ΠΈΠ· C.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ собствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ двумя способами: с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° def ΠΈΠ»ΠΈ прямо Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, посрСдством lambda. Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ (Π΄Π° ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π° с функциями) Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π² Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Python, Π° здСсь слСдуСт привСсти ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

def cena(rub, kop=0):

 return "%i Ρ€ΡƒΠ±. %i ΠΊΠΎΠΏ." % (rub, kop)


print cena(8, 50)

print cena(7)

print cena(rub=23, kop=70)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° функция Π΄Π²ΡƒΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” 0). Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π° этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΆΠ΅ нСсколько. Π‘Ρ‚ΠΎΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сначала Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ΄Ρ‚ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅. АргумСнты со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ послС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Из Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ , Π½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ПослС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° def имя cena оказываСтся связанным с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π’ соврСмСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° управлСния происходит Π½Π΅ всСгда Ρ‚Π°ΠΊ Π³Π»Π°Π΄ΠΊΠΎ, ΠΊΠ°ΠΊ Π² описанных Π²Ρ‹ΡˆΠ΅ конструкциях. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ особых ситуаций (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° чтСния ΠΈΠ· Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°) примСняСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ синтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° try–except ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ:

try:

 res = int(open('a.txt').read())/int(open('c.txt').read())

 print res

except IOError:

 print "Ошибка ввода–вывода"

except ZeroDivisionError:

 print "Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0"

except KeyboardInterrupt:

 print "ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹"

except:

 print "Ошибка"

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ бСрутся числа ΠΈΠ· Π΄Π²ΡƒΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ дСлятся ΠΎΠ΄Π½ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этих Π½Π΅Ρ…ΠΈΡ‚Ρ€Ρ‹Ρ… дСйствий ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ нСсколько ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ Π² частях except (здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ стандартныС встроСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Python). ПослСдняя Ρ‡Π°ΡΡ‚ΡŒ except Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠΉΠΌΠ°Π½Ρ‹ Π²Ρ‹ΡˆΠ΅. НапримСр, Ссли хотя Π±Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² находится нСчисловоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, функция int() Π²ΠΎΠ·Π±ΡƒΠ΄ΠΈΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ValueError. Его–то ΠΈ смоТСт ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ послСдняя Ρ‡Π°ΡΡ‚ΡŒ except. РазумССтся, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ части try Π² случаС возникновСния ошибки ΡƒΠΆΠ΅ Π½Π΅ продолТаСтся послС выполнСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· частСй except.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования, Π² Python ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ слуТат для упрощСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Записывая ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try–except, программист ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ: Β«ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ, Π° Ссли сорвСтся β€” выполнится ΠΊΠΎΠ΄ Π² exceptΒ». ОсобСнно часто это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ получаСтся ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈΠ· отобраТСния:

try:

 value = dict[key]

except:

 value = default_value

ВмСсто

if dict.has_key(key):

 value = dict[key]

else:

 value = default_value

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠΆΠ΅ нСсколько ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ ΠΈΠ΄ΠΈΠΎΠΌΡ‹ языка Python ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΡƒΡ… этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°: Π² соврСмСнном Python Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ value = dict.get(key, default_value).

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΈ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для этого слуТит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ raise. Π—Π°ΠΎΠ΄Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ каноничСский способ опрСдСлСния собствСнного ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

class MyError(Exception):

 pass

try:

 ...

 raise MyError, "my error 1"

 ...

except MyError, x:

 print "Ошибка:", x

ΠšΡΡ‚Π°Ρ‚ΠΈ, всС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ выстроСны Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ классов, поэтому ZeroDivisionError ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΉΠΌΠ°Π½Π° ΠΊΠ°ΠΊ ArithmeticError, Ссли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ except Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅.

Для ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ примСняСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ assert. Он Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ AssertionError, Ссли Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π² Π½Π΅ΠΌ условиС Π½Π΅Π²Π΅Ρ€Π½ΠΎ. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для самопровСрки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠ½ Π½Π΅ выполняСтся, поэтому ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π° Π½Π΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° нСльзя. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

c = a + b

assert c == a + b

ΠšΡ€ΠΎΠΌΠ΅ описанной Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Ρ„ΠΎΡ€ΠΌΠ° try–finally для Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дСйствий ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ управлСния ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° try–finally Π²ΠΎΠ²Π½Π΅. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для освобоТдСния занятых рСсурсов, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния, нСзависимо ΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°Ρ‚Π°ΠΊΠ»ΠΈΠ·ΠΌΠΎΠ²:

try:

 ...

finally:

 print "ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°"

Π‘ΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ вмСстС Ρ„ΠΎΡ€ΠΌΡ‹ try–except ΠΈ try–finally нСльзя.

ВстроСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, всС Π΄Π°Π½Π½Ρ‹Π΅ Π² Python прСдставлСны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ИмСна ΡΠ²Π»ΡΡŽΡ‚ΡΡ лишь ссылками Π½Π° эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π½Π΅ нСсут Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΎ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°. ЗначСния встроСнных Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² синтаксисС языка: ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π» строки, числа, списка, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, словаря (ΠΈ ΠΈΡ… разновидностСй). Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ встроСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступной ΠΈ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² опрСдСляСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ классов.