Неформальный вводный курс в Пайтон

original


Комментарии

# Это первый комментарий
number = 1    # Второй
string = '#А это уже строка!'

Пайтон как калькулятор

>>> 2 + 2
4
>>> 3 / 5 # Авто-приведение до float
0.6
>>> 11 // 2 # Округление до большего
5
>>> -11 // 3 #По модулю!
-4
>>> width = 20 # Ширина
>>> height = 5 * 9 # Высота
>>> width*height # Поддержка перемножения переменных
900

Строки в Пайтоне

>>> 'змеиное яйцо'  # еденичные скобки
'змеиное яйцо'

# используйте \' что бы в строке отобразить еденичные кавычки...
>>> 'doesn\'t'  
"doesn't"

>>> "doesn't"  # или используйте вместо этого двойные
"doesn't"

>>> print('C:\some[\n]ame')  
C:\some
ame
>>> print(r'C:\some\name')  # Сырая строка
C:\some\name
>>> print("""\
Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to
""")

>>> 3 * 'az' + ' shkolnik'
'azazaz shkolnik'

# Способ отображения длинной строки
>>> text = ('hhhhhhhhhhhhhhhhhh'
...         'hhhhhhhhhhhhhhhhhh')
>>> text
'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh'

# Конкатенация строк и/или переменных
prefix = 'Спа'
>>> prefix + 'сите'
'Спасите'

# Обращения к индексам слова
>>> word = 'Стипендия'
>>> word[0]  # символ в позиции 0
'С'
>>> word[8]  # символ в позиции 4
'я'
>>> word[-1]  # последний символ
'я'
>>> word[-2]  # предпоследний символ
'и'
>>> word[-8]
'С'

# Срезы строк:
# Символы с позиции 0 (включительно) 
# по 2 (невключительно)
>>> word[0:2]  
'Ст'
# Стоит отметить, что длина среза это модуль разницы
# a и b в выражении [a:b]
>>> word[2:6]
'ипен'
>>> word[:2] + word[2:]
'Стипа'
>>> word[:4] + word[4:]
'Стипа'
>>> word[:2]
'Ст'
>>> word[4:]   # characters from position 4 (included) to the end
'а'
>>> word[-2:]  # characters from the second-last (included) to the end
'па'
>>> word[4:42]
'а'
>>> word[42:]
' '

# Так заменять символ нельзя
>>> word[2] = 'ё'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

# Вот так правильно
>>> suff = 'ёпа'
>>> word[:2] + suff
'Стёпа'
>>> 


# Узнаём длинну строки
>>> s = 'хочукушатьдайтееддыыыыы'
>>> len(s)
23

Списки!


# Создаём список
>>> fib = [1, 1, 2, 3, 5]
>>> fib
[1, 1, 2, 3, 5]

# Обращаемс к его элементам
>>> fib[0]
1
>>> fib[-1]
5
>>> fib[-2]
3
>>> fib[-2:]
[3, 5]
>>> fib[:]
[1, 1, 2, 3, 5]

# Конкантенируем
>>> fib + [8, 13, 21, 34, 55]
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> agent_zapada = 88
>>> fib.append(agent_zapada)
>>> fib
[1, 1, 2, 3, 5, 88]
>>> fib = fib + [8, 13, 21, 34, 55]
>>> fib
[1, 1, 2, 3, 5, 88, 8, 13, 21, 34, 55]

# Тут я пытаюсь убрать символ
>>> fib[5] = _
>>> fib
[1, 1, 2, 3, 5, [...], 8, 13, 21, 34, 55]
>>> fib[5]
[1, 1, 2, 3, 5, [...], 8, 13, 21, 34, 55]
# И получается нечто ужасное


# Создаю список из символов
>>> letters = ['к', 'о', 'м', 'п', 'л', 'е', 'м', 'т', 'a', 'ц', 'и', 'я']
>>> letters
['к', 'о', 'м', 'п', 'л', 'е', 'м', 'т', 'a', 'ц', 'и', 'я']
>>> letters[1:3] = 'ОМ'
>>> letters
['к', 'О', 'М', 'п', 'л', 'е', 'м', 'т', 'a', 'ц', 'и', 'я']
# Омг, что он себе позволяет?

# Я не теряю попытки окончательно покончить с агентом
>>> fib[5] = []
>>> fib
[1, 1, 2, 3, 5, [], 8, 13, 21, 34, 55]
>>> fib[5:6] = []
>>> fib
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
# Ура!

>>> fib[:] = []
>>> fib
[]
>>> len(letters)
12

>>> a = [1,2,3,4,5]
>>> b = [q,w,e,r,t]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'q' is not defined
# Кстати да

>>> b = ['q','w','e','r','t']
>>> c = [a, b, a + b]
>>> c
[[1, 2, 3, 4, 5], ['q', 'w', 'e', 'r', 't'], [1, 2, 3, 4, 5, 'q', 'w', 'e', 'r', 't']]
>>> c[1][1]
'w'
# Важно не забывать, что нумерация начинается с 0

# Пишем простую программу
>>> a, b = 0, 1
>>> while a < 10:
...     print(a)
...     a, b = b, a+b
... 
0
1
1
2
3
5
8
>>> a, b = 0, 1
>>> while a < 10:
...     print(a)
...     print(a, end=', ')
...     a, b = b, a+b
... 
0
0, 1
1, 1
1, 2
2, 3
3, 5
5, 8
8, >a, b = 0, 1
>>> while a < 10:
...     print(a, end=', ')
...     a, b = b, a+b
... 
0, 1, 1, 2, 3, 5, 8,

Методы строк

В пайтоне есть некоторый набор методов строк, реализиующих интересные возможности. Первый более гибкий и кастомизируемый, а второй построен на С printf, который решает меньшее количество задач и более сложен, но более быстрый.


# Делаем буквы снова великими
>>> nocaps = 'cat'
>>> nocaps
'cat'
>>> caps = nocaps.capitalize()
>>> caps
'Cat'

# Центрируем, прибавляя пробелы
>>> olololo = 'rererer'
>>> lololol = olololo.center(10)
>>> lololol
' rererer  '
 
# Считаем входы
>>> figura = 'parallepiped'
>>> count_m = figura.count('ll')
>>> count_m
1
>>> figura = figura + 'll'
>>> count_m = figura.count('ll')
>>> count_m
2
>>> count_m = figura.count('ll', 0, 6)
>>> count_m
1

# Смотрим на окончание
>>> endswith_m = figura.endswith('ll')
>>> endswith_m
True
>>> endswith_m = figura.endswith('pa')
>>> endswith_m
False

# Находим место входа
>>> kogda_vhod = figura.find('ll')
>>> kogda_vhod
4
>>> kogda_vhod = figura.find('www')
>>> kogda_vhod
-1

# А есть ли он вообще?
>>> esti = ('ll' in figura)
>>> esti
True
>>> esti = ('agent' in figura)
>>> esti
False

# Форматируем строки
>>> form_str = 'false = {0}, white = {1}, silly = {2}'.format('true', 'black', 'clever')
>>> form_str
'false = true, white = black, silly = clever'

# Честно говоря, пока не понимаю что это
>>> class Default(dict):
...     def __missing__(self, key):
...             return key
... 
>>> '{name} was born in {country}'.format_map(Default(name='Oleg', country='Russia'))
'Oleg was born in Russia'