книга заданий пайтон. книга практических заданий, pyton. Сборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python
Скачать 2.24 Mb.
|
Упражнение 137. Две игральные кости## # Симуляция многократного выбрасывания двух игральных костей и сравнение # полученных результатов с ожидаемыми # from random import randrange NUM_RUNS = 1000 D_MAX = 6 ## Симуляция выбрасывания двух шестигранных игральных костей # @return общее количество очков, выпавших на двух костях def twoDice(): # Две кости d1 = randrange(1, D_MAX + 1) d2 = randrange(1, D_MAX + 1) # Возвращаем сумму return d1 + d2 # Симулируем многократное выбрасывание костей и отображаем результат def main(): # Составим словарь для ожидаемых значений expected = {2: 1/36, 3: 2/36, 4: 3/36, 5: 4/36, 6: 5/36, \ 7: 6/36, 8: 5/36, 9: 4/36, 10: 3/36, \ 11: 2/36, 12: 1/36} # Составим словарь для хранения результатов выбрасывания костей counts = {2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, \ 8: 0, 9: 0, 10: 0, 11: 0, 12: 0} Словари изначально инициализированы ключами от 2 до 12. В словаре expected значения заполнены в соответствии с теорией вероятностей, тогда как в словаре counts изначально стоят нули, которые будут меняться в процессе симуляции выбрасывания костей. Словари 215 # Проведение NUM_RUNS симуляций и подсчет результатов for i in range(NUM_RUNS): t = twoDice() counts[t] = counts[t] + 1 # Сравниваем ожидаемые результаты с реальными print("Всего Реальный Ожидаемый") print(" процент процент") for i in sorted(counts.keys()): print("%5d %9.2f %10.2f" % \ (i, counts[i] / NUM_RUNS * 100, expected[i] * 100)) # Вызов основной функции main() Упражнение 142. Уникальные символы## # Считаем уникальные символы в строке при помощи словаря # # Запрашиваем строку у пользователя s = input("Введите строку: ") # Добавляем каждый символ в словарь со значением True. После окончания процедуры # количество ключей в словаре и будет отражать число уникальных символов characters = {} for ch in s: characters[ch] = True Каждому ключу в словаре должно соответствовать значение. Но в нашем примере эти значения никогда не будут использованы, так что мы решили применить True. Вместо него мы могли использовать любое другое значение. # Отображаем результат print("Строка содержит", len(characters), \ "уникальных символов.") Функция len возвращает количество ключей в словаре. Упражнение 143. Анаграммы## # Определяем, являются ли два введенных пользователем слова анаграммами # ## Рассчитываем распределение частоты появления символов в строке # @param s – строка для обработки # @return словарь с количеством символов в строке def characterCounts(s): # Создаем пустой словарь counts = {} # Обновляем словарь для каждого символа в строке for ch in s: if ch in counts: counts[ch] = counts[ch] + 1 else: counts[ch] = 1 # Возвращаем результат return counts # Определяем, являются ли строки, введенные пользователем, анаграммами def main(): # Запрашиваем строки у пользователя s1 = input("Введите первую строку: ") s2 = input("Введите вторую строку: ") # Вызываем функцию для двух введенных строк counts1 = characterCounts(s1) counts2 = characterCounts(s2) # Выводим результат if counts1 == counts2: print("Введенные строки являются анаграммами.") else: print("Введенные строки не являются анаграммами.") Два словаря считаются равными, если содержат одинаковое количество ключей и те же самые ассоциированные с ними значения. # Вызов основной функции main() Упражнение 145. Эрудит## # Используем словарь для подсчета количества очков за собранное слово в Эрудите # # Создаем словарь с соответствием букв и очков за них points = {"A": 1, "B": 3, "C": 3, "D": 2, "E": 1, "F": 4, \ Словари 217 "G": 2, "H": 4, "I": 1, "J": 2, "K": 5, "L": 1, \ "M": 3, "N": 1, "O": 1, "P": 3, "Q": 10, "R": 1, \ "S": 1, "T": 1, "U": 1, "V": 4, "W": 4, "X": 8, "Y": 4, "Z": 10}
# Запрашиваем у пользователя слово word = input("Введите слово: ") # Считаем количество очков uppercase = word.upper() score = 0 for ch in uppercase: score = score + points[ch] # Выводим результат print(word, "оценивается в", score, "очков.") |