Python - удаление пробелов и знаков препинания без функций
Прежде всего, извините за мой плохой английский. Я начинающий программист, и у меня есть некоторые проблемы с моей программой на Python. Я должен сделать программу, которая нормализует пробелы и знаки препинания, например:
Если я положу строку с именем
" hello how, are u? "
Новая строка должна быть...
"Hello how are u"
Но в моем коде результат выглядит так, и я не знаю почему:
"helloo how,, aree u??"
Примечание: я не могу использовать какие-либо функции, такие как split(), strip() и т. Д.
Вот мой код:
from string import punctuation
print("Introduce your string: ")
string = input() + " "
word = ""
new_word = ""
final_string = ""
#This is the main code for the program
for i in range(0, len(string)):
if (string[i] != " " and (string[i+1] != " " or string[i+1] != punctuation)):
word += string[i]
if (string[i] != " " and (string[i+1] == " " or string[i+1] == punctuation)):
word += string[i] + " "
new_word += word
word = ""
#This destroys the last whitespace
for j in range(0,len(new_word)-1):
final_string += new_word[j]
print(final_string)
Спасибо вам всем.
РЕДАКТИРОВАТЬ:
Теперь у меня есть этот код:
letter = False
for element in my_string:
if (element != " " and element != punctuation):
letter= True
word += element
print(word)
Но теперь проблема в том, что моя программа не распознает пунктуацию, поэтому, если я поставлю:
"Hello ... how are u?"
Это должно быть как "Hellohowareu"
Но это как:
"Hello...howareu?
3 ответа
Я не собираюсь писать код для вас, так как это, очевидно, домашнее задание, но я дам вам несколько советов.
Я думаю, что ваш подход проверки следующего символа немного подвержен ошибкам. Скорее у меня был бы флаг, который вы устанавливаете, когда видите пробел или пунктуацию. В следующий раз в цикле проверьте, установлен ли флаг: если он установлен, и вы по-прежнему видите пробел, игнорируйте его, в противном случае сбросьте флаг на false.
Итак, во-первых, вам не нужно перебирать диапазон, строки в python являются итеративными. Например:
my_string = 'How are you?'
for char in my_string:
#do something each character
Во-вторых, вы используете очень пятнистую методологию для того, что вы хотите удалить. Кажется, ваш метод для отлова пробелов, которые появляются после символа, вызывает двойное добавление последнего символа. Я бы использовал другой метод, гораздо более сосредоточенный на том, где вы находитесь, а не на том, что перед вами.
Теперь это очень похоже на домашнюю работу, так что вот мое решение для обработки потоков, если вы можете объяснить это своему учителю, я сомневаюсь, что они будут возражать, что вы на самом деле не делали это сами
def filter(inp):
for i in inp:
yield " " if i in " ,.?!;:" else i
def expand(inp):
for i in inp:
yield None if i == " " else object(), i
def uniq(inp):
last = object()
for key, i in inp:
if key == last:
continue
yield key, i
def compact(inp):
for key, i in inp:
yield i
normalised = compact(uniq(expand(filter(input()))))