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 18:00
sig

Ja zwykle robiłem to tak:

while True:
    try:
        txt = input()
        #tu twój kod
    except:
        break

pamiętaj tylko że w niektórych zadaniach występują puste linie o których nie ma wzmianki w specyfikacji, musisz to uwzględnić.

edytowany 2x, ostatnio: sig, 2019-07-12 18:02

Pozostało 580 znaków

2019-07-13 02:17
0

Jednym wielkim kwiatkiem jest SPOJ, jak już @Mózg wspomniał, lepiej się przerzucić na LeetCode, nawet na CodeWars albo pewnie jeszcze trochę podobnych serwisów by się znalazło, tam dostajesz sensowne środowisko uruchomieniowe i konkretną informację co jest źle, w którym momencie, przy jakim teście itd. :)


Linux Mint
Arduino / Python 3.5.2

Pozostało 580 znaków

2019-07-13 08:45
0
Guaz napisał(a):

Jednym wielkim kwiatkiem jest SPOJ, jak już @Mózg wspomniał, lepiej się przerzucić na LeetCode, nawet na CodeWars albo pewnie jeszcze trochę podobnych serwisów by się znalazło, tam dostajesz sensowne środowisko uruchomieniowe i konkretną informację co jest źle, w którym momencie, przy jakim teście itd. :)

Chciałem trochę problemów algorytmicznych porozwiązywać, a znałem tylko SPOJ ze starych dobrych czasów;)
PS. Tu by mi się ta wiadomość nie przydała, gdzie błąd.

Pozostało 580 znaków

2019-07-13 08:47
0
sig napisał(a):

Ja zwykle robiłem to tak:

while True:
    try:
        txt = input()
        #tu twój kod
    except:
        break

To też mógłby być sposób. Próbowałem wcześniej, ale wyjątki jeszcze chyba nie opanowałem, bo coś mi nie wychodziło.

Pozostało 580 znaków

2019-07-16 23:21
0

Niestety dalej napotykam problem z wczytywaniem. Mianowicie mam niewiadomą liczbę linii postaci np "+ 2 3" i muszę wczytać linię i napisać wynik, w tym wypadku chodzi o dodawanie. Robię to wcześniejszym sposobem kolegi Mózga:

import sys

for item in sys.stdin:
    wiersz = [str(s) for s in input().split()] 
    if wiersz[0] == "+":
        wynik = int(wiersz[1]) + int(wiersz[2])
        print(wynik)
    elif wiersz[0] == "-":
        wynik = int(wiersz[1]) - int(wiersz[2])
        print(int(wynik))

Niestety liczy tylko co drugą linijkę. Gdzie jest błąd?

Hmmm... Patrząc po kodzie, to nie powinien, jesteś pewny? - Guaz 2019-07-17 01:13
jest błąd, niżej w edicie napisałem jaki. - sig 2019-07-17 06:40
Aaaa... Fakt, wczytuje dwie linie, jedną jako item, drugą jako wiersz. Tak prozaiczny błąd a przeoczyłem :D - Guaz 2019-07-17 21:10
Nie martw się, zdążyłem naprawić zanim znalazłem błąd ;) - sig 2019-07-17 22:56

Pozostało 580 znaków

2019-07-17 06:39
sig
1

przekombinowałeś

import sys

for item in sys.stdin:
    wiersz = item.split()
    if wiersz[0] == "+":
        wynik = int(wiersz[1]) + int(wiersz[2])
        print(wynik)
    elif wiersz[0] == "-":
        wynik = int(wiersz[1]) - int(wiersz[2])
        print(int(wynik))

edit: masz input.split(), a to wczytuje dodatkową linię. Tą wczytaną przez for item ... pomijasz

edytowany 1x, ostatnio: sig, 2019-07-17 06:42

Pozostało 580 znaków

2019-07-17 11:05
0
pjanu napisał(a):
for item in sys.stdin:
    wiersz = [str(s) for s in input().split()]

https://i.imgur.com/LOrydob.jpg

Ha, ha, ha ... - pjanu 2019-07-17 23:08

Pozostało 580 znaków

2019-07-17 23:07
0
sig napisał(a):

przekombinowałeś

Faktycznie przekombinowałem. Czego ja nie zmieniałem. Łączę praktykę z teorią (nie działa i nie wiem dlaczego). Prostota Pythona kolejny raz mnie zawodzi.
Wielkie dzięki sig:)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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