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 № 1Moż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.