learning:py
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
learning:py [08.02.2024 17:25] – [Циклы] viacheslav | learning:py [19.06.2025 09:47] (текущий) – [Круговая диаграмма] viacheslav | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Python ====== | ||
+ | |||
+ | ===== Перенос установленных пакетов pypi в закрытый контур ===== | ||
+ | <code powershell> | ||
+ | # Экспорт установленных пакетов на машине, | ||
+ | $folder = ' | ||
+ | |||
+ | mkdir $folder -ErrorAction SilentlyContinue > $null | ||
+ | (pip.exe list |select -Skip 2) -replace ' | ||
+ | pip.exe download -d $folder $_ | ||
+ | } | ||
+ | |||
+ | Compress-Archive $folder\* -DestinationPath " | ||
+ | |||
+ | # Импорт на машине, | ||
+ | # Запускать раз за разом, пока не исчезнут ошибки. | ||
+ | $pip = " | ||
+ | |||
+ | (dir " | ||
+ | & $pip install --no-warn-script-location $_ | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ====== code-basics.com ====== | ||
+ | https:// | ||
+ | ===== Функции ===== | ||
+ | Параметры функций | ||
+ | <code python> | ||
+ | def truncate(text, | ||
+ | t = text[: | ||
+ | return t | ||
+ | |||
+ | print(truncate(' | ||
+ | </ | ||
+ | |||
+ | Необязательные параметры функций. Обязательные параметры должны идти первыми. | ||
+ | <code python> | ||
+ | def get_hidden_card(num, | ||
+ | return ' | ||
+ | |||
+ | print(get_hidden_card(' | ||
+ | </ | ||
+ | |||
+ | Именованные аргументы.\\ | ||
+ | Преимущество перед позиционными в том, что он более наглядны и можно указывать только те параметры, | ||
+ | Позиционные должны идти первыми. | ||
+ | <code python> | ||
+ | def trim_and_repeat(string, | ||
+ | return string[offset: | ||
+ | |||
+ | print(trim_and_repeat(' | ||
+ | </ | ||
+ | |||
+ | Аннотации типов. Указание типов, какие нужно ожидать и какой будет на выходе, | ||
+ | <code python> | ||
+ | def word_multiply(string: | ||
+ | return string * repetitions | ||
+ | |||
+ | print(word_multiply(' | ||
+ | </ | ||
+ | |||
+ | ===== Логика ===== | ||
+ | Логический тип (true/ | ||
+ | <code python> | ||
+ | def is_pensioner (age: int): | ||
+ | return age >= 60 | ||
+ | |||
+ | print(is_pensioner(79)) # True | ||
+ | </ | ||
+ | |||
+ | Предикаты. Возврат True/False, функции принято обозначать, | ||
+ | <code python> | ||
+ | def is_mister(mister: | ||
+ | return mister == ' | ||
+ | |||
+ | print(is_mister(' | ||
+ | </ | ||
+ | |||
+ | Комбинирование операций и функций.\\ | ||
+ | Приоритет арифметических операций выше логических. | ||
+ | def is_international_phone(number: | ||
+ | return number[0] == ' | ||
+ | |||
+ | print(is_international_phone(' | ||
+ | </ | ||
+ | |||
+ | And/Or. | ||
+ | <code python> | ||
+ | # | ||
+ | def is_leap_year(year): | ||
+ | return year % 400 == 0 or (year % 4 == 0 and year % 100 != 0) | ||
+ | #Ваше решение: | ||
+ | def is_leap_year(year: | ||
+ | return year % 4 == 0 and (year % 400 == 0 or year % 100 != 0) | ||
+ | |||
+ | print(is_leap_year(2000)) # True | ||
+ | print(is_leap_year(1900)) # False | ||
+ | </ | ||
+ | |||
+ | Not. Возможно множественное отрицание: | ||
+ | <code python> | ||
+ | def is_palindrome(string: | ||
+ | str = string.lower().replace(' | ||
+ | return str == str[::-1] | ||
+ | |||
+ | # Через регулярку | ||
+ | #def is_palindrome(string: | ||
+ | # import re | ||
+ | # str = re.sub(' | ||
+ | # return str == str[::-1] | ||
+ | |||
+ | def is_not_palindrome(string: | ||
+ | return not is_palindrome(string) | ||
+ | |||
+ | print(is_palindrome(' | ||
+ | print(is_palindrome(' | ||
+ | print(is_not_palindrome(' | ||
+ | print(is_not_palindrome(' | ||
+ | </ | ||
+ | |||
+ | Результат логических выражений.\\ | ||
+ | Проверка идёт слева направо: | ||
+ | '' | ||
+ | <code python> | ||
+ | # true and yes = true, true or no = true | ||
+ | print(10 % 2 == 0 and ' | ||
+ | # false and yes = false, false or no = false | ||
+ | print(11 % 2 == 0 and ' | ||
+ | |||
+ | print(1 and 2 and 3 and 4 or 5) # 4 | ||
+ | print(1 or 2 or 3 or 4 and 5) # 1 | ||
+ | |||
+ | def string_or_not(string): | ||
+ | return isinstance(string, | ||
+ | |||
+ | print(string_or_not(' | ||
+ | print(string_or_not(10)) # ' | ||
+ | print(string_or_not('' | ||
+ | print(string_or_not(False)) # ' | ||
+ | </ | ||
+ | |||
+ | ===== Условия ===== | ||
+ | IF | ||
+ | <code python> | ||
+ | def guess_number(num: | ||
+ | if num == 42: | ||
+ | return 'You win!' | ||
+ | return 'Try again!' | ||
+ | # Вариант с and/or | ||
+ | #def guess_number(num: | ||
+ | # return num == 42 and 'You win!' or 'Try again!' | ||
+ | |||
+ | print(guess_number(42)) # You win! | ||
+ | </ | ||
+ | |||
+ | ELSE\\ | ||
+ | Сделать все URL начинающимися с '' | ||
+ | <code python> | ||
+ | def normalize_url(url): | ||
+ | if url[:8] == ' | ||
+ | return url | ||
+ | else: | ||
+ | if url[:7] == ' | ||
+ | return ' | ||
+ | else: | ||
+ | return ' | ||
+ | |||
+ | print(normalize_url(' | ||
+ | print(normalize_url(' | ||
+ | print(normalize_url(' | ||
+ | </ | ||
+ | |||
+ | ELIF - альтернативное условие. | ||
+ | <code python> | ||
+ | def who_is_this_house_to_starks(i): | ||
+ | if i == ' | ||
+ | return ' | ||
+ | elif i == ' | ||
+ | return ' | ||
+ | else: | ||
+ | return ' | ||
+ | | ||
+ | print(who_is_this_house_to_starks(' | ||
+ | print(who_is_this_house_to_starks(' | ||
+ | print(who_is_this_house_to_starks(' | ||
+ | print(who_is_this_house_to_starks(' | ||
+ | |||
+ | # Можно обойтись без else (в этом случае): | ||
+ | elif i == ' | ||
+ | return ' | ||
+ | return ' | ||
+ | </ | ||
+ | |||
+ | Тернарный оператор\\ | ||
+ | if — это инструкция, | ||
+ | В целом, тернарный оператор - это более лаконичный вариант if-else. | ||
+ | <code python> | ||
+ | # Вариант IF | ||
+ | def flip_flop(i: | ||
+ | if i == ' | ||
+ | return ' | ||
+ | return ' | ||
+ | |||
+ | # Тернарный оператор | ||
+ | def flip_flop(i: | ||
+ | return ' | ||
+ | |||
+ | print(flip_flop(' | ||
+ | print(flip_flop(' | ||
+ | </ | ||
+ | |||
+ | Match (аналог switch в Powershell)\\ | ||
+ | Частный случай if-else, в ряде случаев читается лучше. | ||
+ | <code python> | ||
+ | def get_number_explanation(i: | ||
+ | match i: | ||
+ | case 666: | ||
+ | return 'devil number' | ||
+ | case 42: | ||
+ | return ' | ||
+ | case 7: | ||
+ | return 'prime number' | ||
+ | case _: | ||
+ | return 'just a number' | ||
+ | | ||
+ | print(get_number_explanation(8)) | ||
+ | print(get_number_explanation(666)) | ||
+ | print(get_number_explanation(42)) | ||
+ | print(get_number_explanation(7)) | ||
+ | |||
+ | # Без case_, как и без else, здесь можно обойтись: | ||
+ | match i: | ||
+ | case 7: | ||
+ | return 'prime number' | ||
+ | return 'just a number' | ||
+ | </ | ||
+ | |||
+ | ===== Циклы ===== | ||
+ | WHILE | ||
+ | <code python> | ||
+ | def print_numbers(last_number): | ||
+ | i = last_number | ||
+ | while i >= 1: | ||
+ | print(i) | ||
+ | i = i - 1 | ||
+ | print(' | ||
+ | |||
+ | print_numbers(4) # 4, | ||
+ | </ | ||
+ | |||
+ | Агрегирование данных - добавление к уже имеющимся. | ||
+ | <code python> | ||
+ | # Перемножение чисел в диапазоне | ||
+ | def multiply_numbers_from_range(start, | ||
+ | result = 1 | ||
+ | while start <= end: | ||
+ | result = result * start | ||
+ | start = start + 1 | ||
+ | return result | ||
+ | |||
+ | print(multiply_numbers_from_range(1, | ||
+ | |||
+ | # Агрегирование строк | ||
+ | def join_numbers_from_range(start, | ||
+ | string = '' | ||
+ | while start <= end: | ||
+ | string = string + str(start) | ||
+ | start = start + 1 | ||
+ | return string | ||
+ | |||
+ | print(join_numbers_from_range(4, | ||
+ | </ | ||
+ | |||
+ | Обход строк | ||
+ | <code python> | ||
+ | def print_reversed_word_by_symbol(word): | ||
+ | i = len(word) - 1 | ||
+ | while i >= 0: | ||
+ | print(word[i]) | ||
+ | i = i - 1 | ||
+ | | ||
+ | print_reversed_word_by_symbol(' | ||
+ | d | ||
+ | r | ||
+ | o | ||
+ | w | ||
+ | </ | ||
+ | |||
+ | Условия внутри тела цикла | ||
+ | <code python> | ||
+ | def count_chars(string, | ||
+ | string = string.lower() | ||
+ | char = char.lower() | ||
+ | index = 0 | ||
+ | count = 0 | ||
+ | while index < len(string): | ||
+ | if string[index] == char: | ||
+ | # Считаем только подходящие символы | ||
+ | count = count + 1 | ||
+ | # Счетчик увеличивается в любом случае | ||
+ | index = index + 1 | ||
+ | return count | ||
+ | | ||
+ | # или делать каждую итерацию: | ||
+ | if string[index].lower() == char.lower(): | ||
+ | </ | ||
+ | |||
+ | Подстрока (substring) с помощью цикла | ||
+ | <code python> | ||
+ | def my_substr(string, | ||
+ | index = 0 | ||
+ | result = '' | ||
+ | while index < num: | ||
+ | result = result + string[index] | ||
+ | index = index + 1 | ||
+ | return result | ||
+ | |||
+ | print(my_substr(' | ||
+ | Привет, | ||
+ | |||
+ | # Проверка правильности аргументов | ||
+ | # Функция возвращает False, если хотя бы одно из условий истинно: | ||
+ | # Отрицательная длина извлекаемой подстроки. | ||
+ | # Отрицательный заданный индекс. | ||
+ | # Заданный индекс выходит за границу всей строки. | ||
+ | # Длина подстроки в сумме с заданным индексом выходит за границу всей строки. | ||
+ | # В ином случае функция возвращает True. | ||
+ | def is_arguments_for_substr_correct(string, | ||
+ | if subst < 0 or index < 0 or index >= len(string) or (subst + index) > len(string): | ||
+ | return False | ||
+ | return True | ||
+ | |||
+ | string = 'Sansa Stark' | ||
+ | end = len(string) - 1 | ||
+ | print(is_arguments_for_substr_correct(string, | ||
+ | print(is_arguments_for_substr_correct(string, | ||
+ | print(is_arguments_for_substr_correct(string, | ||
+ | print(is_arguments_for_substr_correct(string, | ||
+ | </ | ||
+ | |||
+ | ==== Синтаксический сахар ==== | ||
+ | Вместо '' | ||
+ | ^Исходная форма ^Сокращённая форма ^ | ||
+ | |'' | ||
+ | |'' | ||
+ | |'' | ||
+ | |'' | ||
+ | |||
+ | <code python> | ||
+ | # Удаление символа из строки без replace() | ||
+ | def filter_string(text, | ||
+ | length = len(text) | ||
+ | index = 0 | ||
+ | word = '' | ||
+ | while index < length: | ||
+ | if text[index] != letter: | ||
+ | word += text[index] | ||
+ | index += 1 | ||
+ | return word | ||
+ | |||
+ | print(filter_string(" | ||
+ | Привет, | ||
+ | </ | ||
+ | |||
+ | ==== Возврат из цикла ==== | ||
+ | <code python> | ||
+ | # Решение по теме | ||
+ | def is_contains_char(string, | ||
+ | index = 0 | ||
+ | while index < len(string): | ||
+ | if string[index] == char: | ||
+ | return True | ||
+ | index += 1 | ||
+ | return False | ||
+ | |||
+ | # Моё решение (не вчитался в условие, | ||
+ | def is_contains_char(str, | ||
+ | if (char in str): | ||
+ | return True | ||
+ | return False | ||
+ | </ | ||
+ | |||
+ | ==== Цикл For ==== | ||
+ | Как foreach в powershell. Для while нужно задавать условие остановки и вводить счетчик.\\ | ||
+ | Цикл For предназначен для коллекций, | ||
+ | <code python> | ||
+ | # Функция filter_string(), | ||
+ | def filter_string(str, | ||
+ | res = '' | ||
+ | for c in str: | ||
+ | if (c.lower() != char.lower()): | ||
+ | res += c | ||
+ | return res | ||
+ | | ||
+ | # range() - диапазон | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | for i in range(3, 0, -1): | ||
+ | print(i) | ||
+ | 3 | ||
+ | 2 | ||
+ | 1 | ||
+ | |||
+ | def print_table_of_squares(start, | ||
+ | for i in range(start, | ||
+ | | ||
+ | |||
+ | print(print_table_of_squares(1, | ||
+ | square of 1 is 1 | ||
+ | square of 2 is 4 | ||
+ | square of 3 is 9 | ||
+ | square of 4 is 16 | ||
+ | None | ||
+ | </ | ||
+ | ====== Тони Гэддис - Начинаем программировать на Python, 5 изд. ====== | ||
+ | //" | ||
+ | ===== Ввод, обработка, | ||
+ | <code python> | ||
+ | >>> | ||
+ | >>> | ||
+ | name | ||
+ | >>> | ||
+ | world | ||
+ | |||
+ | print(' | ||
+ | One two | ||
+ | >>> | ||
+ | One---two | ||
+ | >>> | ||
+ | >>> | ||
+ | One-two! | ||
+ | |||
+ | name = input(' | ||
+ | hours = int(input(' | ||
+ | |||
+ | # f-строки - форматирование вывода | ||
+ | >>> | ||
+ | Hello, world! | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | Значение равно 12. | ||
+ | |||
+ | orig_price = float(input(" | ||
+ | # Цена со скидкой 20% | ||
+ | print(f' | ||
+ | |||
+ | # {местозаполнитель: | ||
+ | print(f' | ||
+ | # Если перед округлением поставить запятую, | ||
+ | num = 1234567890.12345 | ||
+ | print(f' | ||
+ | 1, | ||
+ | # Для целых чисел тип d | ||
+ | num = 1234567890 | ||
+ | print(f' | ||
+ | 1, | ||
+ | |||
+ | # Вывод десятичной дроби в процентах (в научной нотации - :e) | ||
+ | discount = 0.256 | ||
+ | print(f' | ||
+ | 25.600000% | ||
+ | print(f' | ||
+ | 26% | ||
+ | |||
+ | # Ширина поля. 10 знаков у поля с числом (включая само число). Если число больше поля, поле будет увеличено. | ||
+ | num = 123 | ||
+ | print(f' | ||
+ | Число равно | ||
+ | |||
+ | # Совмещение округления и ширины поля | ||
+ | discount = 2.256 | ||
+ | print(f' | ||
+ | Число | ||
+ | |||
+ | # Выравнивание. Числа по умолчанию вправо, | ||
+ | # < - влево, > - вправо, | ||
+ | f' | ||
+ | f' | ||
+ | |||
+ | name1 = ' | ||
+ | name2 = ' | ||
+ | name3 = ' | ||
+ | name4 = ' | ||
+ | print(f' | ||
+ | print(f' | ||
+ | print(f' | ||
+ | print(f' | ||
+ | *** Василий | ||
+ | *** | ||
+ | *** | ||
+ | *** | ||
+ | |||
+ | # Порядок следования условных обозначений: | ||
+ | # [выравнивание][ширина][, | ||
+ | print(f' | ||
+ | |||
+ | # Конкатенация f-строк | ||
+ | print(f' | ||
+ | f' | ||
+ | f' | ||
+ | Имя: Вася, Отдел: ИТ, Должность: | ||
+ | # Неявная конкатенация (без плюсов), | ||
+ | print(f' | ||
+ | f' | ||
+ | f' | ||
+ | | ||
+ | # Следует избегать " | ||
+ | amount = balance * 0.069 # Что за 0.069, непонятно | ||
+ | # Рекомендуется использовать именованные константы | ||
+ | # Сразу понятно, | ||
+ | interest_rate = 0.069 | ||
+ | amount = balance * interest_rate | ||
+ | </ | ||
+ | |||
+ | ==== " | ||
+ | <code python> | ||
+ | import turtle # Импорт модуля | ||
+ | turtle.showturtle() # Показать окно | ||
+ | turtle.forward(200) # Двинуть черепаху вперёд на 200 пикселей | ||
+ | turtle.left(45) # Развернуться влево на 45° (относительно текущего положения) | ||
+ | turtle.setheading(180) # Развернуться влево (абсолютно). 90° - вверх, 270° - вниз, 0° - вправо. | ||
+ | turtle.heading() # выяснить текущую ориентацию | ||
+ | turtle.penup() # поднять перо (линия рисоваться не будет) | ||
+ | turtle.pendown() # опустить перо | ||
+ | turtle.circle(100) # Нарисовать круг радиусом 100 пкс | ||
+ | turtle.dot() # Нарисовать точку | ||
+ | turtle.bgcolor(' | ||
+ | turtle.pencolor(' | ||
+ | # Сброс | ||
+ | turtle.reset() # Стирает все рисунки, | ||
+ | turtle.clear() # Стирает все рисунки, | ||
+ | turtle.clearscreen() # Полный сброс | ||
+ | |||
+ | turtle.setup(640, | ||
+ | turtle.goto(-100, | ||
+ | turtle.pos() # Выяснить координаты | ||
+ | turtle.xcor() # Вывести положение по оси x | ||
+ | turtle.ycor() # Вывести положение по оси y | ||
+ | turtle.speed(0) # Скорость перемещения черепахи от 1 (по умолчанию, | ||
+ | turtle.hideturtle() # скрыть значок черепахи | ||
+ | turtle.showturtle() # показать значок черепахи | ||
+ | turtle.write(' | ||
+ | |||
+ | # Заполнение фигуры цветом | ||
+ | turtle.fillcolor(' | ||
+ | turtle.begin_fill() # Перед началом рисования фигуры | ||
+ | turtle.circle(-200) | ||
+ | turtle.end_fill() # После окончания рисования фигуры | ||
+ | # Если фигура не замкнута, | ||
+ | |||
+ | # Интерактивный запрос данных, | ||
+ | radius = turtle.numinput(' | ||
+ | turtle.circle(radius) | ||
+ | # Строка | ||
+ | name = turtle.textinput(' | ||
+ | |||
+ | turtle.done() # Предотвращение закрытия холста после выполнения программы (для IDLE не нужно). Добавляется последней строкой. | ||
+ | |||
+ | # Созвездие Ориона | ||
+ | betelgeuse_x = -70 | ||
+ | betelgeuse_y = 200 | ||
+ | bellatrix_x = 80 | ||
+ | bellatrix_y = 180 | ||
+ | alnitak_x = -40 | ||
+ | alnitak_y = -20 | ||
+ | alnilam_x = 0 | ||
+ | alnilam_y = 0 | ||
+ | mintaka_x = 40 | ||
+ | mintaka_y = 20 | ||
+ | saif_x = -90 | ||
+ | saif_y = -180 | ||
+ | rigel_x = 120 | ||
+ | rigel_y = -140 | ||
+ | |||
+ | import turtle | ||
+ | turtle.clearscreen() | ||
+ | turtle.reset() | ||
+ | turtle.hideturtle() | ||
+ | |||
+ | turtle.penup() | ||
+ | turtle.goto(betelgeuse_x, | ||
+ | turtle.write(' | ||
+ | turtle.pendown() | ||
+ | turtle.dot() | ||
+ | |||
+ | turtle.goto(alnitak_x, | ||
+ | turtle.write(' | ||
+ | turtle.dot() | ||
+ | |||
+ | turtle.goto(saif_x, | ||
+ | turtle.write(' | ||
+ | turtle.dot() | ||
+ | turtle.goto(alnitak_x, | ||
+ | |||
+ | turtle.goto(alnilam_x, | ||
+ | turtle.write(' | ||
+ | turtle.dot() | ||
+ | turtle.goto(mintaka_x, | ||
+ | turtle.write(' | ||
+ | turtle.dot() | ||
+ | |||
+ | turtle.goto(bellatrix_x, | ||
+ | turtle.write(' | ||
+ | turtle.dot() | ||
+ | turtle.goto(mintaka_x, | ||
+ | turtle.goto(rigel_x, | ||
+ | turtle.write(' | ||
+ | turtle.dot() | ||
+ | |||
+ | turtle.done() | ||
+ | </ | ||
+ | |||
+ | ==== Практические задания ==== | ||
+ | <code python> | ||
+ | # Цельсий -> Фаренгейт | ||
+ | celsius = int(input(' | ||
+ | print(f' | ||
+ | |||
+ | # Ингредиенты для булочек (норматив известен на 48 булочек) | ||
+ | buns = int(input(' | ||
+ | buns_standard = 48 | ||
+ | print(f' | ||
+ | print(f' | ||
+ | print(f' | ||
+ | |||
+ | # Расчёт кол-ва лоз в гряде | ||
+ | length = int(input(' | ||
+ | length_pillar = int(input(' | ||
+ | gap = int(input(' | ||
+ | quantity = int((length - length_pillar * 2) / gap) | ||
+ | # Не округление, | ||
+ | print(f' | ||
+ | |||
+ | # Сложный процент | ||
+ | initial_sum = float(input(' | ||
+ | percent = float(input(' | ||
+ | quant_per_year = int(input(' | ||
+ | years = int(input(' | ||
+ | print(f' | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Структуры принятия решения и булева логика ===== | ||
+ | |||
+ | ==== if/ | ||
+ | <code python> | ||
+ | i = 10 | ||
+ | reference = 50 | ||
+ | |||
+ | if i > reference: | ||
+ | print(' | ||
+ | elif i == reference: | ||
+ | print(' | ||
+ | else: | ||
+ | print (' | ||
+ | | ||
+ | # Строки тоже можно сравнивать | ||
+ | password = input(' | ||
+ | reference = 'На горшке сидел король' | ||
+ | if password == reference: | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | |||
+ | # При сравнении строк сравниваются их ASCII-коды, | ||
+ | # Более длинная строка будет больше более короткой. | ||
+ | if ' | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | |||
+ | # При вложенных условиях нужно делать соответствующие отступы | ||
+ | if условие: | ||
+ | if условие: | ||
+ | действия | ||
+ | elif условие: | ||
+ | действия | ||
+ | else: | ||
+ | действия | ||
+ | else: | ||
+ | действия | ||
+ | </ | ||
+ | |||
+ | ==== Логические операторы ==== | ||
+ | <code python> | ||
+ | # and - true, если оба выражения истинны | ||
+ | if temperature > 40 and minutes > 5: | ||
+ | print(f' | ||
+ | |||
+ | # or - true, если хотя бы одно из выражений истинно | ||
+ | if temperature > 40 or temperature < 0: | ||
+ | print(' | ||
+ | |||
+ | # not - инвертирует булево выражение | ||
+ | if not(temperature > 0): | ||
+ | print(' | ||
+ | |||
+ | # Переменная с типом bool (значения True и False пишутся с большой буквы) | ||
+ | if sales >= 50000: | ||
+ | sales_quota_met = True | ||
+ | else: | ||
+ | sales_quota_met = False | ||
+ | |||
+ | if sales_quota_met: | ||
+ | print(' | ||
+ | |||
+ | # Движение по условию позиции " | ||
+ | if turtle.xcor() > 249 or turtle.ycor() > 349: | ||
+ | turtle.goto(0, | ||
+ | # Если " | ||
+ | if turtle.heading() >= 90 and turtle.heading() <= 270: | ||
+ | turtle.setheading(180) | ||
+ | # Если перо опущено, | ||
+ | if turtle.isdown(): | ||
+ | turtle.penup() | ||
+ | # Если перо не опущено, | ||
+ | if not(turtle.isdown()): | ||
+ | turtle.pendown() | ||
+ | # Если " | ||
+ | if turtle.isvisible(): | ||
+ | turtle.hideturtle() | ||
+ | # Если перо красное, | ||
+ | if turtle.pencolor() == ' | ||
+ | turtle.pencolor(' | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Практические задания ==== | ||
+ | |||
+ | <code python> | ||
+ | # Калькулятор ингредиентов для хот-догов | ||
+ | visitors = int(input(' | ||
+ | hotdogs = int(input(' | ||
+ | sausage_pack = 10 | ||
+ | buns_pack = 8 | ||
+ | |||
+ | total = visitors * hotdogs | ||
+ | if total % sausage_pack == 0 and total % buns_pack == 0: | ||
+ | print(f' | ||
+ | print(' | ||
+ | elif total % sausage_pack != 0 and total % buns_pack == 0: | ||
+ | print(f' | ||
+ | print(f' | ||
+ | elif total % sausage_pack == 0 and total % buns_pack != 0: | ||
+ | print(f' | ||
+ | print(f' | ||
+ | else: | ||
+ | print(f' | ||
+ | print(f' | ||
+ | |||
+ | # Цвета колеса рулетки | ||
+ | # RANGE даёт диапазон на единицу меньше в конце! Т. е., range(19, 29) реально будет 19-28! | ||
+ | pocket = int(input(' | ||
+ | if pocket == 0: | ||
+ | print(' | ||
+ | elif pocket in range(1, 10) or pocket in range(19, 29): | ||
+ | if pocket % 2 == 0: | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | elif pocket in range(11, 18) or pocket in range(29, 37): | ||
+ | if pocket % 2 == 0: | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | |||
+ | # Продажа ПО со скидкой | ||
+ | pkgs = int(input(' | ||
+ | price = 99 | ||
+ | discount = 0 | ||
+ | if pkgs in range(10, 20): | ||
+ | discount = 10 | ||
+ | elif pkgs in range(20, 50): | ||
+ | discount = 20 | ||
+ | elif pkgs in range(50, 100): | ||
+ | discount = 30 | ||
+ | elif pkgs >= 100: | ||
+ | discount = 40 | ||
+ | |||
+ | print(f' | ||
+ | |||
+ | # Тариф на доставку | ||
+ | weight = int(input(' | ||
+ | if weight <= 200: | ||
+ | fee = 150 | ||
+ | elif weight in range(201, 601): | ||
+ | fee = 300 | ||
+ | elif weight in range(601, 1001): | ||
+ | fee = 400 | ||
+ | elif weight >= 1001: | ||
+ | fee = 475 | ||
+ | |||
+ | print(f' | ||
+ | |||
+ | # Индекс массы тела | ||
+ | height = int(input(' | ||
+ | weight = int(input(' | ||
+ | index = round(weight / (height / 100) ** 2, 1) | ||
+ | if index <= 18.5: | ||
+ | print (' | ||
+ | elif index >= 18.5 and index <= 25: | ||
+ | print (' | ||
+ | elif index > 25: | ||
+ | print (' | ||
+ | |||
+ | # Секунды в дни-часы-минуты-секунды | ||
+ | sec = int(input(' | ||
+ | if sec in range(60, 3600): | ||
+ | print (f' | ||
+ | elif sec in range(3600, 86400): | ||
+ | print (f' | ||
+ | elif sec >= 86400: | ||
+ | print (f' | ||
+ | else: | ||
+ | print (f' | ||
+ | |||
+ | # Високосный ли год | ||
+ | year = int(input(' | ||
+ | if (year % 100 == 0 and year % 400 == 0) or (year % 100 != 0 and year % 4 == 0): | ||
+ | print(f' | ||
+ | else: | ||
+ | print(f' | ||
+ | </ | ||
+ | |||
+ | ===== Циклы ===== | ||
+ | ==== while: цикл с условием повторения ==== | ||
+ | Цикл повторяется, | ||
+ | <code python> | ||
+ | number = 5 | ||
+ | while number <= 10: | ||
+ | print (number) | ||
+ | number = number + 1 | ||
+ | </ | ||
+ | |||
+ | ==== for: цикл со счётчиком ==== | ||
+ | <code python> | ||
+ | for number in [1, 2, 3, 4, 5, 10]: | ||
+ | print (number) | ||
+ | |||
+ | for word in [' | ||
+ | print (word) | ||
+ | |||
+ | for word in range(3): | ||
+ | print ('3 повтора' | ||
+ | 3 повтора | ||
+ | 3 повтора | ||
+ | 3 повтора | ||
+ | |||
+ | # range (начало, | ||
+ | for num in range(1, 10, 2): | ||
+ | print (num) | ||
+ | 1 | ||
+ | 3 | ||
+ | 5 | ||
+ | 7 | ||
+ | 9 | ||
+ | |||
+ | # Часы - хорошая иллюстрация вложенных циклов for | ||
+ | for hours in range(24): | ||
+ | for minutes in range(60): | ||
+ | for seconds in range(60): | ||
+ | print(f' | ||
+ | |||
+ | # Ёлочка из звёздочек (range [0, 1, 2, 3, 4]) | ||
+ | for row in range(5): | ||
+ | for col in range(row+1): | ||
+ | print(' | ||
+ | print() | ||
+ | * | ||
+ | ** | ||
+ | *** | ||
+ | **** | ||
+ | ***** | ||
+ | |||
+ | # С пробелами | ||
+ | for row in range(5): | ||
+ | for col in range(row): | ||
+ | print(' | ||
+ | print(' | ||
+ | * | ||
+ | * | ||
+ | * | ||
+ | * | ||
+ | * | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Функции ===== | ||
+ | 2 варианта: | ||
+ | Хорошим вариантом имени будет глагол_существительное, | ||
+ | <code python> | ||
+ | def main(): | ||
+ | startup_message() | ||
+ | input(' | ||
+ | step1() | ||
+ | def startup_message(): | ||
+ | weight = '5 кг' # Локальная переменная. Действует только в рамках функции | ||
+ | print(' | ||
+ | print(' | ||
+ | def step(): | ||
+ | weight = '10 кг' # Локальная переменная. Действует только в рамках функции | ||
+ | print(' | ||
+ | print(' | ||
+ | # Вызов основной функции для старта программы | ||
+ | main() | ||
+ | |||
+ | # pass - заглушка, | ||
+ | # pass можно использовать и в других случаях, | ||
+ | def step1(): | ||
+ | pass | ||
+ | def step2(): | ||
+ | pass | ||
+ | </ | ||
+ | |||
+ | ==== Передача аргументов в функцию ==== | ||
+ | <code python> | ||
+ | # Позиционные аргументы | ||
+ | def main(): | ||
+ | print(' | ||
+ | show_sum(75, | ||
+ | def show_sum(num1, | ||
+ | result = num1 + num2 | ||
+ | print(result) | ||
+ | main() | ||
+ | |||
+ | # Именованные аргументы | ||
+ | def main(): | ||
+ | print(' | ||
+ | show_interest(rate=0.01, | ||
+ | def show_interest(principal, | ||
+ | interest = principal * rate * periods | ||
+ | print(f' | ||
+ | main() | ||
+ | </ | ||
+ | Можно использовать одновременно и позиционные, | ||
+ | |||
+ | ==== Глобальные переменные и константы ==== | ||
+ | Глобальную переменную, | ||
+ | <code python> | ||
+ | def main(): | ||
+ | global number | ||
+ | number = int(input(' | ||
+ | </ | ||
+ | Глобальные переменные нужно использовать очень ограниченно, | ||
+ | |||
+ | Глобальные константы в Питоне отсутствуют, | ||
+ | Общепринятой практикой является написание их названий прописными буквами. | ||
+ | <code python> | ||
+ | # CONTRIBUTION_RATE здесь - это процентная ставка, | ||
+ | CONTRIBUTION_RATE = 0.05 | ||
+ | def show_pay_contrib(gross): | ||
+ | contrib = gross * CONTRIBUTION_RATE | ||
+ | print(f' | ||
+ | </ | ||
+ | |||
+ | ==== Функции с возвратом значения ==== | ||
+ | При завершении возвращает значение в ту часть программы, | ||
+ | <code python> | ||
+ | def sum(num1, num2): | ||
+ | return num1 + num2 | ||
+ | </ | ||
+ | |||
+ | Библиотечные функции - '' | ||
+ | <code python> | ||
+ | import random | ||
+ | number = random.randint(1, | ||
+ | |||
+ | # Вызов функции из f-строки | ||
+ | print(f' | ||
+ | |||
+ | # Случайное число в диапазоне 0-9 | ||
+ | number = random.randrange(10) | ||
+ | # Случайное число в диапазоне 5-9 | ||
+ | number = random.randrange(5, | ||
+ | # Случайное число среди 0, 10, 20 ... 100 | ||
+ | number = random.randrange(0, | ||
+ | # Случайное число в диапазоне 0.0 - 1.0 (исключая 1.0) | ||
+ | number = random.random() | ||
+ | # Случайное число в диапазоне 1.0 - 10.0 | ||
+ | number = random.uniform(1.0, | ||
+ | # Каждый раз генерировать одну и ту же последовательность псевдослучайных чисел (random.seed) | ||
+ | random.seed(10) | ||
+ | print(f' | ||
+ | print(f' | ||
+ | print(f' | ||
+ | </ | ||
+ | |||
+ | Для документирования функций удобно использовать таблицу " | ||
+ | ^Функция ^Ввод ^Обработка ^Вывод ^ | ||
+ | |get_price() |Розничная цена |Запрос розничной цены товара |Розничная цена товара | | ||
+ | |||
+ | === Возврат булева значения === | ||
+ | <code python> | ||
+ | # Допустимы только значения 100, 200 и 300 | ||
+ | def is_invalid(mod_num): | ||
+ | if mod_num not in [100, | ||
+ | status = True | ||
+ | else: | ||
+ | status = False | ||
+ | return status | ||
+ | |||
+ | model = int(input(' | ||
+ | |||
+ | if is_invalid(model): | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | </ | ||
+ | |||
+ | === Возврат нескольких значений === | ||
+ | <code python> | ||
+ | def get_info(): | ||
+ | n = input(' | ||
+ | a = int(input(' | ||
+ | return n, a | ||
+ | # Присвоение значений переменным по порядку. Кол-во должно совпадать, | ||
+ | my_name, my_age = get_info() | ||
+ | </ | ||
+ | |||
+ | === Значение None === | ||
+ | <code python> | ||
+ | def main(): | ||
+ | n1 = int(input(' | ||
+ | n2 = int(input(' | ||
+ | res = divide(n1, n2) | ||
+ | if res is None: | ||
+ | print(' | ||
+ | else: | ||
+ | print(f' | ||
+ | def divide(n1, n2): | ||
+ | if n2 == 0: | ||
+ | res = None | ||
+ | else: | ||
+ | res = n1 / n2 | ||
+ | return res | ||
+ | main() | ||
+ | </ | ||
+ | |||
+ | ==== Хранение функций в модулях ==== | ||
+ | Когда накапливается много функций, | ||
+ | Имя модуля должно иметь расширение '' | ||
+ | |||
+ | После импорта модуля можно вызывать его функции. | ||
+ | <code python> | ||
+ | import circle | ||
+ | # Площадь круга | ||
+ | my_area = circle.area(radius) | ||
+ | </ | ||
+ | |||
+ | ==== Исполнение функции main по условию в модуле ==== | ||
+ | Иногда может потребоваться импортировать как модуль саму программу или скрипт, | ||
+ | <code python> | ||
+ | if __name__ == ' | ||
+ | main() | ||
+ | </ | ||
+ | Суть в том, что переменная '' | ||
+ | |||
+ | ===== Файлы и исключения ===== | ||
+ | |||
+ | Функция open - открытие файла. Создаётся файловый объект, | ||
+ | <code python> | ||
+ | # r - read-only, w - write/ | ||
+ | test_file = open(' | ||
+ | # С указанием пути. r - строковый литерал, | ||
+ | test_file = open(r' | ||
+ | |||
+ | # Запись в файл | ||
+ | test_file = open(r' | ||
+ | test_file.write(' | ||
+ | test_file.write(' | ||
+ | test_file.write(' | ||
+ | test_file.close() | ||
+ | |||
+ | # Чтение из файла | ||
+ | test_file = open(r' | ||
+ | content = test_file.read() | ||
+ | test_file.close() | ||
+ | # Вывести на экран | ||
+ | print(content) | ||
+ | |||
+ | # Построчное чтение. После каждого readline() позиция чтения сдвигается на строку вниз. | ||
+ | # Каждая прочитанная строка завершается символом \n. Если последняя строка не заканчивается на \n, то строка в переменной будет без него. | ||
+ | test_file = open(r' | ||
+ | str1 = test_file.readline() | ||
+ | str2 = test_file.readline() | ||
+ | str3 = test_file.readline() | ||
+ | test_file.close() | ||
+ | print(str1) # Иван | ||
+ | print(str2) # Пётр | ||
+ | print(str3) # Ольга | ||
+ | |||
+ | # Убрать \n из полученных строк | ||
+ | name = ' | ||
+ | name - name.rstrip(' | ||
+ | |||
+ | # Перед записью числа в файл его нужно преобразовать в строку | ||
+ | test_file = open(r' | ||
+ | num1 = 99 | ||
+ | test_file.write(str(num1) + ' | ||
+ | test_file.close() | ||
+ | |||
+ | # Соответственно, | ||
+ | # int() и float() игнорируют \n, поэтому убирать его потом не придётся. | ||
+ | test_file = open(r' | ||
+ | num1 = int(test_file.readline()) | ||
+ | test_file.close() | ||
+ | print(num1) | ||
+ | |||
+ | # Чтение файла построчно. Метод readline() возвращает пустое значение, | ||
+ | # поэтому, | ||
+ | file = open(r' | ||
+ | line = file.readline().rstrip(' | ||
+ | while line != '': | ||
+ | print(line) | ||
+ | line = file.readline().rstrip(' | ||
+ | file.close() | ||
+ | |||
+ | # Более удобный способ - чтение строк через цикл for. | ||
+ | # Здесь не надо ловить пустую линию, а просто указывается файловый объект для перечисления. | ||
+ | file = open(r' | ||
+ | for line in file: | ||
+ | print(line.rstrip(' | ||
+ | file.close() | ||
+ | |||
+ | # Удаление записи из файла. Структура файла: | ||
+ | # Вася Пупкин | ||
+ | # 4 | ||
+ | # Петя Мокин | ||
+ | # 3 | ||
+ | # Лена Петрова | ||
+ | # 5 | ||
+ | |||
+ | name = ' | ||
+ | |||
+ | file_src = open(r' | ||
+ | file_tmp = open(r' | ||
+ | import re | ||
+ | |||
+ | s = file_src.readline().rstrip(' | ||
+ | while s != '': | ||
+ | mark = file_src.readline().rstrip(' | ||
+ | if not re.search(name, | ||
+ | file_tmp.write(f' | ||
+ | file_tmp.write(f' | ||
+ | s = file_src.readline().rstrip(' | ||
+ | file_src.close() | ||
+ | file_tmp.close() | ||
+ | |||
+ | import os | ||
+ | os.remove(r' | ||
+ | os.rename(r' | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Обработка исключений ==== | ||
+ | <code python> | ||
+ | # try - код, except - обработка исключения, | ||
+ | try: | ||
+ | 15 / 0 | ||
+ | # Имя исключения необязательно к указанию, | ||
+ | # Здесь - обрабатывать только исключение ZeroDivisionError. | ||
+ | except ZeroDivisionError: | ||
+ | print(' | ||
+ | |||
+ | # Текст исключения, | ||
+ | Traceback (most recent call last): | ||
+ | File "< | ||
+ | 15/0 | ||
+ | ZeroDivisionError: | ||
+ | |||
+ | # Обработка нескольких исключений. Без указания имени исключения обрабатываются все остальные случаи. | ||
+ | except IOError: | ||
+ | print(' | ||
+ | except ValueError: | ||
+ | print(' | ||
+ | except: | ||
+ | print(' | ||
+ | | ||
+ | # Присвоение объекта исключения переменной err (можно задать любое другое название переменной) | ||
+ | except ValueError as err: | ||
+ | print(err) | ||
+ | # invalid literal for int() with base 10: ' | ||
+ | |||
+ | # Конструкция try/except может иметь необязательную группу else, она выполняется при отсутствии исключений | ||
+ | try: | ||
+ | result = 15 / 5 | ||
+ | except ZeroDivisionError: | ||
+ | print(' | ||
+ | else: | ||
+ | print(result) | ||
+ | | ||
+ | # Конструкция try/except может иметь необязательную группу finally, она выполняется независимо от того, были исключения или нет. | ||
+ | try: | ||
+ | result = 15 / 0 | ||
+ | except ZeroDivisionError: | ||
+ | print(' | ||
+ | finally: | ||
+ | print(' | ||
+ | </ | ||
+ | Необработанное исключение приводит к остановке выполнения программы. Исключение может быть необработанным, | ||
+ | |||
+ | ===== Списки и кортежи ===== | ||
+ | // | ||
+ | - // | ||
+ | - // | ||
+ | |||
+ | // | ||
+ | |||
+ | <code python> | ||
+ | # Списки | ||
+ | nums = [2, 4, 6, 8, 10] | ||
+ | names = [' | ||
+ | info = [' | ||
+ | |||
+ | # Функция list() преобразует некоторые типы объектов в списки | ||
+ | list(range(5)) # даст [0, 1, 2, 3, 4] | ||
+ | |||
+ | # * становится оператором повторения, | ||
+ | repeat = [1,2,3] * 3 | ||
+ | print(repeat) | ||
+ | [1, 2, 3, 1, 2, 3, 1, 2, 3] | ||
+ | |||
+ | # Обход списка в for | ||
+ | numbers = [2, 4, 6, 8, 10] | ||
+ | for num in numbers: | ||
+ | print(num) | ||
+ | | ||
+ | # Индексы | ||
+ | numbers[0] # 2 | ||
+ | numbers[1] # 4 | ||
+ | numbers[-1] # 10 | ||
+ | numbers[5] # Исключение IndexError | ||
+ | |||
+ | # Длина последовательности - len() | ||
+ | numbers = [2, 4, 6, 8, 10] | ||
+ | index = 0 | ||
+ | while index < len(numbers): | ||
+ | print(numbers[index]) | ||
+ | index += 1 | ||
+ | |||
+ | # Обход списка по индексу | ||
+ | numbers = [2, 4, 6, 8, 10] | ||
+ | for index in range(len(numbers)): | ||
+ | print(numbers[index]) | ||
+ | | ||
+ | # Изменение списка. Изменить можно только существующие индексы. | ||
+ | numbers = [2, 4, 6, 8, 10] | ||
+ | numbers[0] = 1 # [1, 4, 6, 8, 10] | ||
+ | numbers[5] = 12 # исключение IndexError | ||
+ | # Можно сначала создать список, | ||
+ | numbers = [0] * 6 | ||
+ | n = 11 | ||
+ | for i in range(len(numbers)): | ||
+ | numbers[i] = n | ||
+ | n += 1 | ||
+ | print(numbers) # [11, 12, 13, 14, 15, 16] | ||
+ | |||
+ | # Конкатенация (слияние) списков | ||
+ | list1 = [1,2,3] | ||
+ | list1 = [4,5,6] | ||
+ | list3 = list1 + list2 # [1, 2, 3, 4, 5, 6] | ||
+ | # Можно так: | ||
+ | list1 += list2 # list1 будет [1, 2, 3, 4, 5, 6] | ||
+ | |||
+ | # Нарезка списка - [< | ||
+ | numbers = [2, 4, 6, 8, 10] | ||
+ | print(numbers[1: | ||
+ | print(numbers[2: | ||
+ | # Если начальный индекс не указан, | ||
+ | print(numbers[: | ||
+ | # Если конечный индекс не указан, | ||
+ | print(numbers[3: | ||
+ | print(numbers[-3: | ||
+ | # Если не указаны оба индекса, | ||
+ | print(numbers[: | ||
+ | print(numbers) | ||
+ | # Указание шага: | ||
+ | print(numbers[:: | ||
+ | print(numbers[1:: | ||
+ | # Если в нарезке списка указать несуществующие индексы, | ||
+ | print(numbers[-888:: | ||
+ | print(numbers[1: | ||
+ | print(numbers[777: | ||
+ | </ | ||
+ | |||
+ | ==== Поиск и методы обработки списков ==== | ||
+ | <code python> | ||
+ | # Поиск выполняется при помощи инструкции in | ||
+ | if num in [122, | ||
+ | print(' | ||
+ | | ||
+ | # append(value) - добавить значение в конец списка | ||
+ | numbers = [2, 4, 6, 8, 10] | ||
+ | numbers.append(12) | ||
+ | print(numbers) # [2, 4, 6, 8, 10, 12] | ||
+ | |||
+ | # index(value) - индекс первого совпавшего значения. Если значение не найдено - исключение ValueError. | ||
+ | print(numbers.index(6)) # 2 | ||
+ | |||
+ | # insert(index, | ||
+ | numbers.insert(3, | ||
+ | print(numbers) # [2, 4, 6, 7, 8, 10] | ||
+ | |||
+ | # sort() - сортировка по значениям | ||
+ | numbers = [46, 2, 69, 28, 15] | ||
+ | numbers.sort() | ||
+ | print(numbers) # [2, 15, 28, 46, 69] | ||
+ | |||
+ | # remove(value) - удалить первое совпавшее значение. Если значение не найдено - исключение ValueError. | ||
+ | numbers = [46, 5, 69, 5, 15] | ||
+ | numbers.remove(5) | ||
+ | print(numbers) # [46, 69, 5, 15] | ||
+ | |||
+ | # Удалить конкретный индекс | ||
+ | numbers = [46, 5, 69, 5, 15] | ||
+ | del numbers[2] | ||
+ | print(numbers) # [46, 5, 5, 15] | ||
+ | |||
+ | # reverse() - инвертировать порядок значений | ||
+ | numbers = [46, 2, 69, 28, 15] | ||
+ | numbers.reverse() | ||
+ | print(numbers) # [15, 28, 69, 2, 46] | ||
+ | |||
+ | # min(), max() - минимальное и максимальное значение | ||
+ | numbers = [46, 5, 69, 5, 15] | ||
+ | print(min(numbers)) # 5 | ||
+ | print(max(numbers)) # 69 | ||
+ | |||
+ | # Двумерный список | ||
+ | names = [[" | ||
+ | print(names[1][0]) # Оля | ||
+ | </ | ||
+ | |||
+ | ==== Копирование списков ==== | ||
+ | <code python> | ||
+ | numbers = [2, 4, 6, 8, 10] | ||
+ | numbers2 = numbers # теперь обе переменные ссылаются на один и тот же объект в памяти | ||
+ | # Если изменить один объект, | ||
+ | numbers[0] = 222 | ||
+ | print(numbers2) # [222, 4, 6, 8, 10] | ||
+ | |||
+ | # Чтобы сделать копию, но отдельную: | ||
+ | numbers2 = [] | ||
+ | for i in numbers: | ||
+ | numbers2.append(i) | ||
+ | # Другой вариант: | ||
+ | numbers2 = [] + numbers | ||
+ | </ | ||
+ | |||
+ | ==== Некоторые функции ==== | ||
+ | |||
+ | <code python> | ||
+ | numbers = [2, | ||
+ | # Случайный выбор элемента списка | ||
+ | import random | ||
+ | print(random.choice(numbers)) | ||
+ | # Случайные 3 элемента (может содержать повторяющиеся элементы) | ||
+ | print(random.choices(numbers, | ||
+ | # Случайные 3 уникальных элемента | ||
+ | print(random.sample(numbers, | ||
+ | |||
+ | # Минимальное значение | ||
+ | print(min(numbers)) | ||
+ | |||
+ | # Строки из файла в массив | ||
+ | file = open(r' | ||
+ | array = file.readlines() | ||
+ | print(array[5]) | ||
+ | file.close() | ||
+ | |||
+ | # Записать массив в файл (нужно подавать на вход строки, | ||
+ | names = [" | ||
+ | file = open(r' | ||
+ | file.writelines(names) | ||
+ | file.close() | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Включение в список ==== | ||
+ | Создание нового списка путём копирования значений из другого. | ||
+ | <code python> | ||
+ | numbers = [2, | ||
+ | # Вариант 1 - через цикл. Здесь значения numbers добавляются к значениям numbers2 | ||
+ | numbers2 = [] | ||
+ | for i in numbers: | ||
+ | numbers2.append(i) | ||
+ | # Вариант 2 - " | ||
+ | numbers2 = [i for i in numbers] | ||
+ | |||
+ | # Действия со значениями, | ||
+ | numbers2 = [i**2 for i in numbers] | ||
+ | |||
+ | # Длина значений | ||
+ | names = [" | ||
+ | names_length = [len(i) for i in names] | ||
+ | |||
+ | # Проверка условия перед включением в список | ||
+ | numbers = [2, | ||
+ | numbers2 = [] | ||
+ | for i in numbers: | ||
+ | if i >= 5: | ||
+ | numbers2.append(i) | ||
+ | # Вариант 2 | ||
+ | numbers2 = [i for i in numbers if i >= 5] | ||
+ | # Ещё пример | ||
+ | short_names = [name for name in names if len(name) < 6] | ||
+ | </ | ||
+ | |||
+ | ==== Кортеж ==== | ||
+ | Тот же список, | ||
+ | |||
+ | Кортежи поддерживают те же методы, | ||
+ | * Доступ к элементам по индексам (для получения их значений) | ||
+ | * Методы, | ||
+ | * Встроенные функции, | ||
+ | * Выражения среза | ||
+ | * Оператор '' | ||
+ | * Операторы + и * | ||
+ | Кортежи не поддерживают методы '' | ||
+ | <code python> | ||
+ | # Создать кортеж | ||
+ | my_tuple = (1,2,3,4,5) | ||
+ | # Последовательно отобразить элементы | ||
+ | for i in my_tuple: | ||
+ | print(i) | ||
+ | |||
+ | # Создать кортеж с одним элементом (нужна запятая после значения, | ||
+ | my_tuple = (1,) | ||
+ | |||
+ | # Преобразование кортежа в список и наоборот | ||
+ | my_list = list(my_tuple) | ||
+ | my_tuple = tuple(my_list) | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== График ==== | ||
+ | <code bash> | ||
+ | # Установка доп. компонента (Windows) | ||
+ | pip install matplotlib | ||
+ | # Linux | ||
+ | sudo pip3 install matplotlib | ||
+ | </ | ||
+ | |||
+ | {{ .: | ||
+ | <code python> | ||
+ | # Импорт с алиасом, | ||
+ | import matplotlib.pyplot as plt | ||
+ | |||
+ | # Задание координат | ||
+ | x = [0,1,2,3,4, 5, 6,7] | ||
+ | y = [0, | ||
+ | # Нарисовать график с метками точек в виде ромба | ||
+ | plt.plot(x, | ||
+ | # Если передать параметр маркера как позиционный, | ||
+ | # то будут нарисованы только маркеры без линий | ||
+ | # plt.plot(x, | ||
+ | # Надписи | ||
+ | plt.title(" | ||
+ | plt.xlabel(" | ||
+ | plt.ylabel(" | ||
+ | # Границы осей | ||
+ | plt.xlim(xmin=-1, | ||
+ | plt.ylim(ymin=-1, | ||
+ | # Подписи делений | ||
+ | plt.xticks([1, | ||
+ | plt.yticks([-1, | ||
+ | # Отображать сетку | ||
+ | plt.grid(True) | ||
+ | plt.show() | ||
+ | </ | ||
+ | |||
+ | ==== Гистограмма ==== | ||
+ | {{ .: | ||
+ | <code python> | ||
+ | import matplotlib.pyplot as plt | ||
+ | # Задание координат | ||
+ | x = [0, | ||
+ | y = [100, | ||
+ | # Ширина столбика (по умолчанию 0.8) | ||
+ | width = 10 | ||
+ | # Нарисовать, | ||
+ | plt.bar(x, | ||
+ | plt.title(' | ||
+ | plt.xlabel(' | ||
+ | plt.ylabel(' | ||
+ | plt.xticks([5, | ||
+ | plt.yticks([0, | ||
+ | plt.show() | ||
+ | </ | ||
+ | |||
+ | ==== Круговая диаграмма ==== | ||
+ | {{ .: | ||
+ | <code python> | ||
+ | import matplotlib.pyplot as plt | ||
+ | sales = [100, | ||
+ | labels = ['I квартал',' | ||
+ | plt.pie(sales, | ||
+ | plt.title(' | ||
+ | plt.show() | ||
+ | </ | ||
+ | |||
+ | |||
+ | стр 427 (pdf 452) | ||
+ | ====== Проблемы и их решение ====== | ||
+ | |||
+ | ===== pip: Fatal error in launcher: Unable to create process ===== | ||
+ | После установки новой версии питона и удаления старой. Помогло удаление каталогов старых версий в '' | ||
+ | |||
+ | https:// | ||
+ | |||