Имам затруднение със задача Next Happy Year fundamentals python!
Някой ,може ли да ми помогне мъча се ,но нищо не мога да направя видях едно решение със сетове и дължина на стринг аз още не съм ги учил тези неща и се притесних.
Някой ,може ли да ми помогне мъча се ,но нищо не мога да направя видях едно решение със сетове и дължина на стринг аз още не съм ги учил тези неща и се притесних.
Предполагам, че решението, което сте видели е нещо подобно на това?
year = int(input()) + 1
while len(set(str(year))) != len(str(year)):
year += 1
print(year)
Използват се само стандартни функционалности на езика и затова е толкова кратко.
Дори и да напишем собствена логика, тя най-вероятно ще се върти около същото принципно решение:
Най-сложната част е проверката за уникалност на цифрите в годината - разделяме годината на съставящите я цифри и сравняваме всяка с всяка дали са различни - доста код с възможности за допускане на логическа или copy-paste грешка.
Точно този проблем ни решава вариантът с използване на set.- "unordered collection of unique elements":
Аз също бях зациклил на тази задача :). Предвид, че е в началния етап на курса би трябвало да има начин да се реши само със знанията, които имаме до момента. След няколко десетки неуспешни опита реших и аз да потърся из нета някакви насоки. Естествено взеха да излизат все решения, които за момента не разбирам (set, lists...). Между другото ето едно, което е близко до взетия до тук материал, но има един оператор in, който все още не познавам. Просто видях какво прави и реших да пробвам, а то взе че стана:
input_year = int(input()) next_year = input_year + 1 next_happy_year = "" while True: str_next_year = str(next_year) for i in range(0, len(str_next_year)): if str_next_year[i] not in next_happy_year: next_happy_year = next_happy_year + str_next_year[i] if len(next_happy_year) == len(str_next_year): break next_happy_year = "" next_year += 1 print(next_happy_year)
След това се "закучих" и си казах, че трябва да има вариант само с loops или нещо, което сме взели до тук, а не да използвам непознати техники, дори те да са по-кратки и четливи. Ииии на края се увенчах с успех :)
input_year = int(input()) next_year = input_year + 1 next_happy_year = "" brake_first_loop = False while True: str_next_year = str(next_year) next_happy_year = str_next_year[0] for i in range(1, len(str_next_year)): for j in range(0, i): if str_next_year[i] == next_happy_year[j]: brake_first_loop = True break if brake_first_loop: break else: next_happy_year = next_happy_year + str_next_year[i] if len(next_happy_year) == len(str_next_year): break next_happy_year = "" brake_first_loop = False next_year += 1 print(next_happy_year)
Ето и леко изчистено първото ти решение:
next_year = int(input()) + 1
happy_year = ""
while True:
next_year_str = str(next_year)
for c in next_year_str:
if c not in happy_year:
happy_year += c
if happy_year == next_year_str:
break
next_year += 1
happy_year = ""
print(happy_year)
Според мен алгоритъмът за сравняване на уникалните символи от стринга е направен по умния начин. Задачката изглежда тривиална, но крие коварни моменти в себе си. Като например как да следим уникалните цифри, това решение избягва два вложени цикъла със редица помощни променливи.
Благодаря! Знаех за setа, че прави това, но въобще не се сетих.Току що завърших фундаменталс. Трудна ми беше тази задача и се притесних, пробвах с едни вложени цикли. Имаше едно решение подобно в форума, като го видях чак тогава ми светна и работеше с 60 от 100 в джъждж, за секунда го направих 100 от 100, но преди това въобще не ми дойде на акъла попринцип не съм ги учил още сетове, листове, речници от обща култура ги знам и сам съм си ги разцъквал.Благодаря, за бързият отговор!
Здравейте,
извинявайте, знам, че темата малко е остаряла, но можете ли да обясните, как става сравнението
while len(set(str(year))) != len(str(year)):
Странното за мен е, че set-ът съдържа няколко елемента и то по-точно 2, след като стане филтрирането по уникални елементи, а пък str(year) има 4. Как правим сравнение между двете, за колко цикъла и как точно? При дебъгването виждам, че се правят 19 стъпки , ако инпута ми е 2022, Done running (19 steps) В никоя от тях обаче не виждам да се променя сетът..., моля да поясните. Благодаря предварително.