#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
в вашем ответе я не думаю, что он действительно отвечает на вопрос. Однако это может быть полезным комментарием для альтернативного решения