learning:py
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
learning:py [08.02.2024 17:25] – [Циклы] viacheslav | learning:py [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 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. | ||
+ | |||
+ | # {местозаполнитель: | ||
+ | |||
+ | </ | ||
+ | стр 80 | ||
+ | |||
+ | ===== Проблемы и их решение ===== | ||
+ | |||
+ | ==== pip: Fatal error in launcher: Unable to create process ==== | ||
+ | После установки новой версии питона и удаления старой. Помогло удаление каталогов старых версий в '' | ||
+ | |||
+ | https:// | ||
+ | |||