В настоящее время я изучаю CS61A и выполняю задания по следующим темам.
Проблема описана следующим образом.
Я дал первое решение.
Но оно вызвал ошибку RecursionError.
def stair_ways(n):
"""
Yield all the ways to climb a set of n stairs taking
1 or 2 steps at a time.
>>> list(stair_ways(0))
[[]]
>>> s_w = stair_ways(4)
>>> sorted([next(s_w) for _ in range(5)])
[[1, 1, 1, 1], [1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2]]
>>> list(s_w) # Ensure you're not yielding extra
[]
"""
if n == 0:
yield []
if n == 1:
yield [1]
else:
for i in stair_ways(n-1):
yield [1]+i
for i in stair_ways(n-2):
yield [2]+i
n=4
result = stair_ways(n)
print([next(result) for i in range(5)])
Traceback (most recent call last):
File "E:\Code\CS61A\test.py", line 150, in
print([next(result) for i in range(5)])
^^^^^^^^^^^^
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
File "E:\Code\CS61A\test.py", line 145, in stair_ways
for i in stair_ways(n-2):
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
File "E:\Code\CS61A\test.py", line 143, in stair_ways
for i in stair_ways(n-1):
[Previous line repeated 993 more times]
RecursionError: maximum recursion depth exceeded
Затем я изменил оператор if на оператор elif и получил правильный результат.
def stair_ways(n):
if n == 0:
yield []
elif n == 1:
yield [1]
else:
for i in stair_ways(n-1):
yield [1]+i
for i in stair_ways(n-2):
yield [2]+i
n=4
result = stair_ways(n)
print([next(result) for i in range(5)])
Поэтому мне интересно, почему это изменение заставило программу дать правильный ответ.
Спасибо!
Что случилось с программой, когда Я изменил оператор if на оператор elif, который дал правильный ответ.
В настоящее время я изучаю CS61A и выполняю задания по следующим темам. Проблема описана следующим образом. Я дал первое решение. Но оно вызвал ошибку RecursionError. [code]def stair_ways(n): """ Yield all the ways to climb a set of n stairs taking 1 or 2 steps at a time.
>>> list(stair_ways(0)) [[]] >>> s_w = stair_ways(4) >>> sorted([next(s_w) for _ in range(5)]) [[1, 1, 1, 1], [1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2]] >>> list(s_w) # Ensure you're not yielding extra [] """ if n == 0: yield [] if n == 1: yield [1] else: for i in stair_ways(n-1): yield [1]+i for i in stair_ways(n-2): yield [2]+i
n=4 result = stair_ways(n) print([next(result) for i in range(5)]) [/code] [code]Traceback (most recent call last): File "E:\Code\CS61A\test.py", line 150, in print([next(result) for i in range(5)]) ^^^^^^^^^^^^ File "E:\Code\CS61A\test.py", line 143, in stair_ways for i in stair_ways(n-1): File "E:\Code\CS61A\test.py", line 143, in stair_ways for i in stair_ways(n-1): File "E:\Code\CS61A\test.py", line 145, in stair_ways for i in stair_ways(n-2): File "E:\Code\CS61A\test.py", line 143, in stair_ways for i in stair_ways(n-1): File "E:\Code\CS61A\test.py", line 143, in stair_ways for i in stair_ways(n-1): File "E:\Code\CS61A\test.py", line 143, in stair_ways for i in stair_ways(n-1): [Previous line repeated 993 more times] RecursionError: maximum recursion depth exceeded
[/code] Затем я изменил оператор if на оператор elif и получил правильный результат. [code]def stair_ways(n): if n == 0: yield [] elif n == 1: yield [1] else: for i in stair_ways(n-1): yield [1]+i for i in stair_ways(n-2): yield [2]+i
n=4 result = stair_ways(n) print([next(result) for i in range(5)]) [/code] [code]>>> [[1, 1, 1, 1], [1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2]] [/code] Поэтому мне интересно, почему это изменение заставило программу дать правильный ответ. Спасибо! Что случилось с программой, когда Я изменил оператор if на оператор elif, который дал правильный ответ.
Итак, в настоящее время у меня есть фрейм данных, в котором я пытаюсь обработать данные, выполняя цикл for по всем строкам для оценки каждой строки. Однако это происходит очень медленно. Я пытаюсь найти способы ускорить этот процесс, пытаясь...
Я пытаюсь создать генератор случайных чисел для рисунков и цветов кошачьей шерсти.
Сначала мой генератор выбирает рисунок шерсти. Это может быть полосатый, ситцевый и т. д.
Затем он выберет цвет шерсти в зависимости от рисунка. У ситцевого цвета...
Я хотел бы иметь канал YouTube на французском языке, чтобы изучить программирование на Python
Мне нужны те, кто уже прошел через это, чтобы помочь мне, наконец, потому что я не Не запутайтесь при выборе видео. Спасибо большое
Я пытаюсь решить эту программу ввода оценок. Мне нужно ввести оценки от 0,6 до 1,0 и присвоить им буквенное значение. Я могу использовать только метод if else, поскольку мы еще не дошли до других методов в классе...