• 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 :(

VPS Starter Arubacloud
+3 głosów
525 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,340 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 (255,840 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 (277,600 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 (277,600 p.)
nie ma za co przepraszać, w końcu pytanie jest pytaniem :)
0 głosów
odpowiedź 27 kwietnia 2022 przez VBService Ekspert (255,840 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 (277,600 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 488 wizyt
pytanie zadane 24 listopada 2019 w Python przez kingkushlee Gaduła (3,960 p.)
0 głosów
1 odpowiedź 954 wizyt
pytanie zadane 27 maja 2018 w Python przez El Lirón Obywatel (1,350 p.)
0 głosów
1 odpowiedź 279 wizyt
pytanie zadane 31 maja 2019 w Java przez Łukasz880525 Początkujący (250 p.)

93,030 zapytań

141,992 odpowiedzi

321,294 komentarzy

62,376 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...