EOF w Pythonie

Odpowiedz Nowy wątek
2019-07-12 00:15
0

Jak w Pythonie wczytuje się np. liczby umieszczone w kolejnych wierszach, jeżeli nie wiem ile tych liczb mam. Chodzi mi o zrobienie czegoś na kształt EOF w C.
Spróbowałem coś takiego, ale w SPOJ wyrzuca mi błąd wykonania NZEC:

suma = 0

while True:
    a = input()
    if a == '':
        break
    suma += int(a)
print(suma)

Program wczytuje liczby w kolejnych linijkach i podaje ich sumę.

Pozostało 580 znaków

2019-07-12 00:28
0

Możesz iterować po fileinput.input():

import fileinput

print(sum(int(line) for line in fileinput.input()))
python test.py <<EOF
> 1
> 2
> 3
> EOF
6
edytowany 2x, ostatnio: Spearhead, 2019-07-12 00:30
Nie działa mi to, a poza tym wolałbym nie używać dodatkowych modulów. Nie wiem, czy mogę. - pjanu 2019-07-12 08:13

Pozostało 580 znaków

2019-07-12 06:06
0

Nie robię na codzien w Pythonie, ale czy tu przypadkiem nie chodzi o EOL? Bo EOF jak nazwa wskazuje to end of file.

Pozostało 580 znaków

2019-07-12 08:14
0
axelbest napisał(a):

ale czy tu przypadkiem nie chodzi o EOL? Bo EOF jak nazwa wskazuje to end of file.
Chodzi mi o EOF. Żebym wiedział przy wczytywaniu, że to już koniec. Coś w stylu C;

c = getchar();
while (c != EOF) {
zrob_cos_ze_znakiem(c);
c = getchar();
}
No to już lepiej wygląda, ale Ty chcesz zliczac dane po liniach, czyli musi być jeszcze jakiś warunek na znak końca linii. No chyba ze ja nadal czegoś nie rozumiem - axelbest 2019-07-12 08:29

Pozostało 580 znaków

2019-07-12 08:34
0
axelbest napisał(a):

Nie robię na codzien w Pythonie, ale czy tu przypadkiem nie chodzi o EOL? Bo EOF jak nazwa wskazuje to end of file.
Python pobiera całą linię poleceniem input(), nie w tym problem.
Problem, że jak mu powiedzieć, że koniec wszystkich linii, a nie wiem ile tych linii.

To wyjaśnia wszystko, thanks :) może kiedyś przysiąde do Pythona :) - axelbest 2019-07-12 11:01

Pozostało 580 znaków

2019-07-12 08:47
0

Nie musisz wiedzieć gdzie jest koniec pliku, ani ile jest linii. Skorzytaj z context managera i będziesz miał problem z głowy:

with open('file.txt') as f:
    lines = f.read().splitlines()

Po wykonaniu tego kodu będziesz miał kolejne linie pliku w kolejnych elementach listy lines.


Wiedza to potęga
edytowany 2x, ostatnio: Haskell, 2019-07-12 08:53

Pozostało 580 znaków

2019-07-12 09:07
0
Haskell napisał(a):

Nie musisz wiedzieć gdzie jest koniec pliku, ani ile jest linii. Skorzytaj z context managera i będziesz miał problem z głowy:

with open('file.txt') as f:
    lines = f.read().splitlines()

Tylko, że ja nie znam nazwy pliku. Tak jest np. jak rozwiązuję sobie zadania na sprawdzarce (np. SPOJ). Muszę korzystać ze standardowego wejścia i wyjścia :(

Pozostało 580 znaków

2019-07-12 09:20
0
> seq 10 | python3 -c 'import sys; print(sum(map(int, sys.stdin)))'
55
> seq 10 | python3 -c 'import sys; print(sum(int(ln) for ln in sys.stdin))'
55
> seq 10 | python3 -c '
  import sys

  total = 0
  for line in sys.stdin:
      total += int(line)

  print(total)
  '
55
> 

SPOJ jest ujowy. Przerzuć się na LeetCode.

Pozostało 580 znaków

2019-07-12 09:31
0

Pokaż to zadanie, żebyśmy dokładnie wiedzieli o co chodzi, bo tak to zgadujemy.


Pozostało 580 znaków

2019-07-12 09:36
0
Mózg napisał(a):
  import sys

  total = 0
  for line in sys.stdin:
      total += int(line)

  print(total)

> 

Ten sposób działa. Dzięki:)

Pozostało 580 znaków

2019-07-12 09:41
0
lion137 napisał(a):

Pokaż to zadanie, żebyśmy dokładnie wiedzieli o co chodzi, bo tak to zgadujemy.
To było zadanie:
https://pl.spoj.com/problems/SUMA/

Ale tu nie chodziło o algorytm, bo ten jest prosty tylko o technikę, żeby to weszło bez błędów.
Przerzuciłem się z C/C++ na Python. Mówią, że łatwiejszy a tu takie kwiatki;)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: CCBot