Имам затруднение със задача 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)
Благодаря! Знаех за setа, че прави това, но въобще не се сетих.Току що завърших фундаменталс. Трудна ми беше тази задача и се притесних, пробвах с едни вложени цикли. Имаше едно решение подобно в форума, като го видях чак тогава ми светна и работеше с 60 от 100 в джъждж, за секунда го направих 100 от 100, но преди това въобще не ми дойде на акъла попринцип не съм ги учил още сетове, листове, речници от обща култура ги знам и сам съм си ги разцъквал.Благодаря, за бързият отговор!
Здравейте,
извинявайте, знам, че темата малко е остаряла, но можете ли да обясните, как става сравнението
while len(set(str(year))) != len(str(year)):
Странното за мен е, че set-ът съдържа няколко елемента и то по-точно 2, след като стане филтрирането по уникални елементи, а пък str(year) има 4. Как правим сравнение между двете, за колко цикъла и как точно? При дебъгването виждам, че се правят 19 стъпки , ако инпута ми е 2022, Done running (19 steps) В никоя от тях обаче не виждам да се променя сетът..., моля да поясните. Благодаря предварително.