Форум сайта python.su
Всем привет!
Требуется решить задачку:
Реализуйте функцию choice_from_range(), которая принимает строку-набор и выбирает случайный символ по индексу из ограниченного диапазона.
Аргументы функции:
строка-набор
начальный индекс диапазона
конечный индекс диапазона
Пример:
text = "abcdef" choice_from_range(text, 3, 5) # d choice_from_range(text, 3, 5) # f choice_from_range(text, 3, 5) # e
Отредактировано FishHook (Июнь 30, 2022 16:22:16)
Офлайн
Мое решение:
Прикреплённый файлы:
Решение.jpg (51,8 KБ)
Офлайн
Alexino
а преподавателю ты тоже скриншоты своих программ показываешь?
Офлайн
FishHookМое решение:
Alexinoа преподавателю ты тоже скриншоты своих программ показываешь?
from random import randint def choice_from_range(text, a, b): if a < len(text) and a < b < len(text): random_index = randint(a, b) print(random_index) char = text[random_index] print(char) else: print('Длина строки = ', len(text)) print('Измените значения индексов a и b ')
Отредактировано FishHook (Июнь 30, 2022 16:40:47)
Офлайн
Alexino
функция должна возвращать результат, а не печатать его в stdout
Офлайн
>>> import random >>> >>> def choice_from_range(text, start, end): ... return text[random.randint(start, end)] ... >>> text = 'abcdef' >>> choice_from_range(text, 3, 5) 'f' >>> choice_from_range(text, 3, 5) 'e' >>> choice_from_range(text, 3, 5) 'e' >>> choice_from_range(text, 3, 5) 'e' >>> choice_from_range(text, 3, 5) 'e' >>> choice_from_range(text, 3, 5) 'f' >>> choice_from_range(text, 3, 5) 'e' >>> choice_from_range(text, 3, 5) 'd' >>>
Офлайн
py.user.nextСпасибо, работает).
Офлайн
AlexinoМожешь сделать, хотя обычно, если ошибка приводит к исключению, то можно не делать проверку. Нельзя допускать такие ошибки, которые тихо срабатывают и о них не узнают вообще.
А проверку условия start и end не больше длины строки text делать?
>>> import random >>> >>> def choice_from_range(text, start, end): ... if start < 0: ... raise ValueError('incorrect start') ... elif end >= len(text): ... raise ValueError('incorrect end') ... elif start > end: ... raise ValueError('incorrect both start and end') ... return text[random.randint(start, end)] ... >>> choice_from_range('abc', 0, 2) 'c' >>> choice_from_range('abc', -1, 2) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in choice_from_range ValueError: incorrect start >>> choice_from_range('abc', 0, 3) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 5, in choice_from_range ValueError: incorrect end >>> choice_from_range('abc', 2, 0) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 7, in choice_from_range ValueError: incorrect both start and end >>>
Офлайн
py.user.nextdef choice_from_range(text, start, end):
Офлайн