Kod w python - zliczenie liczb parzystych i nieparzystych podanych przez użytkownika

Cześć. Ćwiczę pythona. Potrzebuje stworzyć program, jaki wczyta od użytkownika kolejne wartości liczb całkowitych do momentu, kiedy ten poda wartość 0. Przy podanym 0 wypisze się na ekran komunikat ile użytkownik razy podał liczb parzystych a ile nie.

Coś już mam:

liczba = int(input("Podaj liczbę: "))
print("Twoja liczba wynosi", liczba)
while liczba != 0:
    liczba = int(input("Podaj liczbę jeszcze raz: "))
    print("Twoja liczba wynosi", liczba)
    if liczba == 0:
        print("tutaj by była pętla For?")

W dobrą stronę idę? Jakby dalej obrać kierunek jakoś próbować po tym if liczba == 0:
dawać jakąś pętle? Poproszę o jakąś wskazówkę, a brakuje mi pomysłu jakby zliczać te liczby parzyste i nieparzystę. Dodam, że do parzystych miałbym jakiś kod z poprzednich ćwiczeń:

for x in range(101):

   if x%2 == 0:

       print(x)

Tylko nie wiem jak go wprowadzić do obecnego ćwiczenia :slight_smile:

Ok zacznij od podania pełnej struktury if
Potem napisz jak działa pętla while

Bo bez tego to nie ruszysz, aktualnie wyglada ze nie masz pojęcia co robisz.

Własna inicjatywa? Czy szkolny obowiązek?

Z tego fora weź tylko ifa. Sprawdzaj czy przysta czy nie zaraz po wprowadzaniu liczyby przez usera (ale po sprawdzeniu czy zero) i zliczaj. A jak zero to tylko wypisujesz wartości wcześniej zliczone.

@aesereht
Jak nie wiem jak wygląda, panie kolego :slight_smile:
Próbuje coś zadziałać. Wiedzieć wiem w teorii, ale przyszła praktyka i bywa trudniej.
@Helga88
Własna inicjatywa. Dzięki. Coś z tym popracuje jak napisałeś, a jak będą pytania napiszę Ci.

No to tym bardziej, jeżeli dla siebie to robisz. Napisać rozwiązanie każdy może ale dużo ci to nie da.

@aesereht
Prawda. Im więcej sam napiszę lepiej dla mnie :slight_smile: Jednak jak widzisz nie idzie mi lekko, ale walczę. Rozwiązania nie chcę bo słabo będzie otrzymać gotowca. Bardziej mi chodzi o wskazówkę jakąś i nakierowanie na dobry tor.

Moja wskazówka jest żebyś napisał jak działa pętla while oraz jak spełnić warunek aby z niej wyjść.

Druga wskazówka jest abyś podał pełna strukturę if

if jakiś warunek:
    blok kodu 1 pierwszy
elif:
    blok kodu 2 drugi 
else:
    blok kodu 3 trzeci

jeśli warunek spełniony kod będzie wykonany

while wyrażenie_warunkowe:
    blok kodu

jeśli warunek spełniony koniec pętli

Tak podaję o co pytałeś :slight_smile:

zgadza się

To teraz pytanie odnośnie while co jest warunkiem zakończenia pętli w twoim wypadku?
twój kod

while liczba != 0:

czyli czy potrzebujesz sprawdzać dodatkowo czy twoja liczba to 0?

Następnie co robi ten fragment kodu?

if x%2 == 0:

i jakbyś go zmodyfikował znając pełną strukturę if aby działał dla tego ćwiczenia?

while liczba != 0:

Warunek jeśli będzie liczba różna od 0 wtedy program się nie kończy - koniec następuje jeżeli liczba będzie 0. Tak ja bym sprawdzał jeśli 0 bo wówczas program ma zakończyć działanie i moim celem
by było podanie liczb parzystych i nieparzystych. Dobrze prawie?

if x%2 == 0:

tutaj taki mam kawałek gdzie jeśli podzielne bez reszty wtedy bym dopisał print parzysta .
Teraz bym próbował, aby mi jakoś zliczał po tym ifie, ale nie wiem jak zbytnio
myślałem x = x +1 by dodawał coś.
Źle czy dobrze pisze?

Tak pętla mówi: jeżeli liczba nie równa się 0 to kontynuuj. Czyli pętla sprawdza za każdym razem czy wartość liczba nie równa się 0.

Jeżeli równa się 0 to pętla sama się zakończy, więc nie potrzeba dodatkowego sprawdzania 0.

Liczby (jeżeli mówimy o całkowitych) są tylko parzyste i nieparzyste. Więc jeżeli modulo 2 = 0 to jest parzysta, a jeżeli nie równa się zero?

Teraz kod ze strukturą ifa (co napisałeś uproszczony)

@aesereht
Dzięki za wyjaśnianie, już coś bardziej wiem.
Rzeczywiście - jeśli równa się 0 to pętla sama się zakończy, więc nie potrzeba dodatkowego sprawdzania 0.
Co jeśli się nie równa 0 wtedy nie jest parzysta i by może takiego IF zrobić:

if iliczba % 2 == 0:
print("liczba parzysta")
elif liczba %2 == 1:
print("liczba nieparzysta")

Dobrze tutaj napisałem?

Jakby teraz by wpaść na sprawdzenie tego zliczania ile wystąpień tych parzystych i nie.
Użyć by jakiejś pętli for?

Teraz taki kod mam

liczba = int(input("Podaj liczbę: "))
print("Twoja liczba wynosi", liczba)
if liczba % 2 == 0:
    print("liczba parzysta")
elif liczba % 2 == 1:
    print("liczba nieparzysta")
while liczba != 0:
      liczba = int(input("Podaj liczbę jeszcze raz: "))
else:
    print("twoja liczba to 0")

Else if używa się jeżeli masz więcej niż jeden przypadek jeżeli masz tylko jeden przypadek masz po prostu

if iliczba % 2 == 0:
print("liczba parzysta")
else:
print("liczba nieparzysta")

Odnośnie zliczanie możesz wprowadzić dodatkowe zmienne jak ldot i lujm i ich używać do liczenia.

Ogolnie na razie piszesz zamiast zliczać. Całe zliczanie będzie zawarte podczas trwania programu czyli w pętli while

1 polubienie

@aesereht @Helga88
Idę w dobrym teraz kierunku?

lp=1
liczba = int(input("Podaj liczbę: "))
if liczba % 2 == 0:
    print("liczba parzysta")
elif liczba % 2 == 1:
    print("liczba nieparzysta")
while liczba != 0:
      liczba = int(input("Podaj liczbę jeszcze raz: "))
      lp=lp+1
else:
     print("ilosc liczb parzystych podanych przez uzytkownika", lp)


Jeszcze rozmyślam nad wyliczeniem liczb nieparzystych :slight_smile: 
Dla parzystych jakby mi wyśweietla :)

Coraz bliżej. Usunę ci niepotrzebne fragmenty kody

lp=1 #<- wartość 1?

while liczba != 0: #<- nie zdefiniowałeś wcześniej zmiennej liczba
      liczba = int(input("Podaj liczbę jeszcze raz: "))
      lp=lp+1 #<- czyli zakładasz, że każda liczba jest przysta?
      # <- brakujący if
      else:
          print("ilosc liczb parzystych podanych przez uzytkownika", lp)

Modyfikuj dalej :slight_smile:

@aesereht
Jutro do tego wrócę i napiszę Ci co mi wyszło po modyfikacjach :slight_smile:
@aesereht
Jeszcze nie wymyśliłem co do tych nieparzystych. Walka trwa :slight_smile:

A to ?

@aesereht
Pracuję, ale rezultat jeszcze nie jest ten co ma być… :slight_smile:
Liczy mi liczby nieparzyste w taki sposób:

ln=0
liczba = int(input("Podaj liczbę: "))
if liczba % 2 == 0:
    print("liczba parzysta")
else:
    print("liczba nieparzysta")
while liczba != 0:
      liczba = int(input("Podaj liczbę jeszcze raz: "))
      ln=ln+1

else:
     print("ilosc liczb nieparzystych podanych przez uzytkownika", ln)

Jeszcze walczę by w jednym programie liczyło jak tam chcę, czyli wspólny wynik dla nieparzystych i nieparzystych. Pracuję by rozpracować ten wynik a wspieram się twoimi wskazówkami.

Dobra masz gotowca. I teraz twoja w tym głowa, żeby się dowiedzieć dlaczego tak, a nie inaczej i co z czego wynika:

#!/usr/bin/python

lp = []
ln = []
liczba = ''

def policz():
  print("\nLiczb parzystych:", len(lp), "\nLiczb nieparzystych:", len(ln))

print("\n\t>>> Wprowadź '0', aby zakończyć i wyświetlić ile wprowadzono liczb parzystych, a ile nieparzystych. <<<\n")

while liczba != 0:
  liczba = int(input("Podaj liczbę: "))
  if liczba%2 == 0:
    lp.append(liczba)
  else:
    ln.append(liczba)
else:
  policz()
[user@host ~]$ parzyste

	>>> Wprowadź '0', aby zakończyć i wyświetlić ile wprowadzono liczb parzystych, a ile nieparzystych. <<<

Podaj liczbę: 2
Podaj liczbę: 1
Podaj liczbę: 3
Podaj liczbę: 5
Podaj liczbę: 7
Podaj liczbę: 0

Liczb parzystych: 2 
Liczb nieparzystych: 4
1 polubienie

@marcin82 dzięki. Jeszcze ze swoim pomysłem chcę zawalczyć. @aesereht nie wiem zbytnio już teraz co do tych wskazówek:

lp=1 #<- wartość 1?

while liczba != 0: #<- nie zdefiniowałeś wcześniej zmiennej liczba
      liczba = int(input("Podaj liczbę jeszcze raz: "))
      lp=lp+1 #<- czyli zakładasz, że każda liczba jest przysta?
      # <- brakujący if
      else:
          print("ilosc liczb parzystych podanych przez uzytkownika", lp)

tak podałem lp=1 bo mi wtedy wychodziło dla parzystych
a liczbę potrzebuje zdefinować też na początku
założyłem lp=lp+1 bo tak mi liczy ok dla parzystych
Z nieparzystymi w tym programie nie wiem jak zadziałać
bo później tutaj dam ln

while liczba != 0:
      liczba = int(input("Podaj liczbę jeszcze raz: "))
      lp=lp+1
      ln=ln+2 nie liczy

Czyli mam dwa kody liczący liczby nieparzyste a nie wyświetla parzystych:

#lp=1
ln=0
liczba = int(input("Podaj liczbę: "))
if liczba % 2 == 0:
    print("liczba parzysta")
elif liczba % 2 == 1:
    print("liczba nieparzysta")
while liczba != 0:
      liczba = int(input("Podaj liczbę jeszcze raz: "))
      ln=ln+1
else:
     print("ilosc liczb NIEparzystych podanych przez uzytkownika", ln)

Drugi co liczy liczby parzyste a nie liczy nieparzystych:

lp=1
liczba = int(input("Podaj liczbę: "))
if liczba % 2 == 0:
    print("liczba parzysta")
elif liczba % 2 == 1:
    print("liczba nieparzysta")
while liczba != 0:
      liczba = int(input("Podaj liczbę jeszcze raz: "))
      lp=lp+1
else:
     print("ilosc liczb parzystych podanych przez uzytkownika", lp)

Jaka wskazówka, aby połączyć. Szczególnie teraz nie wiem tego co w pętli while wykonać … Czy w jakimś miejscu użyc break albo continue