/ / separator słów dla kodowania Pythona [zamknięty] - python, słowo, separator, zapach kodu

separator słów w języku Pythona [zamknięty] - python, słowo, separator, kod-zapach

Tak więc pytanie brzmi:

Napisz program, który akceptuje jako wejście zdaniew którym wszystkie słowa są uruchamiane razem, ale pierwszy znak każdego słowa jest duży. Konwertuj zdanie na ciąg, w którym słowa są oddzielone spacjami, a pierwsze słowo zaczyna się wielką literą. Na przykład ciąg „StopAndSmellTheRoses”. zostanie zamieniony na „Zatrzymaj i powąchaj róże”.

Jestem tak zdezorientowany, jak dotąd, mój kod.

def main():

#User enters a sentence
my_string=input("enter a sentence: ")
print(my_string.capitalize())

main()

Odpowiedzi:

2 dla odpowiedzi № 1

Możesz zapętlić ciąg i dodać za każdym razem postać:

my_string = "StopAndSmellTheRoses"
i = 0
result = ""
for c in my_string:
if c.isupper() and i > 0:
result += " "
result += c.lower()
else:
result += c
i += 1

print result

Będziemy używać c dla każdej postaci, gdy przechodzimy przez łańcuch i użyjemy i aby śledzić pozycję w ciągu.

Istnieją dwie możliwości: albo jest to wielka litera (z wyjątkiem pierwszej), albo nie.

  • W pierwszym przypadku dodamy spację i ten znak jako małą literę do wyniku. Zapewni to wstawienie spacji przed każdą wielką literą w dalszej części zdania.
  • W drugim przypadku jest to mała litera lub wielka litera na początku zdania. Nie musimy nic z tym robić i dodamy ją od razu.

Na koniec dodajemy jeden do i ilekroć „skończymy z postacią (i += 1), ponieważ oznacza to, że poprawnie wiemy, gdzie jesteśmy w zdaniu.


1 dla odpowiedzi nr 2

Witamy w SO!

Jednym ze sposobów jest przejście przez łańcuch, sprawdzanie znaków jeden po drugim:

#You"ve learned how to iterate through something, right?
i = 0 #a counter
for c in my_string: #get the characters of my_string, one by one.
if c.isupper():        #check if it"s in upper case
if i == 0: #if it"s the first letter
new_string += c   #let it be like the original
else:
new_string += " "+.lower() #it"s not the first letter,
#so add space, and lower the letter.
else:
new_string += c    #else, only add the letter to the new string
i += 1

Edytować dodano podwójne sprawdzenie, czy jest to pierwsza litera zdania, czy nie. Zaktualizowana wersja demonstracyjna.

Alternatywnie do korzystania z licznika można również użyć wbudowanej funkcji enumerate, która zwraca krotkę indeksu i wartości.

for i,c in enumerate(my_string): #get the characters of my_string, one by one.
if c.isupper():        #check if it"s in upper case
if i == 0: #if it"s the first letter
new_string += c   #let it be like the original
else:
new_string += " "+c.lower() #it"s not the first letter,
#so add space, and lower the letter.
else:
new_string += c    #else, only add the letter to the new string

Próbny

>>> my_string = "ImCool"
>>> new_string = ""
>>> i = 0 #a counter
>>> for c in my_string: #get the characters of my_string, one by one.
if c.isupper():        #check if it"s in upper case
if i == 0: #if it"s the first letter
new_string += c   #let it be like the original
else:
new_string += " "+.lower() #it"s not the first letter,
#so add space, and lower the letter.
else:
new_string += c    #else, only add the letter to the new string
i += 1


>>> new_string
"Im cool"

Mam nadzieję że to pomoże!


0 dla odpowiedzi № 3

Będziesz potrzebował trochę wyrażeń regularnych.

import re
split = re.findall(r"[A-Z][a-z.]+", "HelloThisIsMyString.")

Musisz także połączyć je razem (wstawianie spacji)

" ".join(...)

i obsługiwać konwersje przypadków

" ".join(word.lower() for word in split)

(i jak już zrobiłeś, używaj pierwszego słowa jako wielkiego)

" ".join(word.lower() for word in split).capitalize()

0 dla odpowiedzi nr 4

Wygląda na to, że jesteś trochę zdezorientowany itego można się spodziewać, jeśli jesteś nowy w Pythonie. Zakładam, że przyjmujesz dane wejściowe od użytkownika w przeciwieństwie do danych wejściowych dla funkcji. Tak czy inaczej, stworzyłbym prostą funkcję, do której możesz wstawić dane wejściowe użytkowników. Poniższa funkcja spełni to, o co pyta.

def sentenceSplitter(sentence):
result = ""
for i, x in enumerate(sentence):  #i is character index, x is the element
if i == 0:
result = result + x
elif x.isupper() == False:  #if element is not uppercase, add it to the result
result = result + x
else:                       # Otherwise, add a space and lowercase the next letter
result = result + " " +x.lower()
return(result)

Aby powtórzyć, jeśli chcesz wydrukować zdanie, napisz to po funkcji:

def main():

#User enters a sentence
my_string=input("enter a sentence: ")
print(sentenceSplitter(my_string))
main()

Jeśli nadal jesteś zdezorientowany, możesz zadawać dalsze pytania.