pętla while Python, jak zatrzymać

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

0

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

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)

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 .

0

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

1

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

	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")
1

Takie tam, dla zabawy:

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()

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