def r(g):
----if len(g) != 0:
---------ans = g[0] + r(g[1:])
----return ans
g = [5,6,7,8,9]
r(g)
Python
Вопрос: что вернется, если len(g) == 0?
Переменная ans не задана, чему она может быть равна?
Второй вопрос: как переделать программу, чтобы эта ошибка не возникала?
Программирование на питоне
Вот Ваша программа:
Скажите что надо делать - сделаем. И все ошибки пофиксим.
def r(g):
if len(g) != 0:
ans = g[0] + r(g[1:])
return ans
g = [5,6,7,8,9]
r(g)
А вот результат её работы: Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File "", line 6, in
File "", line 3, in r
File "", line 3, in r
File "", line 3, in r
[Previous line repeated 2 more times]
File "", line 4, in r
UnboundLocalError: local variable 'ans' referenced before assignment
[Program finished]
Такой вариант тоже ошибочный: def r(g):
if len(g) != 0:
ans = g[0] + r(g[1:])
return ans
g = [5,6,7,8,9]
r(g)
И такой: def r(g):
if len(g) != 0:
ans = [g[0]] + r(g[1:])
return ans
g = [5,6,7,8,9]
r(g)
Скажите что надо делать - сделаем. И все ошибки пофиксим.
Delavar Delavaras
почему выдает ошибку?
Delavar Delavaras
надо сделать так, что бы не выдавало ошибку
Delavar Delavaras
так напиши нормальный код
Нурбек Даулетбеков
print(r(g))
def r(g):
if len(g) != 0:
ans = g[0] + r(g[1:])
return ans
Если len(g) != 0, тогда задается значение переменной ans, а затем возвращается ее значение.Вопрос: что вернется, если len(g) == 0?
Переменная ans не задана, чему она может быть равна?
Второй вопрос: как переделать программу, чтобы эта ошибка не возникала?
Данный фрагмент кода на Python реализует рекурсивную функцию, которая принимает на вход список `g` и суммирует все его элементы.
В данной функции используется условие, которое проверяет, что длина списка `g` не равна нулю. Если это условие истинно, то функция рекурсивно вызывает саму себя и передает в нее срез списка `g[1:]` (т.е. все элементы списка, начиная с индекса 1 и до конца). Затем к первому элементу списка `g[0]` прибавляется результат вызова рекурсивной функции, и результат сохраняется в переменной `ans`. Если же длина списка `g` равна нулю, то функция возвращает нулевое значение `ans`.
На верхнем уровне функция вызывается с аргументом `g = [5,6,7,8,9]`. В результате выполнения функции будет возвращено значение `35`, т.е. сумма всех элементов списка `g`.
В данной функции используется условие, которое проверяет, что длина списка `g` не равна нулю. Если это условие истинно, то функция рекурсивно вызывает саму себя и передает в нее срез списка `g[1:]` (т.е. все элементы списка, начиная с индекса 1 и до конца). Затем к первому элементу списка `g[0]` прибавляется результат вызова рекурсивной функции, и результат сохраняется в переменной `ans`. Если же длина списка `g` равна нулю, то функция возвращает нулевое значение `ans`.
На верхнем уровне функция вызывается с аргументом `g = [5,6,7,8,9]`. В результате выполнения функции будет возвращено значение `35`, т.е. сумма всех элементов списка `g`.
Результат выполнения данного кода будет равен сумме всех элементов списка g, то есть 5+6+7+8+9 = 35.
Объяснение работы функции:
1. На вход функции передается список g.
2. Если длина списка не равна нулю, то выполняется следующее:
3. В переменную ans записывается сумма первого элемента списка и результата выполнения функции r с оставшейся частью списка (то есть без первого элемента).
4. Результат функции - переменная ans.
5. В данном примере r вызывается рекурсивно 4 раза, пока не будет достигнут базовый случай, когда длина списка равна нулю.
Объяснение работы функции:
1. На вход функции передается список g.
2. Если длина списка не равна нулю, то выполняется следующее:
3. В переменную ans записывается сумма первого элемента списка и результата выполнения функции r с оставшейся частью списка (то есть без первого элемента).
4. Результат функции - переменная ans.
5. В данном примере r вызывается рекурсивно 4 раза, пока не будет достигнут базовый случай, когда длина списка равна нулю.
Данный код рекурсивно обходит список чисел g и вычисляет их сумму.
При первом вызове функции r передается список [5, 6, 7, 8, 9]. Если длина списка не равна 0 (что верно для данного случая), то функция берет первый элемент списка g[0] и прибавляет результат рекурсивного вызова функции r для оставшихся элементов списка g[1:]. Этот процесс продолжается до тех пор, пока в списке не останется элементов.
В результате функция r вернет сумму всех элементов списка g.
Для списка [5, 6, 7, 8, 9] результат выполнения данной функции будет равен 35.
Вы можете убедиться в этом, запустив данный код:
def r(g):
if len(g) != 0:
ans = g[0] + r(g[1:])
return ans
g = [5,6,7,8,9]
print(r(g)) # Output: 35
При первом вызове функции r передается список [5, 6, 7, 8, 9]. Если длина списка не равна 0 (что верно для данного случая), то функция берет первый элемент списка g[0] и прибавляет результат рекурсивного вызова функции r для оставшихся элементов списка g[1:]. Этот процесс продолжается до тех пор, пока в списке не останется элементов.
В результате функция r вернет сумму всех элементов списка g.
Для списка [5, 6, 7, 8, 9] результат выполнения данной функции будет равен 35.
Вы можете убедиться в этом, запустив данный код:
def r(g):
if len(g) != 0:
ans = g[0] + r(g[1:])
return ans
g = [5,6,7,8,9]
print(r(g)) # Output: 35
Похожие вопросы
- Программирование на питон
- Решение задачи по программированию (желательно питон) Сложность O(квадрат(n))
- Программирование на питоне
- Программирование в питоне помогите
- Программирование на питоне .Нужно решить долго мучаюсь на этой задаче
- Программирование на питоне
- Программирование на питон, нужно написать программу
- Программирование на Питоне
- Программирование на питоне
- Программирование на питон