web-dev-qa-db-fra.com

déclaration python if Elif else

J'essaie de créer un programme avec Python qui calcule le coût de l'expédition. 

Cependant, je ne peux pas exécuter le programme là où il fonctionne correctement. 

Quel que soit mon total, le même montant revient à 6 $ pour les États-Unis et à 8 $ pour le Canada. Je n'arrive pas à passer ça.

total = raw_input('What is the total amount for your online shopping?')
country = raw_input('Shipping within the US or Canada?')

if country == "US":
    if total <= "50":
        print "Shipping Costs $6.00"
    Elif total <= "100":
            print "Shipping Costs $9.00"
    Elif total <= "150":
            print "Shipping Costs $12.00"
    else:
        print "FREE"

if country == "Canada":
    if total <= "50":
        print "Shipping Costs $8.00"
    Elif total <= "100":
        print "Shipping Costs $12.00"
    Elif total <= "150":
        print "Shipping Costs $15.00"
    else:
        print "FREE"
19
sakefon
  1. vous devriez obtenir un entier de raw_input, pas de chaîne. utilisez int().
  2. les valeurs de comparaison telles que 50, 100, 150, ... doivent également être integer.

ci-dessous est le code fixe.

total = int(raw_input('What is the total amount for your online shopping?'))
country = raw_input('Shipping within the US or Canada?')

if country == "US":
    if total <= 50:
        print "Shipping Costs $6.00"
    Elif total <= 100:
        print "Shipping Costs $9.00"   # improved indentation
    Elif total <= 150:
        print "Shipping Costs $12.00"  # improved indentation
    else:
        print "FREE"

if country == "Canada":
    if total <= 50:
        print "Shipping Costs $8.00"
    Elif total <= 100:
        print "Shipping Costs $12.00"
    Elif total <= 150:
        print "Shipping Costs $15.00"
    else:
        print "FREE"
20
Curry

Vous ne pouvez pas comparer les chaînes numériquement. Convertissez plutôt en int puis comparez.

Par exemple:

if int(total) < 50

Des variables pour éviter les doublons seraient également utiles.

10
Jeanne Boyarsky

Vous comparez chaînes numériquement. C'est impossible, comme comparer Apple avec orange, lequel est le plus gros? L'ordinateur ne comprendra pas cela, il doit comparer le size .

Pour ce faire, nous devons le convertir en entier. Utilisez la fonction int(). Ici:

#convert it to an integer straight away
total = int(raw_input('What is the total amount for your online shopping?')) 
country = raw_input('Shipping within the US or Canada?')

if country == "US":
    if total <= 50:
        print "Shipping Costs $6.00"
    Elif total <= 100:
            print "Shipping Costs $9.00"
    Elif total <= 150:
            print "Shipping Costs $12.00"
    else:
        print "FREE"

if country == "Canada":
    if total <= 50:
        print "Shipping Costs $8.00"
    Elif total <= 100:
        print "Shipping Costs $12.00"
    Elif total <= 150:
        print "Shipping Costs $15.00"
    else:
        print "FREE"

J'espère que cela t'aides!

4
aIKid

Lorsque vous comparez des chaînes, cela le fait de manière lexicographique, comme dans un annuaire téléphonique. Par exemple:

"a" < "b": True
"bill" < "bob": Vrai
"100" < "3": Vrai

Si vous souhaitez comparer les nombres dans l'ordre dans lequel nous les comptons, vous devez utiliser le type int.

total = int(raw_input('What is the total amount for your online shopping?'))

Puis changez tous les littéraux de chaîne dans votre code comme "50" en des littéraux entiers comme 50.

4
Trevor Merrifield

Ce:

total = raw_input('What is the total amount for your online shopping?')

produit une chaîne. La comparaison entre chaîne et nombre n'est pas très bien définie. Vous devez d'abord convertir total en nombre. Exemple:

total = int(raw_input('What is the total amount for your online shopping?'))

(cela ignore la gestion des erreurs d'entrée, par exemple lorsque l'entrée de l'utilisateur n'est pas un nombre)

Notez que le comportement change dans Python 2.x et Python 3.x. Dans Python 2.x :

Les objets de types différents, à l'exception de types numériques différents et de types de chaînes différents, ne se comparent jamais de manière égale; ces objets sont ordonnés de manière cohérente mais arbitraire (de sorte que le tri d'un tableau hétérogène donne un résultat cohérent).

...

Détail d'implémentation CPython: les objets de types différents, à l'exception des nombres, sont classés en fonction de leurs noms de types; Les objets du même type qui ne permettent pas une comparaison correcte sont classés par leur adresse.

en Python 3.x :

Les objets de types différents, à l'exception des types numériques différents, ne se comparent jamais de manière égale.

1
Lie Ryan

Lorsque vous utilisez raw_input, votre entrée utilisateur est fournie sous forme de chaîne et vous ne pouvez pas calculer de nombres au format de chaînes. Vous devez donc changer votre entrée de chaîne en un entier pour pouvoir faire les comparaisons . Vous pouvez faire comme ceci:

total = int(raw_input('What is the total amount for your online shopping?'))
country = raw_input('Shipping within the US or Canada?')

if country == "US":
    if total <= 50:
        print "Shipping Costs $6.00"
    Elif total <= 100:
        print "Shipping Costs $9.00"
    Elif total <= 150:
        print "Shipping Costs $12.00"
else:
    print "FREE"

Elif country == "Canada":
    if total <= 50:
        print "Shipping Costs $8.00"
    Elif total <= 100:
        print "Shipping Costs $12.00"
    Elif total <= 150:
        print "Shipping Costs $15.00"
    else:
        print "FREE"

else:
    print "Try Again"
1
CasperTN

C'est comme ajouter des pommes et des maisons pour obtenir le total, ce qui est impossible. Il doit être du même type, dans ce cas de type entier, pour obtenir le total. Utilisez int () pour convertir la chaîne en entier. 

 total = int(raw_input('What is the total amount for your online shopping?'))

pourrait aussi être (mais moins préférable): 

 total = raw_input('What is the total amount for your online shopping?')
 total = int(total)
0