Python, SPOJ - Jak mogę zrobić to zadanie (JSPACE - Spacje) ?

Python, SPOJ - Jak mogę zrobić to zadanie (JSPACE - Spacje) ?
DU
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:2
0

Język - Python 3.5
Mam do wykonania takie zadanie
JSPACE - Spacje
https://pl.spoj.com/problems/JSPACE/
Zasadniczo polega na usunięciu spacji i zaczęciu każdego wyrazu z dużej litery

Sprawia mi ono jednak problem bo na wejściu podany jest tekst oddzielony znakiem nowej linii (Enterem) a jak wiadomo enter zakończy działanie fukncji input()
Na razie mam coś takiego

Kopiuj
print(input().replace(' ','').title())

enedil
Sprawdziłeś(łaś) w ogóle czy Twój program działa tak jak chcesz gdy jest jedna linijka wejścia?
DU
Tak, działa poprawnie
DU
O wybacz źle wpisałem w poście, najpierw title potem replace
AF
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 dni
  • Postów:172
0

Nie twórz potworków jednoliniowych a rozbij i przechowaj w zmiennej:

Kopiuj
sms_raw = input()

input oczywiście wyjdzie na enterze ale możemy zrobić coś w stylu:

Kopiuj
lines = '' #albo użyj listy i potem ''.join()
while True:
    line = input()
    if not line:
        break
    lines += line

replace(' ', '') nie sprawdzi się - jeżeli usuniesz spacje zanim przetworzysz słowa to nie będziesz mógł później ich rozpoznać. Spróbuj powalczyć z funkcją split() (wynikiem będzie lista słów) a po przetworzeniu wyniku stwórz wynikowy string przez funkcję join.

DU
Dzięki ale wytłumacz mi dlaczego to mogłoby zadziałać. Przecież w zadaniu zostanie wpisany tekst a następnie enterem potem znów wpisany tekst i enter. I w tym momencie program będzie czekał na 3 entera którego nie dostanie.
enedil
@Dubbler: nie będzie czekać, programowi zostanie zamknięte standardowe wejście.
MO
  • Rejestracja:około 10 lat
  • Ostatnio:około 22 godziny
  • Lokalizacja:Tam gdzie jest (centy)metro...
1
Kopiuj
#!/usr/bin/env python3
msg = "Dzisiaj jest   czwartek,"
print("".join(msg.title().split()))

Czytanie linii wykonaj poprzez with lub nawet bezpośrednio na sys.stdin

Kopiuj
#!/usr/bin/env python3
import sys
for line in sys.stdin:
    print("".join(line.title().split()))

Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler
DU
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:2
0

Przepraszam za bład w poście. Najpierw title() potem replace()
Zrobiłem w ten sposób i jak się spodziewałem "błąd wykonywania"
Podejrzewam że program czeka na entera którego nie dostaje

Kopiuj
x = ''
while True:
    y = input()
    if not y:
        break
    x = x + y + '\n'
print(x.title().replace(' ',''))

edytowany 1x, ostatnio: Dubbler
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 6 godzin
0

Spoj ma to do siebie że czasem bywają puste linie, spróbuj z try / except o tak

Kopiuj
while(1):
   try:
       linia = input()
       #tu reszta twojego kodu np:
       if not linia:
           break
   except:
       pass

edytowany 1x, ostatnio: sig

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.