Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

kirill2ll avatar kirill2ll 4 Точки

Python Fundamentals -> Text Processing -> Rage Quit

Здравейте, 

Text Processing -> Rage Quit: https://softuni.bg/trainings/resources/officedocument/74658/text-processing-exercise-programming-fundamentals-with-python-september-2022/3840

 

Опитвам се да реша задачата без regex, но ми дава само 28/100 в judge. Ако може малко помощ, защото не мога да намеря грешката си:

 

line = input().upper()

final_string = ""

current_string_to_repeat = ""

#count of unique symbols
unique_symbols = 0

for ch in line:
    if ch.isdigit():
        final_string += current_string_to_repeat * int(ch)
        current_string_to_repeat = ""

    else: #when ch is a letter or symbol eg @ # etc
        current_string_to_repeat += ch
        if ch not in final_string:
            unique_symbols += 1
print(f"Unique symbols used: {unique_symbols} \n{final_string}")
Тагове:
0
Fundamentals Module
icowwww avatar icowwww 2673 Точки
Best Answer

Здравей,

Проверките ти са прекалено прости.

Гледаш символа дали е цифра, без значение дали въобще имаш събрани символи различни от цифри. Също така не събираш цифрите в число.

За да е най-плавно навлизането в регексите, направих близка аналогия до нужния регекс за мачване на описаната поредица.

Например за да задоволиш регекса [^\d]+[\d]+ , който търси поредица от символи, започващи с поне един символ различен от цифра и след това поне един символ цифра.

При минаване през всеки символ от инпута трябва да знаеш докъде си стигнал. Като на база на това, което си събрал от предните символи, ще знаеш какъв символ да очакваш и какво да правиш с него.

Това е неопростен код, направен с цел по-лесно разбиране на урока с регекси, като представя проверки на база текущ символ и предишни символи, за да задоволи специфична поредица(шаблон)

https://pastebin.com/0GRyHEaJ

1
01/04/2023 01:22:10
kirill2ll avatar kirill2ll 4 Точки

Мерси много за коментара ти. Да, верно не проверявах дали числото може да е по-голямо от 9 (например а10 => АААААААААА). Добавих тази проверка и всичко тръгна!


 

line = input().upper()

#the output text
final_string = ""

#creating temporary string that will be duplicated several time A3 => AAA
current_string_to_repeat = ""

#creating a string for the digit after the symbols that should be repeated A10 => AAAAAAAAAA
current_digit_string = ""

# count of unique symbols
unique_symbols = 0

for i in range(len(line)):
    ch = line[i]

    if ch.isdigit(): #when ch is a digit
        #adding symbol to the digit string e.g. 1 + 3 + 2 => 132
        current_digit_string += ch

        #checking if it's not the last symbol of our main string to avoid out of range
        if i == len(line) - 1:
            final_string += current_string_to_repeat * int(current_digit_string)
        #checking if the next symbol is a digit and adding continue so we can keep adding digits 1 + 3 + 2 => 132
        elif line[i + 1].isdigit():
            continue
        #adding symbols to the output string by multiplying it with the digit
        else:
            final_string += current_string_to_repeat * int(current_digit_string)
            #resetting
            current_string_to_repeat = ""
            current_digit_string = ""

    else:  # when ch is a letter or symbol eg @ # etc
        current_string_to_repeat += ch
        if ch not in final_string:
            unique_symbols += 1


print(f"Unique symbols used: {unique_symbols} \n{final_string}")
1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.