„ Програмиране с 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
float
—1. 0.314е1 217Е-2
- Съвсем класически числа с плаваща запетая
- Точността им зависи от архитектурата
- Ако искате числа с фиксирана точност, може да ползвате модула
decimal
complex
—0+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 :("
Няма коментари:
Публикуване на коментар