• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python - Pętla while nie działa :(

Object Storage Arubacloud
+3 głosów
391 wizyt
pytanie zadane 27 kwietnia 2022 w Python przez urwis_marek Początkujący (260 p.)

Dzień dobry wszystkim, czy ktoś mógłby mi wytłumaczyć dlaczego pętla działa wyłącznie gdy trafię numerek za pierwszym razem. Gdy próbuję prawidłowo wpisać po pierwszej nieudanej próbie pętlą nie kończy działania :(

import random

szczesliwy_numerek = random.randint(1, 100)
print(szczesliwy_numerek)

twoj_numerek = input('Podaj swój szczęśliwy numerek\n')
twoj_numerek = int(twoj_numerek)

while twoj_numerek != szczesliwy_numerek:
    szczesliwy_numerek = input('Zgadnij jeszcze raz\n')

print('Super odgadłeś numerek')
quit()


Z góry dziękuję

komentarz 27 kwietnia 2022 przez Oscar Nałogowiec (29,290 p.)
Chyba pomyliłeś zmienne.

Sprawdź, która zmienna ma być 'wzorcem' do odgadnięcia, a która to aktualny strzał.
komentarz 28 kwietnia 2022 przez VBService Ekspert (252,780 p.)
edycja 28 kwietnia 2022 przez VBService

BTW ten zapis

twoj_numerek = input('Podaj swój szczęśliwy numerek\n')
twoj_numerek = int(twoj_numerek)
 
while twoj_numerek != szczesliwy_numerek:
    szczesliwy_numerek = input('Zgadnij jeszcze raz\n')

powoduje, że porównujesz zmienne
- typu integer twoj_numerek
- typu string szczesliwy_numere

ponieważ input w python-ie zwraca wartość podaną przez użytkownika typu string.

więc w tym przypadku

while twoj_numerek != szczesliwy_numerek:

warunek jest spełniony.

 

[ on-line ]

twoj_numerek = 20;
szczesliwy_numerek = "20"
  
print(twoj_numerek == szczesliwy_numerek)
print(twoj_numerek != szczesliwy_numerek)

print(f"      twoj_numerek typ: {type(twoj_numerek)}")
print(f"szczesliwy_numerek typ: {type(szczesliwy_numerek)}")

print()

szczesliwy_numerek = input("Podaj swój szczęśliwy numerek: ")
print(f"szczesliwy_numerek typ: {type(szczesliwy_numerek)}, wartość: {szczesliwy_numerek}")

 

1
komentarz 28 kwietnia 2022 przez urwis_marek Początkujący (260 p.)
Dziękuje wszystkim pomoc :) Bardzo fajne forum, postaram się częściej tu zaglądać i udzielać.

3 odpowiedzi

+1 głos
odpowiedź 27 kwietnia 2022 przez Wiciorny Ekspert (269,710 p.)
wybrane 28 kwietnia 2022 przez urwis_marek
 
Najlepsza
import random
 
szczesliwy_numerek = random.randint(1, 100)
print(szczesliwy_numerek)
 
twoj_numerek = input('Podaj swój szczęśliwy numerek\n')
twoj_numerek = int(twoj_numerek)
 
while twoj_numerek != szczesliwy_numerek:
    twoj_numerek = input('Zgadnij jeszcze raz\n')
    twoj_numerek = int(twoj_numerek)
print('Super odgadłeś numerek')
quit()

Po prostu jak napisał Oskar pomyliły CI się zmienne powinieneś raz jeszcze wpisać coś jako twój numerek - i dodatkowo rzutować ( chociaż nie wiem czy to poprawne stwierdzenie nie pisze w pythonie na int).
Program sprawdziłem np:

88
Podaj swój szczęśliwy numerek
34
Zgadnij jeszcze raz
88
Super odgadłeś numerek

komentarz 28 kwietnia 2022 przez urwis_marek Początkujący (260 p.)
edycja 28 kwietnia 2022 przez urwis_marek
Dziękuję bardzo, rzeczywiście pomyliłem zmienna i w pętli zamiast "szczęśliwy_numerek" powinien być "twoj_numerek".

edit.

Przepraszam, czytałem komentarz rano i nie zrozumiałem prostego zdania.
komentarz 28 kwietnia 2022 przez Wiciorny Ekspert (269,710 p.)
nie ma za co przepraszać, w końcu pytanie jest pytaniem :)
0 głosów
odpowiedź 27 kwietnia 2022 przez VBService Ekspert (252,780 p.)
edycja 27 kwietnia 2022 przez VBService

Skoro losowana liczba jest z zakresu od 1 do ...

to można zapisać to bez powtarzania pytania

twoj_numerek = input('Podaj swój szczęśliwy numerek\n')

gdy po prostu zainicjujemy zmienną twoj_numerek

 

[ on-line ]

import random
 
szczesliwy_numerek = random.randint(1, 100)
print(szczesliwy_numerek)
 
twoj_numerek = 0
 
while twoj_numerek != szczesliwy_numerek:
    twoj_numerek = input('Zgadnij szczęśliwy numerek\n')
    twoj_numerek = int(twoj_numerek)
 
print('Super odgadłeś numerek')
quit()

 

–1 głos
odpowiedź 27 kwietnia 2022 przez dzihaaad Nowicjusz (220 p.)

Musisz w pętli dodać jakiś warunek if , który zakończy pętlę. Najprościej:

while twoj_numerek != szczesliwy_numerek:

    szczesliwy_numerek = input('Zgadnij jeszcze raz\n')

    if twoj_numerek == szczesliwy_numerek:
        print('Super odgadłeś numerek')

 

komentarz 27 kwietnia 2022 przez dzihaaad Nowicjusz (220 p.)

Poprzednie rozwiązanie nie było niestety rozwiązaniem ... zawaliłem... przepraszam

Generalnie to napisałbym to tak:

import random

szczesliwy_numerek = random.randint(1, 100)
print(szczesliwy_numerek)

twoj_numerek = input('Podaj swój szczęśliwy numerek\n')
twoj_numerek = int(twoj_numerek)

while twoj_numerek:
    if twoj_numerek == szczesliwy_numerek:
        print('Super odgadłeś numerek')
        break
    else:
        twoj_numerek = input('Zgadnij jeszcze raz\n')
        twoj_numerek = int(twoj_numerek)

Teraz chyba będzie ok...Generalnie trzeba przerwać pętlę...

komentarz 27 kwietnia 2022 przez Wiciorny Ekspert (269,710 p.)

Sory, ale  po co wrzucasz warunek if ? Skoro masz  Piszę do autora tego tematu... ponieważ generalnie to jest dodatkowy warunek który dla przypadku tej pętli nie ma sensu.

twoj_numerek != szczesliwy_numerek:

jeśli jest różny, oznacza, że nie jest trafiony więc nie potrzeba sprawdzać  a poinformować 
('Zgadnij jeszcze raz\n')

natomiast jeśli pętla nieprzejdzie to trafił...  print('Super odgadłeś numerek')

błędem jest wpisanie w szczęsliwy numerek 
szczesliwy_numerek = input('Zgadnij jeszcze raz\n')
bo to twój numerek powinien być aktualizowany, a szczęsliwy i tak bedzie losowany. 

2
komentarz 27 kwietnia 2022 przez dzihaaad Nowicjusz (220 p.)
edycja 27 kwietnia 2022 przez dzihaaad
Dziękuję. Poprawiłem się.. ale jak widzę znów zawaliłem...  Przemyślę.

Podobne pytania

+1 głos
2 odpowiedzi 406 wizyt
pytanie zadane 24 listopada 2019 w Python przez kingkushlee Gaduła (3,960 p.)
0 głosów
1 odpowiedź 776 wizyt
pytanie zadane 27 maja 2018 w Python przez El Lirón Obywatel (1,320 p.)
0 głosów
1 odpowiedź 257 wizyt
pytanie zadane 31 maja 2019 w Java przez Łukasz880525 Początkujący (250 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 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!

...