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:// | ||
| + | |||
