книга заданий пайтон. книга практических заданий, pyton. Сборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python
Скачать 2.24 Mb.
|
Упражнение 130. Унарные и бинарные операторы## # Устанавливаем разницу между унарными и бинарными операторами + и – # from token_list import tokenList ## Определяем появление унарных операторов + и – в списке лексем и # меняем их на u+ и u– соответственно # @param tokens – список лексем, который может содержать унарные операторы + и – # @return список лексем с заменой унарных операторов + и – на u+ и u– def identifyUnary(tokens): retval = [] # Обрабатываем каждую лексему в списке for i in range(len(tokens)): # Если первая лексема – это + или –, то это унарный оператор if i == 0 and (tokens[i] == "+" or tokens[i] == "–"): retval.append("u" + tokens[i]) # Если это лексема + или –, а предыдущая лексема являлась # оператором или открывающей скобкой, то это унарный оператор elif i>0and (tokens[i] == "+" or tokens[i] == "–") and \ (tokens[i–1] == "+" or tokens[i–1] == "–" or tokens[i–1] == "*" or tokens[i–1] == "/" or tokens[i–1] == "("): retval.append("u" + tokens[i]) # Любая другая лексема свидетельствует о том, что это бинарный оператор, # так что он добавляется к списку без изменений else: retval.append(tokens[i]) # Возвращаем новый список лексем с измененными унарными операторами return retval # Демонстрируем выполнение пометки унарных операторов def main(): # Запрашиваем выражение у пользователя, разбиваем на лексемы и отображаем результат exp = input("Введите математическое выражение: ") tokens = tokenList(exp) print("Лексемы:", tokens) # Идентифицируем список унарных операторов marked = identifyUnary(tokens) print("С помеченными унарными операторами: ", marked) # Вызываем основную функцию, только если программа не была импортирована как модуль if __name__ == "__main__": main() Упражнение 134. Все подсписки заданного списка## # Находим все подсписки в заданном списке # ## Создаем список из всех подсписков заданного списка
# @param data – список, в котором выполняется поиск подсписков # @return список из всех подсписков исходного списка def allSublists(data): # Начинаем с добавления пустого списка sublists = [[]] # Генерируем подсписки длиной от 1 до len(data) for length in range(1, len(data) + 1): # Генерируем подсписки начиная с каждого индекса for i in range(0, len(data) – length + 1): # Добавляем найденный подсписок к общему списку sublists.append(data[i : i + length]) # Возвращаем результат return sublists # Демонстрируем работу функции allSublists def main(): print("Подсписки []: ") print(allSublists([])) print("Подсписки [1]: ") print(allSublists([1])) print("Подсписки [1, 2]: ") print(allSublists([1, 2])) print("Подсписки [1, 2, 3]: ") print(allSublists([1, 2, 3])) print("Подсписки [1, 2, 3, 4]: ") print(allSublists([1, 2, 3, 4])) # Вызов основной программы main() Упражнение 135. Решето Эратосфена## # Определяем все простые числа от 2 до значения, введенного пользователем, # при помощи алгоритма "Решето Эратосфена" # # Запрашиваем у пользователя конечное значение limit = int(input("Вывести простые числа вплоть до какого значения? ")) # Создаем список для чисел от 0 до limit nums = [] for i in range(0, limit + 1): nums.append(i) # "Вычеркиваем" единицу, заменяя ее на ноль nums[1] = 0 # Вычеркиваем числа, кратные всем найденным простым числам p = 2 while p < limit: # Вычеркиваем все числа, кратные p, но не его само for i in range(p * 2, limit + 1, p): nums[i] = 0 # Находим следующее "невычеркнутое" число p = p + 1 while p < limit and nums[p] == 0: p = p + 1 # Отображаем результат print("Простые числа вплоть до", limit, ":") for i in nums: if nums[i] != 0: print(i) Глава 14 СловариУпражнение 136. Поиск по значению## # Проводим поиск всех ключей в словаре по заданному значению # ## Поиск в словаре по значению # @param data – словарь для поиска
# @param value – искомое значение # @return список (возможно, пустой) ключей, соответствующих искомому значению def reverseLookup(data, value): # Создаем список ключей для заданного значения keys = [] # Проверяем каждый ключ и добавляем в список, # если он соответствует искомому значению for key in data: if data[key] == value: keys.append(key) # Возвращаем список ключей return keys # Демонстрируем работу reverseLookup def main(): # Словарь соответствий французских слов английским frEn = {"le" : "the", "la" : "the", "livre" : "book", \ "pomme" : "apple"} # Показываем работу функции reverseLookup для трех случаев: # для множества ключей, одного ключа и отсутствия ключей print("Перевод английского слова 'the' на французский: ", \ reverseLookup(frEn, "the")) print("Ожидаемый результат: ['le', 'la']") print() print("Перевод английского слова 'apple' на французский: ", \ reverseLookup(frEn, "apple")) print("Ожидаемый результат: ['pomme']") print() print("Перевод английского слова 'asdf' на французский: ", \ reverseLookup(frEn, "asdf")) print("Ожидаемый результат: []") # Вызываем основную функцию, только если файл не был импортирован в качестве модуля if __name__ == "__main__": main() |