• 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

Object Storage Arubacloud
0 głosów
572 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 (155,460 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 (155,460 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 (155,460 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 165 wizyt
pytanie zadane 11 stycznia 2017 w C i C++ przez kroliczysyn Początkujący (390 p.)
0 głosów
1 odpowiedź 291 wizyt
pytanie zadane 7 sierpnia 2018 w Algorytmy przez element Nowicjusz (150 p.)
0 głosów
1 odpowiedź 569 wizyt

92,555 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,941 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...