🫵 Теория без практики - ничто, поэтому 👇 🐍 stepik.org/course/63085/promo 👉 специально для тебя создал бесплатный топовый курс по Python 👉 В нем тебя ждет: 📗 более 400 практических заданий на программирование 📗 более 250 тестовых заданий на проверку материала 📗 десятки часов видеоматерилов по теории 📗 видеоразборы решения заданий 📗 текстовые материалы по урокам, примеры кода 📗 доступ к закрытому чату с дружественной обстановкой 📗 сертификат в случае успешного прохождения курса
Задача с таймтега 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) Сгодится на ваш взгляд,спасибо
Спасибо большое за уроки! Всё доступным и понятным языком. Узнала много полезного. Уточните пожалуйста в примере с возведением в степень: power (x,n) через запятую, как программа распознает, что это именно возведение в степень?
Задался этим вопросом и опечалился, когда увидел, что Ваш комментарий без ответа. Поэтому всем, у кого возник этот вопрос: распишите себе весь процесс на бумаге и увидите, что сам интерпретатор не в курсе, что здесь заложена операция возведения в степень, он просто выполняет умножение, согласно прописанным условиям.
Вот ещё один способ решения задачи на возведение в степень с использованием рекурсии (без проверки на чётность степени). Просто умножаем число на само себя 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)) Но, несомненно, алгоритм, который вы описали в видео, будет работать быстрее, так как будет меньше рекурентных вызовов функции. И чем больше степень, тем ваш алгоритм будет работать быстрее по сравнению с вышеуказанным. Спасибо за отличную подачу материала)
Вот мой вариант решения задачи с тайм кода 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 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, но решила использовать рекурсию по максимуму вместо итерации)
Отдельное спасибо за практические задания, учил рекурсию по другим лекциям, без практики было не все понятно, сейчас вроде разобрался окончательно задача 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))
Спасибо, Артем!! Надеюсь, с твоими уроками освою эту сложную тему. Решение задачи с зеркальными скобками 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 q(a, c = 0): if a
Задача: Нумеролог. Я старался применить и рекурсию с вложенные функции. Спасибо автор!!! 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())))
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)) начинаю лучше разбираться в рекурсиях, тема тяжеловатая
Решения задач со строками: 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])
4:10 почему начальная буква берется с индексом 0 и в рекурсии мы берём индекс 1 а конечная что в возврате -1 что в рекурсии -1. Не должно ли -2 быть в срезе?
если хочется максимально коротко и с рекурсией то лучше уже такое def text(a, count=0): return f'{a} {count}' if a < 10 else text(a // 10 + a % 10, count + 1)
Ура , работает: 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]
ДЗ, не знаю куда нужно было скидывать, кидаю и сюда тоже Нумеролог: with open ('INPUT.TXT') - as inf: number=inf.radline() count=0 def numerolog(number,count): summa=0 if number
Задача со скобками: 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))))))
Решение задачи "Нумеролог" 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
Подскажите, в этой строчке: return power(x, n//2) * power(x, n//2) - как так получается, что один аргумент - это степень, а другой - это число, почему одно возводится в другое, где инструкция чтобы икс возводился в степень n?
Нумеролог: 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 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('))
5.47 где вторая задачка сделал без рекурсии def func(s): s_reversed = (''.join(_.replace('(', ')') for _ in s[::-1])) return s + s_reversed s=input() print(func(s)) С рекурсией сам не смог, взял решение снизу (аплодирую автору сам не додумался такой пирамидкой сделать) и укоротил код немного def rec(x): if len(x)==1: return x+x if x != '(' else x+')' return x[0] + rec(x[1:])+x[0] if x[0] != '(' else x[0] + rec(x[1:]) + ')' x=input() print(rec(x))
Добрый день, Артём. Не совсем поняла решение задачи по возведению в степень. Стараюсь перед вашим объяснением порешать сама и у меня получился вот такой вариант: def power(x,n): if n==1: return x if n==0: return 1 if n
такие конструкции как if while for def должны содержать в себе блок команд на отступах после двоеточия. Этот блок не может быть пустым, то есть обязан состоять хотя бы из одной строчки. Иногда нужно оставить блок пустым(без каких либо действий), и вот для этого нужен pass. pass - пустой блок
Вы проделали, конечно, большую работу и спасибо Вам за это. Но, как все это запомнить.. м. б. есть какие то методы? С первого раза запоминается очень обобщённо.
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?
Отличные уроки! Хорошо бы видео разбор по задачам этой темы сделали бы :-) вроде все понимаешь и думаешь как все просто ,а начинаешь делать задания и все ж..а( на пару дней застреваешь. Самому не всегда получается придумать решение, и начинаешь искать в инете по теме. подскажите пожалуйста где ошибка? не принимает на 4 тесте b=input() def rec(b, lvl = 0, s = 0): if len(str(b)) == 1: return b + ' ' + str(lvl) else: s+= sum(list(map(int, str(b)))) lvl += int((len(str(b)))-1) b = sum(list(map(int, str(b)))) return rec(str(b), lvl) print(rec(b))
Здравствуйте! Отличное объяснение, хотелось бы получить на счёт т.н. хвостатых рекурсий. И ещё как в рекурсии не получая пустой список как аргумент, объявить его чтобы он был объявлен не рекурсивно?
Задача про зеркальную строку. Работает, но может подскажет кто-нибудь, как избавиться от s-ки в принте?: def mirror(s): a = s[-1] if len(s) == 1: return s if a.isalpha(): return s[-1] + mirror(s[:-1]) else: return ')' + mirror(s[:-1]) s = input() print(s + mirror(s))
Стать спонсором
ruclips.net/channel/UCMcC_43zGHttf9bY-xJOTwAjoin
Стать патроном
www.patreon.com/artem_egorov
Контент не соответствует с просмотрами. Ты достоин лучшего
спасибо, надеюсь в плане просмотров все будет меняться в лучшую сторону)
Согласен)
Это по подписке, поэтому не соответствует
Взял себе в привычку после просмотра урока на платных курсах, смотреть эту же тему тут, становится гораздо понятнее, спасибо огромное автору!
Остается исключить лишний элемент)
Также делаю, прохожу курс на Hexlet, а потом смотрю видео здесь.
Это лучший плейлист по изучению питона! Столько тем, и при этом каждой уделяется нужное количество времени!) Спасибо)
Спасибо! Каналу желаю удачи.
Спасибо)
🫵 Теория без практики - ничто, поэтому 👇
🐍 stepik.org/course/63085/promo
👉 специально для тебя создал бесплатный топовый курс по Python
👉 В нем тебя ждет:
📗 более 400 практических заданий на программирование
📗 более 250 тестовых заданий на проверку материала
📗 десятки часов видеоматерилов по теории
📗 видеоразборы решения заданий
📗 текстовые материалы по урокам, примеры кода
📗 доступ к закрытому чату с дружественной обстановкой
📗 сертификат в случае успешного прохождения курса
А вот эта логика с обходом многоуровнево-вложенных списков очень крута. Большое спасибо!! Всех благ!
Задача с таймтега 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)
Сгодится на ваш взгляд,спасибо
Чувак конент в кайф! Жги ещё!
Спасибо, хорошо объясняете
Лучшие уроки по питону на Ютубе.
Очень круто объясняете. Спасибо вам
Я удивлен. Спасибо вам.
Спасибо за видео! Все отлично рассказано.
Артём, благодарю! 👍🔥🔥🔥
Спасибо большое за уроки! Всё доступным и понятным языком. Узнала много полезного.
Уточните пожалуйста в примере с возведением в степень: power (x,n) через запятую, как программа распознает, что это именно возведение в степень?
Задался этим вопросом и опечалился, когда увидел, что Ваш комментарий без ответа. Поэтому всем, у кого возник этот вопрос: распишите себе весь процесс на бумаге и увидите, что сам интерпретатор не в курсе, что здесь заложена операция возведения в степень, он просто выполняет умножение, согласно прописанным условиям.
Все мозги разбил на части, все извилины заплел))))
видосик шикарный!!!! СПАСИБО большое
Вот ещё один способ решения задачи на возведение в степень с использованием рекурсии (без проверки на чётность степени). Просто умножаем число на само себя 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))
Но, несомненно, алгоритм, который вы описали в видео, будет работать быстрее, так как будет меньше рекурентных вызовов функции. И чем больше степень, тем ваш алгоритм будет работать быстрее по сравнению с вышеуказанным. Спасибо за отличную подачу материала)
Огромное спасибо. Подарок
Вот мой вариант решения задачи с тайм кода 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 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, но решила использовать рекурсию по максимуму вместо итерации)
Коммент для продвижения канала и безграничная благодарность Вам!
Автор очень круто и понятно изложен материал, с кучей примеров что очень важно обязательно будет донат от меня
Отдельное спасибо за практические задания, учил рекурсию по другим лекциям, без практики было не все понятно, сейчас вроде разобрался окончательно
задача 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))
Нумеролог
x = int(input())
def f(x, y=0):
if x
Понятно и интересно.
Спасибо большое
Спасибо, Артем!! Надеюсь, с твоими уроками освою эту сложную тему.
Решение задачи с зеркальными скобками
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: честно, я почти сдалась, но решение пришло. правильное ли?
Я что то не совсем понимаю, в задаче из видио когда возводили число в степень, где тот момент когда мы пишем x**n?
def num(x,ch1=0):
if x
В примере состепенью числа можно было не идти до 0 степени , а остановиться на 1 , так быстрее будет
это гениально
Нумеролог
c=0
def q(a):
global c
if a
лучшее решение, так и не смог к нему прийти
чуть лучше наверное так, как Артем показывал с уровнями, чтоб без глобальных переменных, а в целом действительно лучшее решение на чистой рекурсии:
def q(a, c = 0):
if a
Задача: Нумеролог. Я старался применить и рекурсию с вложенные функции. Спасибо автор!!!
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 никак ) спасибо за Ваше решение
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)
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 brackets(s):
if len(s)
Спасибо!
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
Решения задач со строками:
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 rec(a: str):
if len(a)
4:10 почему начальная буква берется с индексом 0 и в рекурсии мы берём индекс 1 а конечная что в возврате -1 что в рекурсии -1. Не должно ли -2 быть в срезе?
Нумеролог:
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)
Ура , работает:
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]
ДЗ, не знаю куда нужно было скидывать, кидаю и сюда тоже
Нумеролог:
with open ('INPUT.TXT') - as inf:
number=inf.radline()
count=0
def numerolog(number,count):
summa=0
if number
задача на текст + зеркальное отображение без спец.методов пайтона(у многих только "зеркало" возвращало):
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}'
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 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 да, согласен, не внимательно сначала посмотрел
спасибо
Решение задачи "Нумеролог"
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
Подскажите, в этой строчке: return power(x, n//2) * power(x, n//2) - как так получается, что один аргумент - это степень, а другой - это число, почему одно возводится в другое, где инструкция чтобы икс возводился в степень n?
мы сами определяем кто степень, а кто число
@@egoroffchannel окей, с этим ответом мне жить)
вот ответ
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)
На ответ со скобками я сделал так:
def copyrit(s):
if len(s)
#добавить зеркальную строку
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))
по заданию нужна была исходная + зеркальная )
Почему в данном случае не выводится None, когда мы не используем return?
Годно, пора продавать на степике итд
Нашел более короткое решение задачи со степенью:
def recursivepower(x,n):
if n == 1:
return x
if n == 0:
return 1
return x * power(x,n-1)
Нумеролог:
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 rec(x)
return x[0] + rec (x[1:]) + x[0]
x = input()
print (rec (x))
вот с номерами помучился, но:
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 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 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 ""'?
задача на 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))
ох как же я подвис на рекурсии с возведением в степень... помог отладчик в visualstudio, хоть он и не особо информативный
def mirror(s):
return s + s[::-1].replace('(', ')')
вроде работает :)
ЗАДАЧА "звёздочки"
def rec(s):
if len(s) == 1:
return s
if len(s) == 2:
return s[0] + '*' + s[1]
if len(s)
Дз (тем, кто не смог) про отзеркаливание
Два варианта алгоритма
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('))
Сделала, как у вас второе :)
5.47 где вторая задачка сделал без рекурсии
def func(s):
s_reversed = (''.join(_.replace('(', ')') for _ in s[::-1]))
return s + s_reversed
s=input()
print(func(s))
С рекурсией сам не смог, взял решение снизу (аплодирую автору сам не додумался такой пирамидкой сделать) и укоротил код немного
def rec(x):
if len(x)==1:
return x+x if x != '(' else x+')'
return x[0] + rec(x[1:])+x[0] if x[0] != '(' else x[0] + rec(x[1:]) + ')'
x=input()
print(rec(x))
Подскажите, пожалуйста, как решается задача А (прибавить 3, прибавить 5)?
Код для 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))
по-моему не особо рекурсивно получилось , но что смог
Добрый день, Артём. Не совсем поняла решение задачи по возведению в степень.
Стараюсь перед вашим объяснением порешать сама и у меня получился вот такой вариант:
def power(x,n):
if n==1:
return x
if n==0:
return 1
if n
можете подсказать как распаковать несколько уровневый список без циклов через рекурсию, пожалуйста (
Артем, спасибо большое за уроки.
Подскажи, плз., для чего использовался 'pass' ? Какова его функция?
такие конструкции как if while for def должны содержать в себе блок команд на отступах после двоеточия. Этот блок не может быть пустым, то есть обязан состоять хотя бы из одной строчки. Иногда нужно оставить блок пустым(без каких либо действий), и вот для этого нужен pass. pass - пустой блок
@@egoroffchannel Большое спасибо.
string1 = string + string[::-1].replace("(", ")")
print(string1)
вот такое решение нашел,а рекурсия ни как не дается(
молодец
Вы проделали, конечно, большую работу и спасибо Вам за это. Но, как все это запомнить.. м. б. есть какие то методы? С первого раза запоминается очень обобщённо.
С помощью практики на моем бесплатном курсе
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?
Отличные уроки!
Хорошо бы видео разбор по задачам этой темы сделали бы :-)
вроде все понимаешь и думаешь как все просто ,а начинаешь делать задания и все ж..а( на пару дней застреваешь. Самому не всегда получается придумать решение, и начинаешь искать в инете по теме.
подскажите пожалуйста где ошибка? не принимает на 4 тесте
b=input()
def rec(b, lvl = 0, s = 0):
if len(str(b)) == 1:
return b + ' ' + str(lvl)
else:
s+= sum(list(map(int, str(b))))
lvl += int((len(str(b)))-1)
b = sum(list(map(int, str(b))))
return rec(str(b), lvl)
print(rec(b))
Здравствуйте! Отличное объяснение, хотелось бы получить на счёт т.н. хвостатых рекурсий. И ещё как в рекурсии не получая пустой список как аргумент, объявить его чтобы он был объявлен не рекурсивно?
Здравствуйте! Объясните пожалуйста как решается задача "Нумеролог"
Задача про зеркальную строку.
Работает, но может подскажет кто-нибудь, как избавиться от s-ки в принте?:
def mirror(s):
a = s[-1]
if len(s) == 1:
return s
if a.isalpha():
return s[-1] + mirror(s[:-1])
else:
return ')' + mirror(s[:-1])
s = input()
print(s + mirror(s))