събота, 17 януари 2009 г.

Основни типове и конструкции за управление в Python


„ Програмиране с Python“, ФМИ

Стефан Кънев & Николай Бачийски

28.02.2007г.

Python shell

Позволява изпълняването на малки парчета код, без да се налага да пишете цели програми



>>> animal = "Badger "
>>> print animal * 6
Badger Badger Badger Badger Badger Badger
>>> food = "Mushroom "
>>> print animal * 6 + food * 2
Badger Badger Badger Badger Badger Badger Mushroom Mushroom
>>> answer = 42
>>> print "The answer: %s" % answer
The answer: 42

Програми на python

  • Представляват най-обикновенни текстови файлове
  • hello.py
    name = "Guido"
    
    familyName = "van Rosum"
    print "Welcome, " + name + " " + familyName + " to Python!"
  • Изпълняват се с double click под Windows
  • Отвъд това, може да стартирате програмата с командата: python hello.py

Променливи и присвояване

  • Променливите в Python са валидни идентификатори
  • Пред имената им няма никакви долари, диези, маймуни или други странни символи
  • Присвояването на обект към име става с =
    answer = 42
    
    answer = "Fourty two"
  • Типа обект, който стои зад дадено име може да се променя
  • Използването на недефинирани имена води до грешка:
    print question
    

    Traceback (most recent call last):
    File "
    NameError: name 'question' is not defined

Основни типове

Основни типове в Python

  • Цели числа — int, long
  • Не толкова цели числа — float, complex
  • Текстови низове — str, unicode
  • Булеви данни — bool
  • Типове дефинирани от потребителя

Цели числа

  • Типове цели числа - 1 42 256 123454321L
    • int — с големината на думата на процесора
    • long — колкото може да побере оперативната ви памет
  • Преобразуването от int към long става автоматично при препълване
  • В общия случай не ви интересува дали работите с int или long

float и complex

  • float1. 0.314е1 217Е-2
    • Съвсем класически числа с плаваща запетая
    • Точността им зависи от архитектурата
    • Ако искате числа с фиксирана точност, може да ползвате модула decimal
  • complex0+1j complex(1,2) 3.0+4.0j
    • Имат реална и имагинерна част
    • Преобразуването до тях не е автоматично
    • Едва ли ще ги използвате

Операции с числа

  • събиране (+), изваждане (), умножение (*)
  • деление (/), целочислено деление (//), деление с остатък (%)
  • повдигане на степен (**)
  • побитови операции (само за цели числа) - <<, >>, &, |, ^, ~

Операции с числа (2)



>>> 6 * 7
42
>>> 10 / 3
3
>>> 10 % 3
1
>>> 10.0 // 3
3.0
>>> 10.0 / 3
3.3333333333333335
>>> 2 ** 31 -1
2147483647
>>> 1j * 1j
(-1+0j)

Текстови низове

  • Текстовите низове обикновено се представят с класа str
  • Може да ги представяте и с класа unicode
  • Записът е с единични или двойни кавички — "spam and eggs" 'larodi'
  • Единствената разлика е кои кавички трябва да escape-вате
  • Някои escape кодове: \\ \' \" \a \b \f \n \r \t \v
  • С тройни кавички може да правите heredoc — """This is heredoc"""
  • Има и "сурови" (raw) низове - r'C:\"Windows"\regedit.exe' и r"(bb|[^b]{2})|\d+"

Текстови низове (2)



"Hello world!"

'Quoth the Raven "Nevermore"'

"We don't have any \"cheese\", sir!"

"""Within "heredocs", we don't need
to escape single or double qoutes...
Or care about newlines"""

r'C:\Program Files\Python\'

"Subsequent " 'literals ' r'are ' """concatenated."""

Булеви данни

  • Тип bool - True False
  • Всъщност, True и False са други имена на 1 и 0
  • True + True връща 2
  • Да, тъпо е. Седи за backwards compatibility
  • Все пак, ползвайте True и False - така кодът се чете по-лесно

Булеви операции

  • and, or и not работят точно както очаквате
  • == и != също действат както очаквате.
  • "Foo" == 'Foo' връща True
  • 6 * 9 == 42 връща False
  • Има оператор <>, но той е остаряла версия на != и не се препоръчва

Булеви операции (2)

  • < и > са оператори за сравнение
  • "Perl" < "Python" връща True
  • Можете да образувате вериги от сравнения - "Bar" < "Baz" < "Foo" връща True
  • Горното е еквивалентно на "Bar" < "Baz" and "Baz" < "Foo"
  • Разбира се, можете да ползвате всички тези оператори и за числа
  • Операторите имат <= и >= версии
  • Когато сравнявате обекти от различни типове, по подразбиране Python сравнява имената им.
    Т.е. 20 < "Foo" връща True.

Конструкции за управление

Класическо:

if answer == 42:

print "- We know the answer!"
print "- Erm... what was the question again?"
else:
print "Something went wrong. Let's try it again"

Две думи за блоковете в Python

  • Блоковете в Python се идентират с whitespace (табулации или интервали)
  • Което и да изберете, бъдете консистентни.
  • Преди всяко изместване по-навътре се слагат :
  • Ако имате само един израз, може да съберете това на един ред:
    if hungry: print "We should go get some food"
  • Ако искате да оставите празен блок, използвайте ключовата дума pass:
    if something:
    
    pass
    else:
    print "Else happened!"
  • Горното беше глупав код! Разбира се, че се сетихме за not something. pass има някои смислени приложения при изключения и класове, но за това - по-натам

Обратно към if-а

Цялостен пример:

if name == "King Arthur":

print "What is the average speed of a swallow?"
elif name == "Sir Robin":
print "What is the capital of Assyria"
elif name == "Sir Lancelot":
print "What is your favourite color?"
else:
print "Run! It's the Legendary Black Beast of Aaaaarrrrrrggghhh"

Не, в Python няма case. Може би в следващата версия :(

Троен if

  • В Python има и "троен" if оператор
  • Синтаксисът е... екзотичен:
    [израз1] if [условие] else [израз2]
  • 
    
    print "We're connected" if conntected else ":("

while statement

Отново, while цикълът в Python е съвсем класически:



while not connected:
print "Trying..."
connected = retry()

print "We're now connected"

break



retries = 3
connected = False

while retries:
print "Trying to connect"
connected = connect()

if connected: break

retries -= 1
print "Failed. Trying again - %d times left..." % retries

if connected:
print "Connected succesfully"
else:
print "Failed miserably"

while... else?!



retries = 3
connected = False

while retries:
print "Trying to connect"
connected = connect()

if connected: break

retries -= 1
print "Failed. Trying again - %d times left..." % retries
else:
print "Failed :("

Няма коментари:

Публикуване на коментар