Как я могу упорядочить строку по алфавиту, используя только цикл While и условия?

#python #python-3.x

#python #python-3.x

Вопрос:

Задана строка "aaababababab" (только 'a' или 'b' разрешена): Как мне упорядочить строку в алфавитном порядке, чтобы она была похожа "aaaaaaabbbbb" , используя только цикл while?

Это моя текущая попытка:

 word = "ababababaabab"
wordfixed = ""
i = 0

while i < len(word):
    if word[i] == "a":
        wordfixed  = "a"
        i  = 1

    elif word[i] == "b":
        wordfixed  = (word[i])
        i  = 1

print(wordfixed)
  

Но он просто печатает исходное слово обратно. Как я могу заставить его печатать желаемый результат?

Комментарии:

1. Как насчет ''.join(sorted(word))

2. Вместо одной переменной wordfixed вы могли бы использовать отдельную переменную для всех «a» и всех «b» и объединить их в конце.

3. @WasifHasan в вопросе указано (дважды), что разрешено только while

Ответ №1:

Используя вашу текущую идею, вы могли бы просто добавить к одному концу или другому в зависимости от значения буквы. Это позволило a бы накапливать в начале и b наращивать в конце.

 word = "ababababaabab"
wordfixed = ""
i = 0

while i < len(word):
    if word[i] == "a":
        wordfixed = word[i]   wordfixed 
    elif word[i] == "b":
        wordfixed = wordfixed   word[i]
    i  = 1


print(wordfixed)
# aaaaaaabbbbbb
  

Ответ №2:

Вы можете создать две «вспомогательные» переменные: одну для накопления a s и одну для b s. Затем, в конце концов, просто объедините их в правильном порядке:

 word = "ababababaabab"
wordfixed = ""
wordfixed2 = ""
wordfixed3 = ""
i = 0

while i < len(word):
    if word[i] == "a":
        wordfixed2  = "a"
    elif word[i] == "b":
        wordfixed3  = "b"
    i  = 1

wordfixed = wordfixed2   wordfixed3
print(wordfixed)
  

Я думаю, что это правильный способ сделать это.

Ответ №3:

Ваш код не работает, потому что вы добавляете букву, которая у вас есть в данный момент, в конце, поэтому впоследствии она будет такой же.

Вместо этого вы можете подсчитать количество 'a' ‘s при циклическом просмотре строки один раз (цикл for лучше подходит, но можно использовать и while) — затем распечатать оставшееся 'b' :

 word = "ababababaabab"
lw = len(word)
i = 0 
a_s= 0  
while i < lw:
    if word[i] == 'a':
        print("a", end="")  # dont end the line quite yet
        a_s  = 1 
    i  = 1

# print b's for remaining wordlength minus printed a's
print('b' * (lw-a_s))
  

или лучше с помощью цикла for:

 a_s = 0
for letter in word:
    if letter == "a":
        a_s  =1
        print(letter, end="")
print('b' * (lw-a_s))
  

Ответ №4:

Я пойду с решением @Mark_Meyer, но если вам действительно не нужно использовать только цикл while, вот простой способ :

 word = "ababababaabab"
print(word.count('a')*'a'   word.count('b')*'b')
# aaaaaaabbbbbb
  

Комментарии:

1. В вопросе указано, что разрешен только while цикл, и из-за отсутствия while в вашем ответе я не думаю, что он действительно отвечает на вопрос. Однако это может быть полезным комментарием для альтернативного решения