Próbuję sprawdzić za pomocą, jeśli jeśli konkretny ciąg pasuje do kilku słów w tym samym czasie. Umieścić w kodzie, byłoby taki:

if shippingDest == "Spain":
    shippingRegion = "Spain"
if shippingDest == "Portugal":
    shippingRegion = "Portugal"
if shippingDest == ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]:
    shippingRegion = "Euro1"
if shippingDest == ["Albania", "Andorra", "Austria", "Belarus", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "Georgia", "Gibraltar", "Greece", "Hongary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Romania", "Russia", "San Marino", "Serbia", "Slovenia", "Svalbard and Jan Mayen", "Sweden", "Switzerland", "Ukraine", "Vatican City State"]:
    shippingRegion = "Euro2"
else:
    shippingRegion = "World"

Podczas sprawdzania tego na przykład w Niemczech jako kraju, Shippingregion byłby euro1. Jednak zajmuje to światem.

Czy ktoś może wskazywać mnie we właściwym kierunku, aby sprawdzić, czy słowo pasuje do dowolnego zestawu słów, jeśli?

Dzięki,

0
Brick Top 24 listopad 2013, 17:52

7 odpowiedzi

Najlepsza odpowiedź

Użyj Operator in:

if shippingDest == "Spain":
    shippingRegion = "Spain"
elif shippingDest == "Portugal":
    shippingRegion = "Portugal"
elif shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]:
    shippingRegion = "Euro1"
elif shippingDest in ["Albania", "Andorra", "Austria", "Belarus", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "Georgia", "Gibraltar", "Greece", "Hongary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Romania", "Russia", "San Marino", "Serbia", "Slovenia", "Svalbard and Jan Mayen", "Sweden", "Switzerland", "Ukraine", "Vatican City State"]:
    shippingRegion = "Euro2"
else:
    shippingRegion = "World"

Po zastosowaniu do listy operator in sprawdza, czy wartość jest zawarta na liście.

Może być lepiej używać Zestaw, ponieważ twoje wartości nie są zamówiony. Ustawiona składnia jest następująca:

{'something', 'something else', 'another thing', '...'}

Jest podobny do listy, z wyjątkiem tej struktury danych nie jest zamówiony. Podobnie jak lista, możesz również użyć in, aby sprawdzić, czy określona wartość jest zawarta w zestawie.

Uwaga: Wygląda na to, że chcesz w tym Hiszpania i Portugalia.

1
Qantas 94 Heavy 24 listopad 2013, 14:13

Wymień == za pomocą in:

if shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]:

Twój kod byłby również bardziej wydajny, jeśli wymieniłeś oświadczenia if po pierwszym z elif s, co oznacza else if.

Możesz także skrócić to:

if shippingDest in ("France", "Germany", "Luxembourg", "Belgium", "United Kingdom"):
    shippingRegion = "Euro1"
elif shippingDest in ("Albania", "Andorra", "Austria", "Belarus", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "Georgia", "Gibraltar", "Greece", "Hongary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Romania", "Russia", "San Marino", "Serbia", "Slovenia", "Svalbard and Jan Mayen", "Sweden", "Switzerland", "Ukraine", "Vatican City State"):
    shippingRegion = "Euro2"
elif shippingDest in ("Portugal", "Spain"):
    shippingRegion = shippingDest:
else:
    shippingRegion = "World"

Odwróciłem się również do tych list do Ktoczek (wymienione {X0}} za pomocą ()), ponieważ nie musisz ich zmieniać później, więc dzięki czemu niezmienne oznacza mniej pamięci.

4
rlms 24 listopad 2013, 14:00

Chcesz użyć słowa kluczowego elif - który jest analogiczny do innych języków else if.

Dodatkowo chcesz przetestować, czy ciąg ("Niemcy") znajduje się na liście, użyj słowa kluczowego in zamiast ==.

2
Vikram Saran 24 listopad 2013, 13:55

Spróbuj in:

if shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]:
    shippingRegion = "Euro1"
2
Faruk Sahin 24 listopad 2013, 13:55

Musisz użyć Elif's i {x0}}, aby sprawdzić członkostwo zamiast ==

if shippingDest == "Spain":
    shippingRegion = "Spain"
elif shippingDest == "Portugal":
    shippingRegion = "Portugal"
elif shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]:
    shippingRegion = "Euro1"
elif shippingDest in ["Albania", "Andorra", "Austria", "Belarus", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "Georgia", "Gibraltar", "Greece", "Hongary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Romania", "Russia", "San Marino", "Serbia", "Slovenia", "Svalbard and Jan Mayen", "Sweden", "Switzerland", "Ukraine", "Vatican City State"]:
    shippingRegion = "Euro2"
else:
    shippingRegion = "World"

To, co się dzieje, jest to, że wysyłka jest ustawiona prawidłowo, a następnie niepowodzenie ostatniego, więc, więc klauzula inaczej jest wykonywana, co skutkuje World.

Zrobić więcej sensu i będzie bardziej utrzymujący, gdybyś miał tabelę wyszukiwania, używając dict:

shipping_destinations = {
    'Portugal': 'Portugal',
    'France': 'Euro1',
    'Monaco': 'Euro2',
    'spain': 'Spain'
}

Następnie, gdy zostaną wymienione, możesz zrobić:

ship_to = shipping_destinations.get(country_name, 'World')

Odzyskać miejsce docelowe lub domyślnie do świata. Zapisuje to, jeśli stwierdzenia i jeśli miałeś arkusz kalkulacyjny stref, byłoby łatwe do wypełnienia z tego ...

2
Jon Clements 24 listopad 2013, 14:00
if shippingDest == ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]:
    shippingRegion = "Euro1"

Nie widzi to, czy shippingDest jest jednym z tych ciągów, Zamiast tego zamiast sprawdza, czy shippingDest jest równa tej liście .

Zamiast tego możesz użyć:

if shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]:
    shippingRegion = "Euro1"

Ponieważ poprzedzające warunki oceniane na fałszywe, wykonane else. Dodatkowo, do wzajemnie wyłącznych warunków, chcesz użyć elif zamiast instrukcji if, a następnie jeden inny. W swoim kodzie, że else odpowiada tylko poprzednim {x4}}.

2
Steve P. 24 listopad 2013, 14:04

Możesz użyć

if shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]:
1
Yaron 24 listopad 2013, 13:55