myRange(start=None, stop=10, step=None):
Работа с stop=10
Вы устанавливаете значение по умолчанию stop = 10
. Тем не менее, вы создали было предложено имитировать встроенную функцию диапазона. Встроенный диапазон не имеет значения по умолчанию stop=10
. Поэтому не устанавливайте значение по умолчанию в вашей версии, если в оригинале нет значения по умолчанию
Минимальное количество необходимых аргументов
У вашего myRange
есть 3 значения по умолчаниюаргументы. Вы когда-нибудь видели следующий код?
for x in range():
print(x)
Подсказка: range
требуется хотя бы один аргумент.
Значение по умолчанию для запуска
10
- остановка. Какое первое число напечатано следующим кодом? Это 0
? Это 1
? 2
? 5
? 10
? Что это?
for x in range(10):
print(x)
Поместите print
за пределы myRange
Блок кода с отступом не должен содержать каких-либо операторов печати
def myRange(start=None, stop=10, step=None):
lyst = (list(range(stop)))
# print (lyst) Noooo!
lyst = myRange()
print(lyst) # YES!
Вам нужен оператор return
Если у функции есть вывод, мы пишем return output
Вы должны вернуть list
Эта функция должна вести себя как стандартная функция диапазона Python с обязательными и необязательными аргументами , но должна возвращать список .
def myRange(start=None, stop=10, step=None):
lyst = list(range(stop))
# print (lyst) Noooo!
return lyst # New feature! return the output:)
lyst = myRange()
print(lyst) # YES!
Редактировать
Я решил дать вам подпись функции. Вам все равно придется заполнить тело. Не беспокойтесь о большей части кода, оставьте его в покое. Просто напишите свой код в самом конце, заменив print("start:", start, "stop:", stop, "step:", step)
is_none = lambda x:\
x == None
count_non_none = lambda args, *, is_none=is_none: {\
sum(1 for _ in filter(is_none, args))
}
def myRange(_a1, _a2=None, _a3=None, *, start=None, stop=None, step=None):
args_non_none = count_non_none((_a1, _a2, _a3))
kwargs_non_none = count_non_none((start, stop, step))
total_non_none = args_non_none + kwargs_non_none
if total_non_none == 1:
# the one arg represents `stop`
assert(not start)
assert(not step)
stop = stop if stop else _a1
elif total_non_none == 2:
if args_non_none == 2:
start = _a1
stop = _a2
else # at least one keyword argument
assert(not (start and step))
L = [_a1, _a2, _a3]
while len(L) > 0:
if not start:
start = L.pop(0)
elif not stop:
stop = L.pop(0)
elif not step:
step = L.pop(0)
elif total_non_none == 3:
L = [_a1, _a2, _a3]
while len(L) > 0:
if not start:
start = L.pop(0)
elif not stop:
stop = L.pop(0)
elif not step:
step = L.pop(0)
else:
raise TypeError("more than 3 arguments were passed in")
if start == None:
start = 0
if step == None:
step = 1
print("start:", start, "stop:", stop, "step:", step)