Pętla ignoruje polecenia

0

Witam, mam problem, ponieważ pętla ignoruje "if" po drodze i wyskakuje mi "błędne ID". ktoś może widzi gdzie jest problem.

zamowienie = str(input("zamówienie"))
ilosc = float(input("podaj ilosc"))
for x in zamowienie:
    lista = []
    if x == str(1) and ilosc == range(1,11):
        lista.append(ilosc * 3.5)
    elif x == str(2) and ilosc == range(1,6):
        lista.append(ilosc * 2.99)
    elif x == str(3) and ilosc == range(1,2):
        lista.append(ilosc * 9.99)
    elif x != str(range(1,4)):
        print("Błędne ID")
    else:
        print("błedna ilosc")
    print(lista)
0

A jaki jest przykładowy Input?

1

and 1<= ilosc <= 11, 12, bo exclusively, itd...

1

widzę 2 powody:

  1. ilosc == range(1,11)
    korzystaj z range w parze z operatorem in
    np: ilosc in range(1, 11)

  2. x != str(range(1,4))
    To jest zawsze spełnione...
    Mógłbyś użyć funkcji range jak wyżej jeśli zmienna zamowienie byłaby liczbą...
    Nie wiem po co iterujesz po zamówieniu które jest stringiem. Spróbuj sobie x przed deklaracją pętli wypisać. :)

0

Po kolei.

1.

zamowienie = str(input("zamówienie"))

input zwraca i tak stringa, więc nie masz po co konwertować.

2.

    if x == str(1) and ilosc == range(1,11):

to już było wypomniane, ale przypomnę, ilosc jest floatem, range jest obiektem, który oznacza zakres wartości. Jak mogą być one sobie równe? Potrzebujesz testu na zawieranie.
3.

    elif x != str(range(1,4)):

ten warunek zawsze będzie prawdziwy, spójrz tylko jak wygląda str(range(1,4)):

>>> str(range(1,4))
'range(1, 4)'

x natomiast jest jednym znakiem stringa.

0

O dziwo działa, starałem sie przerobić kod według rad, ale najwyraźniej Python 3 ma inne zdanie co do większości opini bo inne opcje wykrzaczał
obecnie kod wygląda

zamowienie = str(input("zamówienie"))
ilosc = float(input("podaj ilosc"))
for x in zamowienie:
    produkty = []
    lista = []
    if x == str(1) and ilosc in range(1,11):
        lista.append(ilosc * 3.5)
        produkty.append("A")
    elif x == str(2) and ilosc in range(1,6):
        lista.append(ilosc * 2.99)
        produkty.append("B")
    elif x == str(3) and ilosc in range(1,2):
        lista.append(ilosc * 9.99)
        produkty.append("C")
    elif x != str(range(1,4)):
        print("Błędne ID")
    else:
        print("błedna ilosc")
    print(produkty)
    print(lista)

nie działa jedynie błędna ilośc i wskazuje Błędne ID, nie do końca wiem jak to ugryźć, napisać trzy nowe elify?
Zastanawiam się tylko jak to zapętlić aby przyjmował zamówienie raz po raz aż nie wyśle pustego entera.

0
szopen469 napisał(a):
    elif x != str(range(1,4)):
        print("Błędne ID")

to się zawsze wykona. Raczej chciałbyś tutaj sprawdzić elif x not in '123'.

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