2013-10-15 7 views
15

Sto provando a creare un programma con python che calcoli il costo per la spedizione.python if elif else statement

Tuttavia, non riesco a eseguire il programma nel punto in cui funziona correttamente.

Il mio totale è lo stesso importo di $ 6 per gli Stati Uniti e $ 8 per il Canada. Non riesco a farcela.

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" 
+0

È necessario formattare correttamente il codice ... provare a rientrare di 4 spazi. – Greg

+3

È intenzionale che la spedizione sia gratuita se l'acquisto è superiore a $ 150? – SethMMorton

risposta

14
  1. si dovrebbe ottenere integer da raw_input, non da stringa. usa int().
  2. valori di confronto come 50, 100, 150, ...dovrebbe anche essere intero

di seguito è codice fisso.

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" 
+0

Sembra lo stesso codice. Cosa hai cambiato? –

+0

total = int (raw_input ('Qual è l'importo totale per lo shopping online?')) E cambia più string in int – Curry

+0

Una descrizione effettiva del problema e la soluzione sarebbe molto meglio del solo posting del codice. –

10

Non è possibile confrontare numericamente le stringhe. Invece converti prima in un int e poi confronta.

Ad esempio:

if int(total) < 50 

variabili al fine di evitare la duplicazione aiuterebbe troppo.

+0

.. 'int (" 5 ")' sembra un modo prolisso per scrivere '5'. – DSM

+0

Ebbene si. Ma nel codice reale, il totale è una variabile, quindi è necessario int (totale). Ah, stai dicendo che il punto è che dovrebbe essere se int (totale) <50. Modificherò per chiarezza. –

+0

Penso che sarebbe più sensato convertire "total" in un 'int' (o, IMHO, un' float') una volta, piuttosto che ripetere la conversione per ciascun confronto. – DSM

1

Questo:

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

produce una stringa. Il confronto tra stringa e numeri non è molto ben definito. Devi prima convertire il totale in un numero. Esempio:

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

(questo ignora errore di ingresso movimentazione come quando l'input dell'utente non è un numero)

noti che i cambiamenti nel comportamento di Python 2.xe Python 3.x. In Python 2.x:

oggetti di diversi tipi, ad eccezione diversi tipi numerici e differenti tipi stringa, non confrontare uguali; tali oggetti sono ordinati in modo coerente ma arbitrario (in modo tale che l'ordinamento di una matrice eterogenea produce un risultato coerente).

...

CPython dettaglio di implementazione: gli oggetti di vario tipo, eccetto i numeri sono ordinate per i loro nomi tipo; oggetti dello stesso tipo che non supportano il confronto corretto sono ordinati dal loro indirizzo.

mentre in Python 3.x:

oggetti di diversi tipi, ad eccezione diversi tipi numerici, non risultano uguali.

4

Si sta confrontando numericamente stringhe. È impossibile, come confrontare apple con orange, quale è più grande? Il computer non lo capirà, deve confrontare la dimensione .

Per fare ciò, è necessario convertirlo in un numero intero. Utilizzare la funzione int(). Qui:

#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" 

Spero che questo aiuti!

4

Quando si confrontano le stringhe, lo fa in modo lessicografico, come in una rubrica telefonica. Per esempio:

"a" < "b": Vero
"bill" < "bob": Vero
"100" < "3": Vero

Se si desidera confrontare i numeri nell'ordine in cui li contiamo è necessario utilizzare il tipo int.

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

quindi modificare tutti i letterali stringa nel codice come "50" per letterali interi come 50.

0

È come aggiungere le mele & case per ottenere il totale che è impossibile. Deve essere lo stesso tipo, in questo caso di tipo intero, per ottenere il totale. Usa int() per convertire la stringa in un numero intero.

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

potrebbe anche essere (ma meno preferibile):

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

Quando si utilizza raw_input vostro input dell'utente è disponibile in forma di stringa e non è possibile calcolare i numeri nel formato delle stringhe. Quindi è necessario modificare l'input della stringa in un numero intero per effettuare i confronti. Si può fare in questo modo:

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

Io sono solo un programmazione più fresco qui e pitone. Stavo cercando di risolvere il tuo problema. Spero, questo ti possa aiutare.

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 ('Country name is case sensetive so do it perfectly') 
+0

Fai notare cosa hai cambiato. In caso di Python, ottieni il rientro corretto, o il programma è sbagliato solo per quello. Inoltre, in questo caso, hai modificato solo le righe 'print' come sembra, a seconda della versione di Python, ma non è una risposta al problema. – Risadinha