Провоторова Алина python разработчик собеседование
Вставка
- Опубліковано 27 вер 2024
- Активность Олега в теме активного обмена опытом между разработчиками: t.me/it_horizo...
t.me/UA-camPr...
Чат для общения pyhton разработчиков и им сочуствующих. Свободное общение, тестовые и вопросы с собесов и прочее. Заходите, там вам рады.
Поддержать канал: www.tinkoff.ru...
Обычно денежка идёт на книжки про питончик. Но иногда на светлое и тёмное.
Если Тиньков не даёт перечислить, стукните в личку телеги andpronin, придумаем что нибудь
Виш лист
Хорошие книги по Питончику, которые могу рекомендовать (и хочу купить с вашей помощью).
Изучаем Python. Двухтомник. Марк Лутц. Очень подробно и структурно (Хочу дождаться 6го издания.. )
• Изучаем Python с Марко...
Читаем и разбираем ее тут
Куплено (огромное спасибо зрителям)
Знакомство с Python | Бейдер Дэн (2023) - выглядит приятно для новичка
Чистый Python. Тонкости программирования для профи | Бейдер Дэн (2022) - хорошо для продолжения
Высоконагруженные приложения. Программирование, масштабирование, поддержка | Клеппман Мартин
Python. К вершинам мастерства | Рамальо Лучано - 2е издание - сложно для новичка, но интересно
Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура -- хорошо про то, когда какой фреймворк применять
Видимо, дальше появтся еще нескромные желания. Но пока - так
Моя тележка andpronin -- стучите, если что.
Мой канал про обучению python с нуля и до мидла Андрей+=Пронин
/ @pypronin
Я в других сетях
🔗Вконтакте: CaptPronin
🔗Дзен: zen.yandex.ru/...
#python #питон #программирование #Андрей_Пронин #собеседование #
Активность Олега в теме активного обмена опытом между разработчиками: t.me/it_horizon_club/6
Спасибо, освежил память с регулярками, можно просто захардкодить по убыванию словарь {арабское число: римское число} (включая случаи с 4, 9, 40 и тд)
И реугляркой проходишься по key словаря уменьшая num не оно не будет равно 0
Вкусная задачка, особенно когда уверен что оч легко можно решить регуляркой и вспоминаешь пол часа как правильно прописать ее)
Ура ждём 🎉😮
Ну почему нельзя тупо взять и добавить в словарь к остальным символам {"CM":900, "CD":400, "XC":90, "XL":40, "IX":9,"IV":4} и обрабатывать точно также, как и начинала? 🤷🏻♂️ зачем создавать себе сложности, и изобретать велосипед с bad_number =[] ..
Думаю нужно пересмотреть формат собесов. Первая часть вопросы по питону, может по джанго, а потом задача хитрая, но не настолько муторная. Так можно шире оценить навыки человека. Имхо.
rom_sym = {
1: "I",
5: "V",
10: "X",
50: "L",
100: "C",
500: "D",
1000: "M",
}
def convert(num):
ans = ""
divisor = 1000
while divisor:
res, num = divmod(num, divisor)
if res < 4:
ans += rom_sym[divisor] * res
elif res == 4:
ans += rom_sym[divisor] + rom_sym[divisor * 5]
elif res == 9:
ans += rom_sym[divisor] + rom_sym[divisor * 10]
else:
ans += rom_sym[divisor * 5] + rom_sym[divisor] * (res - 5)
divisor //= 10
return ans
ты волшебник!
Для чисел от 4000 в условие надо дописать
elif divisor == 1000:
ans += rom_sym[divisor] * res
В условиях сравнения с 4 и 9 надо дописать
and divisor != 1000
convert_dict = {
1000: 'M',
900: 'CM',
500: 'D',
400: 'CD',
100: 'C',
90: 'XC',
50: 'L',
40: 'XL',
10: 'X',
9: 'IX',
5: 'V',
4: 'IV',
1: 'I'
}
def convert(number : int):
result = ''
for key, value in convert_dict.items():
n1, n2 = divmod(number, key)
if n1 >= 1:
result += n1*value
number = n2
return result
как то так получилось, вроде правильно
"Легион в Древнем Риме состоял из 2000 - 10 000", как же их считали?
Хороших решений не придумал и в гугле не нашёл.
Я б сделал 4 списка и из них брал значения.
Задание сложное.
27:04 как она сделала символ >= ? 🤔
Ого
Включена поддержка лигатур в PyCharm, с некоторыми шрифтами такое работает, заменяет != на ≠ и прочие >= на ≥
@@Spaut хм, не знал, что так можно)) Спасибо за ответ 👍🏻
Добрый день как попасть на собес?
Студент практикума?
@@AndyPronin нет, яндекс практикум?
@@without-effects ага. Можно поступить, отучиться и придти) у меня и скидка есть. А второй вариант - скоро будет розыгрыш среди подписчиков. Вот тут t.me/UA-camPronin
Я просто всей душой ненавижу эти 2 задачи на римские цифры: они ужасные и отвратительны, поэтому я могу только лишь посочувствовать девушке.
Однако: Олег понимал, что это задача слегка отбитая, поэтому он сразу же дал алгоритм к ее решению...и она после этого не решила задачу. А это прям совсем нехорошо.
Также крайне сильно триггернуло ее постоянные "я правильно делаю?" - то есть, постоянно ищет поддержку и одобрение, то есть нет самоходности.
Но, в целом, код вроде бы норм пишет.
Подумал, что сам решу быстро, но не сразу получилось
def convert_to_roman(num: int):
result = data[0][0] * (num // data[0][1])
num = num % data[0][1]
for i in range(2, 7, 2):
r = num // data[i][1]
num = num % data[i][1]
if r == 9:
result += data[i][0] + data[i-2][0]
elif r == 4:
result += data[i][0] + data[i - 1][0]
elif r < 4:
result += data[i][0] * r
else:
result += data[i - 1][0] + data[i][0] * (r - 5)
return result
data = (('M', 1000), ('D', 500), ('C', 100), ('L', 50), ('X', 10), ('V', 5), ('I', 1))
Метод в лоб, конечно, но пока ничего лучше не придумал
rim_dict = {1000: 'M', 900: 'CM', 500: 'D', 400: 'CD',
100: 'C', 90: 'XC', 50: 'L', 40: 'XL', 10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'}
def turn_to_arabic(num: int):
result = num * 'I'
for k, v in rim_dict.items():
result = result.replace('I'*k, v)
return result
def arabic_to_roman(number: int) -> str:
roman_numerals = {
1000: 'M',
900: 'CM',
500: 'D',
400: 'CD',
100: 'C',
90: 'XC',
50: 'L',
40: 'XL',
10: 'X',
9: 'IX',
5: 'V',
4: 'IV',
1: 'I'
}
roman = ""
for value, symbol in roman_numerals.items():
while number >= 1:
roman += symbol
number -= value
return roman
как так она решается ) не так сложно в целом ...
Боже...бедная девушка! Мне ее почему то жалко стало.
Что я понял из видео, что возможно правильно что оставил программирование, когда никто меня не брал. Ничего бы из этого не вытянул и выгорел быстро.
помню решил эту задачу на лите и увидев тут, решил попробовать еще раз) не получилось с ходу, некоторые не правильно конвертирует) думаю на собесе, было бы в двойне тяжелее разобраться) пойду добивать)
Приятная девушка! Желаю чтобы у нее все получилось!
Как раз с leetcode задачка.
Один из вариантов решения:
*Сверху ещё добавить dict для всех возможных вариантов римских букв (включая 4, 9, 40, 90 и т.д.). Ключ - арабская цифра, значение - римская буква (или 2 буквы). И вот такая функция всё это переберёт:
def arabic_to_roman(arab_num: int) -> str:
result_rome: str = ""
if arab_num = 5000:
raise ValueError("Incorrect value. Number should be from 1 to 4999")
str_num = str(arab_num)
for i, v in enumerate(str_num):
check_num: int = int(v) * 10 ** (len(str_num) - 1 - i)
for key, value in rome_arab_match.items():
count: int = check_num // key
if count >= 1:
result_rome += value * count
check_num: int = check_num % key
continue
if check_num == 0:
break
return result_rome
не корректно работает
Олегу - Респект! Молодец!
Видно, что расстроилась, но ничего страшного в не решении такой задачки нет.
Если и будет лайвкод на собеседовании, то задача с большой вероятностью будет значительно проще. Здесь все таки не тривильная, и как основной алгоритм изобрести, и как эджи решить. Без задроченного литкода ее быстро не решить.
А увидеть слабое место на собеседовании это всегда очень ценный опыт. Сильно мотивирует эту слабость закрыть. Удачи