• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przypisanie tekstu ze znakami nowej linii

0 głosów
1,389 wizyt
pytanie zadane 2 listopada 2020 w Python przez Ganci Użytkownik (670 p.)
edycja 6 listopada 2020 przez Ganci
Cześć,

Czy wiecie jak do pojedynczej zmiennej w pythonie dodać tekst ze znakami nowej linii \n ? Zwykłe input() koniec linii uważa za zakończenie przyjmowania danych (tak wynika z moich obserwacji), a ja potrzebuję przyjąć do programu tekst z nieokreśloną liczbą nowych llinii, (a następnie przerobić go na ASCII, dodać do kazdego znaku 3 i przywrócić w char). "Na wejściu pojawi się tekst zawierający jedynie wielkie litery alfabetu łacińskiego, spacje oraz znaki nowej linii, a jego długość nie przekracza 200 znaków"

Dziękuję za udzielenie pomocy

2 odpowiedzi

+1 głos
odpowiedź 2 listopada 2020 przez mokrowski Mędrzec (159,000 p.)
wybrane 6 listopada 2020 przez Ganci
 
Najlepsza

Trochę bardziej wymyślnie:

import sys
import itertools

lines = ''.join(itertools.islice(sys.stdin, 5))

print(lines)

Dla większości będzie jednak czytelniej jeśli wykonasz wczytanie w pętli i skleisz tekst.

komentarz 2 listopada 2020 przez Ganci Użytkownik (670 p.)
Wymyślniejszy sposób może zadziałać tylko nigdy nie wiem ile linii będzie do przyjęcia, ale i na to pewnie znajdzie się jakaś rada, dzięki!
komentarz 2 listopada 2020 przez mokrowski Mędrzec (159,000 p.)
A.. No to może zdradzisz co/jaki tekst/co ma się zdarzać gdy kończysz wprowadzanie porcji danych? To zmienia podejście i rozwiązanie. Np. CTRL+D lub (windows) CTRL+Z, ułatwia sygnalizowanie zakończenia wprowadzenia.
komentarz 6 listopada 2020 przez Ganci Użytkownik (670 p.)
Masz rację, mogłem precyzyjniej opisać problem, w tej chwili zedytowałem post, aby każdy na wstępie widział o co chodzi. A między przyjęciem danych a podaniem wyniku nie ma żadnej ingerencji użytkownika.
komentarz 6 listopada 2020 przez mokrowski Mędrzec (159,000 p.)

No to zmienia postać rzeczy. Jakiś prosty skrypt:

#!/usr/bin/env python3
import sys

lines = ''.join(sys.stdin) # Czyta do EOF

# Na wielkie literki
lines = lines.upper()
print(lines, end='')

W trakcie zakończenia wprowadzania tekstu, do skryptu wędruje znak EOF (End Of File). To kończy wczytywanie na sys.stdio. W pętlach serwuje ono dane "linia po linii" stąd połączenie przez join(...).

Jeśli chcesz takie działanie sprawdzić w lokalnym systemie (a nie na SPOJ'u), to wystarczy że tworzysz plik... np taki:

file.txt

ala
ma
chomika
i nic z tego
nie wynika

.. i wołasz skrypt w konsoli GNU/Linux tak:

./script.py < file.txt
komentarz 6 listopada 2020 przez Ganci Użytkownik (670 p.)

Dziękuję, to jest to czego potrzebowałem - na spoju zielony pasek i myślę, że bardzo przydatny kawałek kodu w mojej kodowej artyleriiyes

0 głosów
odpowiedź 2 listopada 2020 przez Michałełe Nałogowiec (25,600 p.)
Możesz dać input'a w pętli, i po każdej iteracji doklejać co wpisał użytkownik do zmiennej
komentarz 2 listopada 2020 przez Ganci Użytkownik (670 p.)
Tekst jest podany tylko raz w całości na zasadzie kopiuj wklej, tak mi się wydaje, bo jest to część zadania ze spoja i nie znam dokładnych zasad wpisywania tam danych do programu. Jedyne co wiem to, że: "Na wejściu pojawi się tekst zawierający jedynie wielkie litery alfabetu łacińskiego, spacje oraz znaki nowej linii, a jego długość nie przekracza 200 znaków."
komentarz 2 listopada 2020 przez Michałełe Nałogowiec (25,600 p.)
Spoj przekierowuje dane wejściowe z pliku - zrób sobie pętle nieskończoną, do momentu kiedy będziesz miał EOFError - kiedy juz rzuci tym wyjątkiem, to przerwij pętle.
komentarz 2 listopada 2020 przez Ganci Użytkownik (670 p.)
Ok, zabieram się do implementacji, za chwilę przekaże efekty. Dzięki!
komentarz 2 listopada 2020 przez Ganci Użytkownik (670 p.)
data = ''

while True:
	try:
		data = data + input()
		
	except EOFError:
		break

Zastosowałem się do rady w ten sposób ale wciąż SPOJ podaje "Błędna odpowiedź". Poszukam jeszcze błedów w innej częśći kodu, ale i tak dziękuję za pomysł na rozwiązanie, będę z nim kombinował

Podobne pytania

0 głosów
2 odpowiedzi 340 wizyt
pytanie zadane 11 stycznia 2017 w C i C++ przez kroliczysyn Początkujący (390 p.)
0 głosów
1 odpowiedź 440 wizyt
pytanie zadane 7 sierpnia 2018 w Algorytmy przez element Nowicjusz (150 p.)
0 głosów
1 odpowiedź 1,154 wizyt

93,772 zapytań

142,730 odpowiedzi

323,382 komentarzy

63,368 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...