Действительно... крайне качественный контент, я ну оооочень долго и много перерыл курсов пока не нашел именно этот, странно, что просмотров нет........... Артем, запили видосы по классам пожалуйста.
Задача с таймтега 6:00 def f(x): if len(x)==0: return x if x[0]=='(': return x[0] + f(x[1:]) + ')' return x[0] + f(x[1:]) + x[0] x=input() print(f(x)) не знаю как, но работает)
я тоже много над этим задумался но понял что здесь нужно одно условия которое будет немножко не в тему но и не будет задеть код, не нашел вариантов, увидел твое предложения и подумал что это гениально, хотя думаю что есть решения и попроще
Забавный случай был с рекурсивной функцией. Я тогда ещё учился в школе, питон знал на приличном уровне. Учитель даёт задание, решает его - получается строк шесть без вызова функции. Я когда сдаю ей решение в одну у неё чуть глаза на лоб не вылезли. Забавно было очень.
вот так решил вторую задачу со скобочками def rev(s): if len(s) == 0: return s else: if s[0] == '(': return s[0] + rev(s[1:]) + ')' return s[0] + rev(s[1:]) + s[0]
Так пойдёт вторая задача со скобочками: stroka = input('enter the string:') def f(stroka): if len(stroka) == 0: return print(stroka[0],end='') f(stroka[1:]) if stroka[0] == '(': print(')',end='') else: print(stroka[0],end='') f(stroka) Сгодится на ваш взгляд,спасибо
Вот ещё один способ решения задачи на возведение в степень с использованием рекурсии (без проверки на чётность степени). Просто умножаем число на само себя n - 1 количество раз: def power(x, n): if n < 0: return 1 / power(x, -n) if n == 0: return 1 return x * power(x, n - 1) x, n = map(int, input().split()) print(power(x, n)) Но, несомненно, алгоритм, который вы описали в видео, будет работать быстрее, так как будет меньше рекурентных вызовов функции. И чем больше степень, тем ваш алгоритм будет работать быстрее по сравнению с вышеуказанным. Спасибо за отличную подачу материала)
Спасибо большое за уроки! Всё доступным и понятным языком. Узнала много полезного. Уточните пожалуйста в примере с возведением в степень: power (x,n) через запятую, как программа распознает, что это именно возведение в степень?
Задался этим вопросом и опечалился, когда увидел, что Ваш комментарий без ответа. Поэтому всем, у кого возник этот вопрос: распишите себе весь процесс на бумаге и увидите, что сам интерпретатор не в курсе, что здесь заложена операция возведения в степень, он просто выполняет умножение, согласно прописанным условиям.
Вот мой вариант решения задачи с тайм кода 10:10 def zadacha3(n, count=0): if len(str(n)) == 1: return n, count return zadacha3(n = sum((int(i) for i in list(str(n)))), count=count+1) print(zadacha3(99)) Вывод: (9, 2) Строка где возвращается рекурсия скорее всего тяжело читается, но сделал как сделал, главное что работает
Спасибо, Артем!! Надеюсь, с твоими уроками освою эту сложную тему. Решение задачи с зеркальными скобками def rec(s): if len(s)==0: return s if s[len(s)-1]=='(': s+=')' if s[len(s)-1].isalpha(): s+=s[len(s)-1] return s[len(s)-2] + rec(s[0:-2]) + s[len(s)-1] PS: честно, я почти сдалась, но решение пришло. правильное ли?
нумеролог def recursive_sum(n, s=0): return s + n if n < 10 else recursive_sum(n // 10, s + n % 10) def numerolog(n, level=0): print(n, level) if n < 10 else numerolog(recursive_sum(n), level+1) можно и через встроенный sum, но решила использовать рекурсию по максимуму вместо итерации)
1 задача про зеркальность: def rec(s): if len(s) == 1: return s + s return s[0] + rec(s[1:]) + s[0] 2 задача про нумерологию: def rec(x, n = 0): if len(str(x)) == 1: return x, n return rec(sum(list(map(int, str(x).strip()))), n + 1) x = int(input()) print(*rec(x)) начинаю лучше разбираться в рекурсиях, тема тяжеловатая
Ура , работает: def rec(str): if len(str)==1 or len(str)==2 or '(' not in str: return str return str[0:str.index('(')] + '(' + rec(str[str.index('(') + 1:]) + ')' + str[0:str.find('(')[::-1]
Отдельное спасибо за практические задания, учил рекурсию по другим лекциям, без практики было не все понятно, сейчас вроде разобрался окончательно задача 2: def rec(x): if len(x)==1: if x!="(": return x+x return "()" if x[0]!="(": return x[0]+ rec(x[1:])+x[0] return "(" + rec(x[1:])+ ")" x=input() print(rec(x))
4:10 почему начальная буква берется с индексом 0 и в рекурсии мы берём индекс 1 а конечная что в возврате -1 что в рекурсии -1. Не должно ли -2 быть в срезе?
Решение задачи "Нумеролог" a = int(input()) def rec(x, counter=0): s = 0 if x < 10: return x, counter for i in str(x): s += int(i) counter += 1 if s > 9: return rec(s, counter == 1) return s, counter print(*rec(a))
я так понял смысл рекурсии - уйти от циклов, а у Вас вышла рекурсия с циклом ))) ... хотя у меня и это не получилось. Вот, все что смог, сумма цифр считается, но не пойму как в рекурсию счетчик засунуть (чтоб без цикла). Если кто подскажет, буду благодарен def numerolog(n:int): if n
Задача со скобками: def rec(s): return s + s[::-1].replace('(', ')') Задача с нумерологом: def numerolog(n): return n if n < 10 else numerolog(sum(list(map(int, list(str(n))))))
ДЗ, не знаю куда нужно было скидывать, кидаю и сюда тоже Нумеролог: with open ('INPUT.TXT') - as inf: number=inf.radline() count=0 def numerolog(number,count): summa=0 if number
Решения задач со строками: 1. Звездочки def rec_stars(s): if len(s) == 1: return s else: return s[0] + '*' + rec_stars(s[1:]) 2. Отзеркалить строку и развернуть кавычки def rec_mirror(s): if len(s) == 1: return s if s != '(' else ')' else: return s[-1] + rec_mirror(s[:-1]) if s[-1] != '(' else ')' + rec_mirror(s[:-1])
Задача: Нумеролог. Я старался применить и рекурсию с вложенные функции. Спасибо автор!!! def asum(a): b = 0 for i in str(a): b += int(i) return b def text(a, count=0): if a < 10: return f'{a} {count}' return text(asum(a), count + 1) print(text(int(input())))
чуть лучше наверное так, как Артем показывал с уровнями, чтоб без глобальных переменных, а в целом действительно лучшее решение на чистой рекурсии: def q(a, c = 0): if a
Нумеролог: n=input() def numerolog(n,count=1,summ=0): if len(str(n))==1: return int(n),0 for i in (str(n)): summ+=int(i) if len(str(summ))!=1: return numerolog(summ,count+1,0) return summ,count print(*numerolog(n))
если хочется максимально коротко и с рекурсией то лучше уже такое def text(a, count=0): return f'{a} {count}' if a < 10 else text(a // 10 + a % 10, count + 1)
Подскажите, в этой строчке: return power(x, n//2) * power(x, n//2) - как так получается, что один аргумент - это степень, а другой - это число, почему одно возводится в другое, где инструкция чтобы икс возводился в степень n?
Добрый день, Артём. Не совсем поняла решение задачи по возведению в степень. Стараюсь перед вашим объяснением порешать сама и у меня получился вот такой вариант: def power(x,n): if n==1: return x if n==0: return 1 if n
Задачка про нумеролога) def predskazanie(a,Level=0): if len(a)==1: return int(a) , Level else: s=0 for i in range(len(a)): s+=int(a[i]) a=str(s) return predskazanie(a, Level+1) a=input() print(*predskazanie(a))
Дз (тем, кто не смог) про отзеркаливание Два варианта алгоритма def z1(s,l=''): if len(s)==0: return l if s[-1]=='(': l='('+l+')' else: l=s[-1]+l+s[-1] return z1(s[:-1],l) def z2(s): if len(s)==0: return s if s[0]=='(': return '('+z2(s[1:])+')' return s[0]+z2(s[1:])+s[0] print(z2('qw(w('))
🫵 Теория без практики - ничто, поэтому 👇 🐍 stepik.org/course/63085/promo 👉 специально для тебя создал бесплатный топовый курс по Python 👉 В нем тебя ждет: 📗 более 400 практических заданий на программирование 📗 более 250 тестовых заданий на проверку материала 📗 десятки часов видеоматерилов по теории 📗 видеоразборы решения заданий 📗 текстовые материалы по урокам, примеры кода 📗 доступ к закрытому чату с дружественной обстановкой 📗 сертификат в случае успешного прохождения курса
я почти также решила ) in_data = "(((t((p((y((kx((((e(((((((vw((v(e((v(m(((h(mlx((s((((d(y((((((((mtk(d(umi((s((sx(p((m(r((kq" def rec_2(sent): return sent + sent.replace('(', ')') print(rec_2(in_data))
Артем, как ты думаешь это оптимальное решение или можно лучше? : def numerolog(s,count=0): if len(s) == 1: return s,count return numerolog(s=str(sum([int(i) for i in s])), count=count+1) print(numerolog(input()))
Задачка №3 Сайт решение принял, но я не понял, как в функцию запихать саму строку. У меня выводит только "отзеракаленную" копию. Пришлось в принт запихать конкатенацию изначальной строки и ее копии Комрады, подскажите, может кто изящнее решил? def rec(s): if len(s) == 0: # Выход из рекурсии return s # Отщипываем первый символ и плюсуем его же return rec(s[1:]) + s[0].replace('(', ')') s = input() print(s+rec(s))
такие конструкции как if while for def должны содержать в себе блок команд на отступах после двоеточия. Этот блок не может быть пустым, то есть обязан состоять хотя бы из одной строчки. Иногда нужно оставить блок пустым(без каких либо действий), и вот для этого нужен pass. pass - пустой блок
Здравствуйте! Отличное объяснение, хотелось бы получить на счёт т.н. хвостатых рекурсий. И ещё как в рекурсии не получая пустой список как аргумент, объявить его чтобы он был объявлен не рекурсивно?
при определенной длине строки выдает ошибку не пойму почему def zvez(a): if len(a) == 1: return a return a[0] + "*" + zvez(a[1: -1]) + "*" + a[-1] a = "LItBeoFLcSGBOFQxMHoIuDDWcqcVgkcRoAeocX" print(zvez(a)) ошибка: return a[0] + "*" + zvez(a[1: -1]) + "*" + a[-1] [Previous line repeated 17 more times] IndexError: string index out of range
def zvez(a): if len(a) == 1 or len(a) ==2: return a return a[0] +"*"+zvez(a[1:-1])+"*"+ a[-1] a = "LItBeoFLcSGBOFQxMHoIuDDWcqcVgkcRoAeocX" print(zvez(a))
Вы проделали, конечно, большую работу и спасибо Вам за это. Но, как все это запомнить.. м. б. есть какие то методы? С первого раза запоминается очень обобщённо.
def power(x,n) вопрос - почему n идёт как степень числа x исходя из этой записи? К примеру есть функция pow, которая импортируется из math - там аргументы передаются как раз таким образом, но это ведь 2 разные функции - в одном случае та что мы сами пытаемся сделать, а во втором готовая встроенная
Можно параметры функции располагать в любом порядке, значит функцию можно было определить как def power(n,x) Затем, какой параметр является числом, а какой степенью определяешь только ты сам, но после того как определил и вызывать тогда ты должен соответствующе и одинаково всегда И еще, эти параметры можно называть как хочешь, например def power(chislo,stepen) и вот тогда уже точно будет понятно, кто есть кто
@@egoroffchannel спасибо за ответ) саму физику процесса еще не понял, например в этой строчке: return funk(x, n//2) * funk(x, n//2) - как так получается, что один аргумент - это степень, а другой - это число, почему одно возводится в другое, где инструкция чтобы икс возводился в степень n?
Стать спонсором
ruclips.net/channel/UCMcC_43zGHttf9bY-xJOTwAjoin
Стать патроном
www.patreon.com/artem_egorov
Контент не соответствует с просмотрами. Ты достоин лучшего
спасибо, надеюсь в плане просмотров все будет меняться в лучшую сторону)
Согласен)
Это по подписке, поэтому не соответствует
Это лучший плейлист по изучению питона! Столько тем, и при этом каждой уделяется нужное количество времени!) Спасибо)
Взял себе в привычку после просмотра урока на платных курсах, смотреть эту же тему тут, становится гораздо понятнее, спасибо огромное автору!
Остается исключить лишний элемент)
Также делаю, прохожу курс на Hexlet, а потом смотрю видео здесь.
Самый лучший и понятный канал на Ютубе!! Спасибо!
А вот эта логика с обходом многоуровнево-вложенных списков очень крута. Большое спасибо!! Всех благ!
Ролик понравился, спасибо! Стало чуть понятней в теме 'Рекурсия' :)
Спасибо! Каналу желаю удачи.
Спасибо)
Действительно... крайне качественный контент, я ну оооочень долго и много перерыл курсов пока не нашел именно этот, странно, что просмотров нет........... Артем, запили видосы по классам пожалуйста.
Спасибо, видимо ещё не все знают о существовании моего канала
Спасибо за столь простое объяснение непростой темы(для меня).
Спасибо Егор, Вы очень талантливый учитель, все внятно
Задача с таймтега 6:00
def f(x):
if len(x)==0:
return x
if x[0]=='(':
return x[0] + f(x[1:]) + ')'
return x[0] + f(x[1:]) + x[0]
x=input()
print(f(x))
не знаю как, но работает)
я тоже много над этим задумался но понял что здесь нужно одно условия которое будет немножко не в тему но и не будет задеть код, не нашел вариантов, увидел твое предложения и подумал что это гениально, хотя думаю что есть решения и попроще
понравилось твое решение , но когда вводишь например ac((sd то выходит так ac((sds))ca хотя как я понял d должно быть двое вот так ac((sdds))ca
Спасибо за новый урок!
Забавный случай был с рекурсивной функцией. Я тогда ещё учился в школе, питон знал на приличном уровне. Учитель даёт задание, решает его - получается строк шесть без вызова функции. Я когда сдаю ей решение в одну у неё чуть глаза на лоб не вылезли. Забавно было очень.
вот так решил вторую задачу со скобочками
def rev(s):
if len(s) == 0:
return s
else:
if s[0] == '(':
return s[0] + rev(s[1:]) + ')'
return s[0] + rev(s[1:]) + s[0]
Очень наглядно и понятно, спасибо!
Спасибо!!! Всё грамотно и подробно!!! наконец то я всё поняла!!!! ))))
Так пойдёт вторая задача со скобочками:
stroka = input('enter the string:')
def f(stroka):
if len(stroka) == 0:
return
print(stroka[0],end='')
f(stroka[1:])
if stroka[0] == '(':
print(')',end='')
else:
print(stroka[0],end='')
f(stroka)
Сгодится на ваш взгляд,спасибо
Спасибо, классный курс!
Лучшие уроки по питону на Ютубе.
Благодарности нет границ!
Очень круто объясняете. Спасибо вам
Вот ещё один способ решения задачи на возведение в степень с использованием рекурсии (без проверки на чётность степени). Просто умножаем число на само себя n - 1 количество раз:
def power(x, n):
if n < 0:
return 1 / power(x, -n)
if n == 0:
return 1
return x * power(x, n - 1)
x, n = map(int, input().split())
print(power(x, n))
Но, несомненно, алгоритм, который вы описали в видео, будет работать быстрее, так как будет меньше рекурентных вызовов функции. И чем больше степень, тем ваш алгоритм будет работать быстрее по сравнению с вышеуказанным. Спасибо за отличную подачу материала)
Спасибо за столь прекрасное объяснение сложной темы!
Спасибо, хорошо объясняете
Чувак конент в кайф! Жги ещё!
Очень сложно, но интересно!
Все мозги разбил на части, все извилины заплел))))
Спасибо за видео! Все отлично рассказано.
Спасибо большое за уроки! Всё доступным и понятным языком. Узнала много полезного.
Уточните пожалуйста в примере с возведением в степень: power (x,n) через запятую, как программа распознает, что это именно возведение в степень?
Задался этим вопросом и опечалился, когда увидел, что Ваш комментарий без ответа. Поэтому всем, у кого возник этот вопрос: распишите себе весь процесс на бумаге и увидите, что сам интерпретатор не в курсе, что здесь заложена операция возведения в степень, он просто выполняет умножение, согласно прописанным условиям.
Артём, благодарю! 👍🔥🔥🔥
Вот мой вариант решения задачи с тайм кода 10:10
def zadacha3(n, count=0):
if len(str(n)) == 1:
return n, count
return zadacha3(n = sum((int(i) for i in list(str(n)))), count=count+1)
print(zadacha3(99))
Вывод: (9, 2)
Строка где возвращается рекурсия скорее всего тяжело читается, но сделал как сделал, главное что работает
Я удивлен. Спасибо вам.
видосик шикарный!!!! СПАСИБО большое
Хорошая обучалка, хоть рекурсию более менее закрепил, а то применить никак ее не мог
Спасибо, Артем!! Надеюсь, с твоими уроками освою эту сложную тему.
Решение задачи с зеркальными скобками
def rec(s):
if len(s)==0:
return s
if s[len(s)-1]=='(':
s+=')'
if s[len(s)-1].isalpha():
s+=s[len(s)-1]
return s[len(s)-2] + rec(s[0:-2]) + s[len(s)-1]
PS: честно, я почти сдалась, но решение пришло. правильное ли?
def num(x,ch1=0):
if x
Автор очень круто и понятно изложен материал, с кучей примеров что очень важно обязательно будет донат от меня
Коммент для продвижения канала и безграничная благодарность Вам!
нумеролог
def recursive_sum(n, s=0):
return s + n if n < 10 else recursive_sum(n // 10, s + n % 10)
def numerolog(n, level=0):
print(n, level) if n < 10 else numerolog(recursive_sum(n), level+1)
можно и через встроенный sum, но решила использовать рекурсию по максимуму вместо итерации)
Огромное спасибо. Подарок
Я что то не совсем понимаю, в задаче из видио когда возводили число в степень, где тот момент когда мы пишем x**n?
Большое спасибо!!
Нумеролог
x = int(input())
def f(x, y=0):
if x
zada4a numerolog:
n = input()
c = 0
def f(n):
global c
if (len(n) == 1):
return n
c+=1
return f(str(sum(map(int, list(n)))))
print(f(n), c)
Спасибо большое
в первом задании если с внешними скобочками, то вот так можно сделать:
def brackets(s):
if len(s)
Понятно и интересно.
это гениально
1 задача про зеркальность:
def rec(s):
if len(s) == 1:
return s + s
return s[0] + rec(s[1:]) + s[0]
2 задача про нумерологию:
def rec(x, n = 0):
if len(str(x)) == 1:
return x, n
return rec(sum(list(map(int, str(x).strip()))), n + 1)
x = int(input())
print(*rec(x))
начинаю лучше разбираться в рекурсиях, тема тяжеловатая
Блин, ну доходчиво же. Спс
Ура , работает:
def rec(str):
if len(str)==1 or len(str)==2 or '(' not in str:
return str
return str[0:str.index('(')] + '(' + rec(str[str.index('(') + 1:]) + ')' + str[0:str.find('(')[::-1]
Отдельное спасибо за практические задания, учил рекурсию по другим лекциям, без практики было не все понятно, сейчас вроде разобрался окончательно
задача 2:
def rec(x):
if len(x)==1:
if x!="(":
return x+x
return "()"
if x[0]!="(":
return x[0]+ rec(x[1:])+x[0]
return "(" + rec(x[1:])+ ")"
x=input()
print(rec(x))
Спасибо!
В примере состепенью числа можно было не идти до 0 степени , а остановиться на 1 , так быстрее будет
def numerolog2(n, count2=0):
n = sum([int(i) for i in list(str(n))])
if len(str(n)) > 1:
return numerolog2(n, count2+1)
return n, count2+1
4:10 почему начальная буква берется с индексом 0 и в рекурсии мы берём индекс 1 а конечная что в возврате -1 что в рекурсии -1. Не должно ли -2 быть в срезе?
Решение задачи "Нумеролог"
a = int(input())
def rec(x, counter=0):
s = 0
if x < 10:
return x, counter
for i in str(x):
s += int(i)
counter += 1
if s > 9:
return rec(s, counter == 1)
return s, counter
print(*rec(a))
я так понял смысл рекурсии - уйти от циклов, а у Вас вышла рекурсия с циклом ))) ... хотя у меня и это не получилось.
Вот, все что смог, сумма цифр считается, но не пойму как в рекурсию счетчик засунуть (чтоб без цикла). Если кто подскажет, буду благодарен
def numerolog(n:int):
if n
@@yevhenbaklahov193 count += len(str(number)) - 1
Задача со скобками:
def rec(s):
return s + s[::-1].replace('(', ')')
Задача с нумерологом:
def numerolog(n):
return n if n < 10 else numerolog(sum(list(map(int, list(str(n))))))
тут про рекурсию, а не про возможности питона )
@@Дмитрий-т4л9ъ с нумерологом как раз рекурсия
@@sanek711 да, согласен, не внимательно сначала посмотрел
ДЗ, не знаю куда нужно было скидывать, кидаю и сюда тоже
Нумеролог:
with open ('INPUT.TXT') - as inf:
number=inf.radline()
count=0
def numerolog(number,count):
summa=0
if number
задача на 6:05
class Mirror_Rec():
def mirror(self, word):
lst = []
count = -1
for i in word:
lst.append(word[count])
count -= 1
lst = list(lst)
return ''.join(lst)
@classmethod
def recursion(cls, funk):
if len(funk) == 0 or len(funk) == 2 or len(funk) == 1:
return funk
return funk[0] + cls.recursion(funk[1:-1].replace('(', ')')) + funk[-1].replace('(', ')') # return a)m)a)m)
a = Mirror_Rec()
b = a.mirror('(m(a(m(a')
print(b + a.recursion(b))
Решения задач со строками:
1. Звездочки
def rec_stars(s):
if len(s) == 1:
return s
else:
return s[0] + '*' + rec_stars(s[1:])
2. Отзеркалить строку и развернуть кавычки
def rec_mirror(s):
if len(s) == 1:
return s if s != '(' else ')'
else:
return s[-1] + rec_mirror(s[:-1]) if s[-1] != '(' else ')' + rec_mirror(s[:-1])
там не просто отзеркалить надо, а сконкатенировать с входной строкой )
Задача: Нумеролог. Я старался применить и рекурсию с вложенные функции. Спасибо автор!!!
def asum(a):
b = 0
for i in str(a):
b += int(i)
return b
def text(a, count=0):
if a < 10:
return f'{a} {count}'
return text(asum(a), count + 1)
print(text(int(input())))
применил цикл for, а значит уже не чистая рекурсия )
@@Дмитрий-т4л9ъ а как по другому решить то?
@heybeachMIN ну я так решил, чуть проще, без циклов. Видел в другом комменте у вас такое же решение было.
def q(a, c = 0):
if a
@@Дмитрий-т4л9ъ да я потом сам подумал и нашел решение) но сначало казалось что без for никак ) спасибо за Ваше решение
спасибо
задача про скобки:
def rec(a: str):
if len(a)
ЗАДАЧА "звёздочки"
def rec(s):
if len(s) == 1:
return s
if len(s) == 2:
return s[0] + '*' + s[1]
if len(s)
Нумеролог
c=0
def q(a):
global c
if a
лучшее решение, так и не смог к нему прийти
чуть лучше наверное так, как Артем показывал с уровнями, чтоб без глобальных переменных, а в целом действительно лучшее решение на чистой рекурсии:
def q(a, c = 0):
if a
Нумеролог:
n=input()
def numerolog(n,count=1,summ=0):
if len(str(n))==1:
return int(n),0
for i in (str(n)):
summ+=int(i)
if len(str(summ))!=1:
return numerolog(summ,count+1,0)
return summ,count
print(*numerolog(n))
#добавить зеркальную строку
def skobka(y):
if y == '(':
return ')'
return y
def mirror(s):
if len(s) < 2:
return skobka(s)
return mirror(s[1:]) + skobka(s[0])
s = input()
print(mirror(s))
по заданию нужна была исходная + зеркальная )
Нумеролог:
def st(x, c=0):
return (x, c) if x < 10 else st(sum([int(i) for i in str(x)]), c+1)
цикл for остался ) а значит это не рекурсия
если хочется максимально коротко и с рекурсией то лучше уже такое
def text(a, count=0):
return f'{a} {count}' if a < 10 else text(a // 10 + a % 10, count + 1)
Почему в данном случае не выводится None, когда мы не используем return?
Немного не понял, почему выдает ошибку в таких случаях?
def rec(x)
return x[0] + rec (x[1:]) + x[0]
x = input()
print (rec (x))
# Вставить звёздочки:
def rec(s_local):
if len(s_local) > 1:
return s_local[0] + "*" + rec(s_local[1:])
return s_local
s = input()
print(rec(s))
# Сформировать новую строку со скобками:
def rec(s_local):
if len(s_local) > 0:
char = s_local[-1]
if char == '(':
char = ')'
return char + rec(s_local[:-1])
return ""
s = input()
print(s + rec(s))
# Нумеролог:
def rec(num_local, iterations=0):
if num_local >= 10:
digits = list(str(num_local))
for i in range(len(digits)):
digits[i] = int(digits[i])
return rec(sum(digits), iterations + 1)
return num_local, iterations
num = int(input())
print(*rec(num))
а зачем во второй задаче 'return ""'?
задача на текст + зеркальное отображение без спец.методов пайтона(у многих только "зеркало" возвращало):
def concat_revers(txt):
if txt[0] == '(':
mirror_sym = ')'
elif txt[0] == ')':
mirror_sym = '('
else:
mirror_sym = txt[0]
if len(txt) == 1:
return txt+mirror_sym
else:
return f'{txt[0]}{concat_revers(txt[1:])}{mirror_sym}'
вот ответ
ask = input()
askl = len(ask)
nf = 1
def ft (x):
global nf
if nf < askl:
aqwe = (ask[nf]+'*')
nf = nf+1
print(aqwe, end='')
ft(x)
ft(ask)
Подскажите, в этой строчке: return power(x, n//2) * power(x, n//2) - как так получается, что один аргумент - это степень, а другой - это число, почему одно возводится в другое, где инструкция чтобы икс возводился в степень n?
мы сами определяем кто степень, а кто число
@@egoroffchannel окей, с этим ответом мне жить)
На ответ со скобками я сделал так:
def copyrit(s):
if len(s)
Годно, пора продавать на степике итд
Добрый день, Артём. Не совсем поняла решение задачи по возведению в степень.
Стараюсь перед вашим объяснением порешать сама и у меня получился вот такой вариант:
def power(x,n):
if n==1:
return x
if n==0:
return 1
if n
Задачка про нумеролога)
def predskazanie(a,Level=0):
if len(a)==1:
return int(a) , Level
else:
s=0
for i in range(len(a)):
s+=int(a[i])
a=str(s)
return predskazanie(a, Level+1)
a=input()
print(*predskazanie(a))
Чувак, ты бы знал каким садо мазо я занимался, чтобы распаковать кортеж, до того как увидел, что можно так сделать
print(*predskazanie(a))
def life(x, count=0):
x = eval('+'.join([i for i in str(x)]))
if len(str(x)) == 1:
return x, count+1
return life(x, count+1)
уже близко, но не правильно
Нашел более короткое решение задачи со степенью:
def recursivepower(x,n):
if n == 1:
return x
if n == 0:
return 1
return x * power(x,n-1)
Код для 2 задачи
def rec(string):
if len(string) == 1 and string[0] != '(': return string
elif len(string) == 1 : return ')'
if string[-1] != "(" :
return string[-1] + rec(string[:-1])
else:
return ")" + rec(string[:-1])
s = input()
print(s+rec(s))
по-моему не особо рекурсивно получилось , но что смог
вот с номерами помучился, но:
count = 0
def numerolog2(*a):
try:
n = list(a[0])
except TypeError:
n = [a[0], 0]
if n[0] // 10 == 0:
return n
if n[0] // 10 != 0:
counter()
return [numerolog2([(n[0] % 10) + numerolog2([n[0] // 10, n[1]])[0], n[1]])[0] , count]
def counter():
global count
count += 1;
Дз (тем, кто не смог) про отзеркаливание
Два варианта алгоритма
def z1(s,l=''):
if len(s)==0:
return l
if s[-1]=='(':
l='('+l+')'
else:
l=s[-1]+l+s[-1]
return z1(s[:-1],l)
def z2(s):
if len(s)==0:
return s
if s[0]=='(':
return '('+z2(s[1:])+')'
return s[0]+z2(s[1:])+s[0]
print(z2('qw(w('))
Сделала, как у вас второе :)
🫵 Теория без практики - ничто, поэтому 👇
🐍 stepik.org/course/63085/promo
👉 специально для тебя создал бесплатный топовый курс по Python
👉 В нем тебя ждет:
📗 более 400 практических заданий на программирование
📗 более 250 тестовых заданий на проверку материала
📗 десятки часов видеоматерилов по теории
📗 видеоразборы решения заданий
📗 текстовые материалы по урокам, примеры кода
📗 доступ к закрытому чату с дружественной обстановкой
📗 сертификат в случае успешного прохождения курса
Подскажите, пожалуйста, как решается задача А (прибавить 3, прибавить 5)?
def mirror(s):
return s + s[::-1].replace('(', ')')
вроде работает :)
молодец
Задача 6:00
def rec(s):
a = s[::-1]
return s + a.replace('(', ')')
s = input()
print(rec(s))
я почти также решила )
in_data = "(((t((p((y((kx((((e(((((((vw((v(e((v(m(((h(mlx((s((((d(y((((((((mtk(d(umi((s((sx(p((m(r((kq"
def rec_2(sent):
return sent + sent.replace('(', ')')
print(rec_2(in_data))
Артем, как ты думаешь это оптимальное решение или можно лучше? :
def numerolog(s,count=0):
if len(s) == 1:
return s,count
return numerolog(s=str(sum([int(i) for i in s])), count=count+1)
print(numerolog(input()))
нормальное)
можете подсказать как распаковать несколько уровневый список без циклов через рекурсию, пожалуйста (
Задачка №3
Сайт решение принял, но я не понял, как в функцию запихать саму строку.
У меня выводит только "отзеракаленную" копию.
Пришлось в принт запихать конкатенацию изначальной строки и ее копии
Комрады, подскажите, может кто изящнее решил?
def rec(s):
if len(s) == 0: # Выход из рекурсии
return s
# Отщипываем первый символ и плюсуем его же
return rec(s[1:]) + s[0].replace('(', ')')
s = input()
print(s+rec(s))
Артем, спасибо большое за уроки.
Подскажи, плз., для чего использовался 'pass' ? Какова его функция?
такие конструкции как if while for def должны содержать в себе блок команд на отступах после двоеточия. Этот блок не может быть пустым, то есть обязан состоять хотя бы из одной строчки. Иногда нужно оставить блок пустым(без каких либо действий), и вот для этого нужен pass. pass - пустой блок
@@egoroffchannel Большое спасибо.
ох как же я подвис на рекурсии с возведением в степень... помог отладчик в visualstudio, хоть он и не особо информативный
Здравствуйте! Объясните пожалуйста как решается задача "Нумеролог"
Здравствуйте! Отличное объяснение, хотелось бы получить на счёт т.н. хвостатых рекурсий. И ещё как в рекурсии не получая пустой список как аргумент, объявить его чтобы он был объявлен не рекурсивно?
при определенной длине строки выдает ошибку не пойму почему
def zvez(a):
if len(a) == 1:
return a
return a[0] + "*" + zvez(a[1: -1]) + "*" + a[-1]
a = "LItBeoFLcSGBOFQxMHoIuDDWcqcVgkcRoAeocX"
print(zvez(a))
ошибка:
return a[0] + "*" + zvez(a[1: -1]) + "*" + a[-1]
[Previous line repeated 17 more times]
IndexError: string index out of range
def zvez(a):
if len(a) == 1 or len(a) ==2:
return a
return a[0] +"*"+zvez(a[1:-1])+"*"+ a[-1]
a = "LItBeoFLcSGBOFQxMHoIuDDWcqcVgkcRoAeocX"
print(zvez(a))
Вы проделали, конечно, большую работу и спасибо Вам за это. Но, как все это запомнить.. м. б. есть какие то методы? С первого раза запоминается очень обобщённо.
С помощью практики на моем бесплатном курсе
stepik.org/course/63085/promo
def power(x,n)
вопрос - почему n идёт как степень числа x исходя из этой записи?
К примеру есть функция pow, которая импортируется из math - там аргументы передаются как раз таким образом, но это ведь 2 разные функции - в одном случае та что мы сами пытаемся сделать, а во втором готовая встроенная
Можно параметры функции располагать в любом порядке, значит функцию можно было определить как def power(n,x)
Затем, какой параметр является числом, а какой степенью определяешь только ты сам, но после того как определил и вызывать тогда ты должен соответствующе и одинаково всегда
И еще, эти параметры можно называть как хочешь, например def power(chislo,stepen) и вот тогда уже точно будет понятно, кто есть кто
@@egoroffchannel спасибо за ответ) саму физику процесса еще не понял, например в этой строчке: return funk(x, n//2) * funk(x, n//2) - как так получается, что один аргумент - это степень, а другой - это число, почему одно возводится в другое, где инструкция чтобы икс возводился в степень n?