Найти - Пользователи
Полная версия: А что не так? Мое решение задачки...
Начало » Python для новичков » А что не так? Мое решение задачки...
1
Alexino
Всем привет!
Требуется решить задачку:
Реализуйте функцию 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
  
————————————————-
Alexino
Мое решение:
FishHook
Alexino
а преподавателю ты тоже скриншоты своих программ показываешь?
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
Alexino
функция должна возвращать результат, а не печатать его в stdout
py.user.next
  
>>> 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'
>>>
Alexino
py.user.next
Спасибо, работает).
А проверку условия start и end не больше длины строки text делать?
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
>>>
Alexino
py.user.next
def choice_from_range(text, start, end):
… if start < 0:
… raise ValueError('incorrect start')
… elif end >= len(text):
… raise ValueError('incorrect end')

——————-

Super!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB