pętla while Python, jak zatrzymać

pętla while Python, jak zatrzymać
WD
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

Witam. Mój problem polega na tym , że pętla ciągle mi się powtarza, np. daję wybór "1" - to wynik wyjdzie poprawny, ale w kolejnej linijce znowu pokaże się główne pytanie: "Dokonaj wyboru...", nie wiem co robię źle. Szukałem różnych przykładów, wzorowałem się na nich ale ciągle to samo.

wybor = -1

while wybor != 0:
wybor = int(input("Dokonaj wyboru:\n1-pokoj z widokiem na morze\n2-pokoj z widokiem na ogrod\n-> : "))

if wybor == 1:
    print("koszt 200zl")
if wybor == 2:
    print("koszt 150zl")

elif(wybor < 1 or wybor > 2):
    print("Nie ma takiej opcji")

Dokonaj wyboru:
1-pokoj z widokiem na morze
2-pokoj z widokiem na ogrod
-> : 1
koszt 200zl
Dokonaj wyboru:
1-pokoj z widokiem na morze
2-pokoj z widokiem na ogrod
-> :

sugar_hiccup
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 lata
  • Postów:176
0

Ok, a po co opakowałeś to w pętlę, skoro chcesz to wykonać tylko raz?


My to na arm napiszemy wszystko i zrobimy co chcemy tyle że 90% kodu to biblioteki z netu albo robota kompilatora Zdajesz sobie sprawę że tak na prawdę wyższy poziom języka może świadczyć jedynie o tym jak niskim poziomem wiedzy może dysponować bałwan,który nazwie się w rezultacie programistą i napisze działający program wciskając zleceniodawcy że tam to akurat musi być 100MHz ARM z 1M pamięci bo tak na prawdę jego pusta łepetyna nie potrafi zrealizować czegoś na innym słabszym mikrokontrolerze
WD
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

widziałem, podobny przykład w książce i myślałem, że jak coś raz się wybierze to już dalej nie będzie się powtarzało. (mimo, że jest to pętla)

sugar_hiccup
no nie, pętla będzie się wykonywać dopóki jej warunek jest spełniony, czyli tutaj wybor != 0, skoro podajesz coś innego niż 0, to nie ma powodu, by się skończyła
WD
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

ok. ale jak wpisze: "wybor != 1 , to zrobi mi tylko pierwszą opcje..., bo gdy wpiszę "dokonaj wyboru" : 2 , to znowu będzie powtarzało .

WD
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

jest jakaś inna opcja by dokonać wyboru i żeby to działało tylko raz :D ?

sugar_hiccup
no dalej stawiam to samo pytanie: po co ci w ogóle jakaś pętla tutaj?
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około 6 godzin
  • Postów:4935
1

Daj, break, jak chcesz przerwać pętlę, to przerwie się w tym przypadku i, oczywiście w przypadku wybor = 0:

Kopiuj
	wybor = None
	while wybor != 0:
		wybor = int(input("Dokonaj wyboru:\n1-pokoj z widokiem na morze\n2-pokoj z widokiem na ogrod\n-> : "))
		if wybor == 1:
			print("koszt 200zl")
			break
		if wybor == 2:
			print("koszt 150zl")
			break
		elif(wybor < 1 or wybor > 2):
			print("Nie ma takiej opcji")

WD
Ale ze mnie ameba :D dawałem "break" tylko w jednym miejscu( robiąc to wcześniej). Dzięki. Tylko dlaczego wybor = None ? nie może być tam "0" ?
lion137
Może byc, ale None`` jest najbezpieczniejsze, bo nie jest to wartość liczbowa - nie zaimplementujesz buga przez przypadek, dając na przykład 0``` :)
WD
Ma to sens :D coraz bardziej mi się to podoba. Dzięki :D
Arthan
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
1

Takie tam, dla zabawy:

Kopiuj
class Recepcja(object):
    def __init__(self):
        self.pokoje = [
          ['pokoj z widokiem na morze', 200],
          ['pokoj z widokiem na ogrod', 150],
          ['pokoj z widokiem na mur', 100],
          ['pokoj bez okien', 80],
        ]

    def msgWybor(self):
        tekst = 'Dokonaj wyboru:\n'
        for i, pokoj in enumerate(self.pokoje):
            tekst += '{}-{}\n'.format(i+1, pokoj[0])
        tekst += '-> : '
        return tekst

    def getWybor(self):
        return int(input(self.msgWybor()))
    
    def msgKoszt(self, wybor):
        return 'koszt {}zl'.format(self.pokoje[wybor-1][1])
    
    def czyWyborPrawidlowy(self, wybor):
        return (0 < wybor) and (wybor < len(self.pokoje)+1)
    
    def podajKoszt(self):
        wybor = self.getWybor()
        while not self.czyWyborPrawidlowy(wybor):
            print("Nie ma takiej opcji")
            wybor = self.getWybor()
        print(self.msgKoszt(wybor))

if __name__ == '__main__':
    recepcja = Recepcja()
    recepcja.podajKoszt()

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.