Python 3.5.2 a kilka zadan

0

Witam
Przy robieniu dwóch zadań natrafiłem na błędy (na bank moje) które nie jestem w stanie ominąć. Zacznę od pierwszego:
http://simbaxb.blogspot.com/2013/07/cwiczenia-i-ich-rozwiazania-kurs-python.html przy robieniu zadania (lekcja 7, zad.3) siedziałem cały dzień i myśle "cholera, nie zrobie go". Tak więc ciekaw odpowiedzi znalazłem tą strone. Podejrzewam, że jednak zadanie było robione na starszej wersji ze względu na różnice między wersja Python. W każdym razie poddałem się, przepisałem ten kod (starając się go również analizować) i wyskakuje błąd "TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'". Szukałem jak mogę go rozwiązać ale coś nie idzie.

Druga kwestia jest taka: przy zadaniu (lekcja 6, zad 2) sytuacja wyglądała tak samo jak w wyżej wymienionym, z tym że na końcu otrzymuje "ZeroDivisionError: float division by zero".

Mógłbym prosić o poprawny kod dla Python 3.5.2. Jeśli jesteś(cie) w stanie przy okazji wytłumaczyć czemu tak a nie inaczej, i dlaczego takie błędy mi wysypuje to chyba rozwiejecie moje wszystkie niewiadome.
Pozdrawiam

0

ZeroDivisionError: float division by zero

Chyba wiesz jak sobie z tym poradzić?

0

Niezbyt dlatego tutaj piszę. Znaczenie teog komunikatu jest jak najbardziej jasne.

wydzial = range(1,6)
dobre = []
oceny = input("podaj swoje oceny ")
a=0
for x in oceny:
    if x not in wydzial: continue
    dobre += [x]
for y in dobre:
    a += y
print("Twoja średnia ocen to, 5.2f" % (float(a)/len(dobre)))

(jest to odpowiedz do tego zadania)
w takim razie jak "podmienić" by wciąż było 0 jednak aby program nie wywalał błędu?

0

W jakiej postaci użytkownik ma Twoim zdaniem wpisać oceny? W jakiej by nie wpisał, to zawsze będzie spełniony warunek:

if x not in wydzial:

Umieszczaj kod w znacznikach <code class="python"></code>

0

Wypróbowałeś swój kod? Pojawia się podpowiedź "podaj swoje oceny", chcę wpisać 5, 3 i 3. Jakie klawisze mam kolejno nacisnąć?
Musisz zmienić kod, oceny czytać w pętli i robić konwersje - funkcja input zwraca string, a nie liczbę.

0

Oczywiście, że go próbowałem dlatego wiem jaki mi zwraca błąd.
Może inaczej, treść zadania "Ćw. Napisz program „oceny.py”, który wczytuje od użytkownika kolejne oceny i:
sprawdza czy wprowadzona ocena jest na liście dopuszczalnych na wydziale ocen
jeżeli ocena jest na liście dopuszczalnych na wydziale ocen, dodaje ją na listę otrzymanych ocen
jeżeli wciśnięto sam Enter, oznacza to koniec listy otrzymanych ocen
wyświetla wyliczoną dla listy otrzymanych ocen średnią arytmetyczną.".
Dlatego jest zawarte "if not"
po wpisaniu liczb i zatwierdzeniu enterem generalnie przechodzi przez wszystkie linie, jedynie na końcu rozsypuje się i tutaj nie wiem jak go zmienić.

1

Czego nie zrozumiałeś w poniższym zdaniu?

W jakiej by nie wpisał, to zawsze będzie spełniony warunek:

if x not in wydzial:

Żadna ocena nie zostanie dopisana listy dobre, zatem zawsze będzie dzielenie przez zero.
Zgodnie z treścią zadania procedura wprowadzania ocen powinna wyglądać (pseudokod):

while True:
   wypisz "podaj kolejną ocenę"
   x = odczytaj z konsoli 
   jeśli x jest pustym stringiem, to wyjdź z pętli
   przekonwertuj x na liczbę (może się pojawić błąd)
   sprawdź czy x jest dopuszczalne, jeśli tak, to dopisz do listy

Konwersja float(a) nie jest konieczna, wystarczy na początku napisać

a = 0.0
1

Mam pomysł

tekst = input("Wpisz cokolwiek, uzyj troche kropek ")
zdania = tekst.split(".")
for zdanie in zdania:
    print(zdanie, len(zdanie.strip().split(" ")))

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