Pętla ignoruje polecenia

Odpowiedz Nowy wątek
2019-01-05 17:43
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)

Pozostało 580 znaków

2019-01-05 17:49
0

A jaki jest przykładowy Input?

zamowienie 1 ilosc 5 - szopen469 2019-01-06 16:55

Pozostało 580 znaków

2019-01-05 17:55
1

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


edytowany 3x, ostatnio: lion137, 2019-01-06 15:36
A ten list to po co? Nie wiem czy wiesz, ale test x in range(y, z, t) wykona się natychmiastowo dla dowolnych całkowitych x, y, z, t, co nie jest już prawdą dla x in list(range(y, z, t)). - enedil 2019-01-06 15:22
Rzeczywiście, pisałem z telefonu, a potem zapomniałem się upewnić. Edycja. - lion137 2019-01-06 15:25
He, he, fakt, to powinno byc jeszcze inaczej. - lion137 2019-01-06 15:35

Pozostało 580 znaków

2019-01-05 18:07
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ć. :)

edytowany 1x, ostatnio: mdolata, 2019-01-05 18:09
x != str(range(1,4)) jest wstawione tylko i wyłącznie przez treść zadania. Każe informować o tym która wartość jest błędna. Jeśli jest - szopen469 2019-01-05 18:23
a możesz mi napisać input przy którym zostanie wypisane błedna ilosc? - mdolata 2019-01-05 18:24
Przy podanym przykładzie na moim pycharmie właściwie wszystko. Dowolna cyfra, litera, znak. - szopen469 2019-01-05 18:33
chodzi mi o napis błędna ilosc, z tego co widzę w Twoim poście, dowolny znak wypisuje Błędne ID - mdolata 2019-01-05 18:43
A tak. W zamyśle powinna wyskoczyć gdy w ilosc wpiszemy cyfry różne niz wkazuje range() przynajmniej takie jest założenie. - szopen469 2019-01-05 18:47

Pozostało 580 znaków

2019-01-06 15:33
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.

Pozostało 580 znaków

2019-01-06 17:00
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.

Pozostało 580 znaków

2019-01-06 19:10
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'.

no właśnie zastawiam się jak to ugryźć, bo skończy sie pytaniem. "A jak będziesz miał 10tysięcy produktów to tez będziesz wypisywał?" - szopen469 2019-01-07 15:20

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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