2013-10-15 19 views
15

मैं अजगर के साथ एक प्रोग्राम बनाने की कोशिश कर रहा हूं जो शिपिंग के लिए लागत की गणना करता है।पायथन अगर elif else statement

हालांकि, मैं प्रोग्राम को तब तक नहीं चला सकता जहां यह ठीक से काम करता है।

यूएस के लिए $ 6 और कनाडा के लिए $ 8 के बराबर मेरी कुल राशि क्या है। मुझे वह पास नहीं लग रहा है।

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

आपको अपने कोड को सही तरीके से प्रारूपित करने की आवश्यकता है ... इसे 4 रिक्त स्थान इंडेंट करने का प्रयास करें। – Greg

+3

क्या यह जानबूझकर है कि शिपिंग 150 डॉलर से अधिक होने पर शिपिंग निःशुल्क है? – SethMMorton

उत्तर

14
  1. आपको स्ट्रिंग नहीं, कच्चे_इनपुट से पूर्णांक प्राप्त करना चाहिए। int() का उपयोग करें।
  2. तुलना मूल्य 50, 100, 150, ...यह भी पूर्णांक होना चाहिए

नीचे कोड है।

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

यह एक ही कोड की तरह दिखता है। तुमने क्या बदल दिया –

+0

कुल = int (raw_input ('आपकी ऑनलाइन खरीदारी के लिए कुल राशि क्या है?)) और int – Curry

+0

पर कई स्ट्रिंग बदलें, समस्या और समाधान का वास्तविक विवरण कोड पोस्ट करने से कहीं बेहतर होगा। –

10

आप स्ट्रिंग्स संख्यात्मक रूप से तुलना नहीं कर सकते हैं। इसके बजाय पहले एक int में कनवर्ट करें और फिर तुलना करें।

उदाहरण के लिए:

if int(total) < 50 

चर दोहराव से बचने के लिए भी मदद मिलेगी।

+0

.. 'int (" 5 ")' '5' वर्तनी करने के लिए वर्बोज़ तरीके की तरह लगता है। – DSM

+0

ठीक है हाँ। लेकिन असली कोड में, कुल एक चर है इसलिए int (कुल) की आवश्यकता है। आह आप कह रहे हैं कि बिंदु यह होना चाहिए कि यह int (कुल) <50. होना चाहिए। मैं स्पष्टता के लिए संपादित करूंगा। –

+0

मुझे वास्तव में लगता है कि प्रत्येक तुलना के लिए रूपांतरण दोहराने के बजाय, 'कुल' को' int '(या, IMHO, '' float') में परिवर्तित करने के लिए और अधिक समझदारी होगी। – DSM

1

यह:

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

एक स्ट्रिंग पैदा करता है। स्ट्रिंग और संख्याओं के बीच तुलना बहुत अच्छी तरह परिभाषित नहीं है। आपको कुल को पहले नंबर पर कनवर्ट करने की आवश्यकता है। उदाहरण:

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

नोट (यह इनपुट त्रुटि जब उपयोगकर्ता की इनपुट एक नंबर नहीं है के रूप में इस तरह के रख-रखाव पर ध्यान नहीं देता) है कि अजगर 2.x और अजगर 3.x. में व्यवहार परिवर्तन Python 2.x:

विभिन्न प्रकार के ऑब्जेक्ट्स, अलग-अलग संख्यात्मक प्रकारों और विभिन्न स्ट्रिंग प्रकारों को छोड़कर, बराबर तुलना नहीं करते हैं; ऐसी वस्तुओं को लगातार लेकिन मनमाने ढंग से आदेश दिया जाता है (ताकि एक विषम सरणी को क्रमबद्ध करने से लगातार परिणाम मिल सके)।

...

CPython कार्यान्वयन विस्तार: संख्या को छोड़कर विभिन्न प्रकार की वस्तुएं उनके प्रकार नामों से आदेश दिया जाता है; उसी प्रकार की वस्तुएं जो उचित तुलना का समर्थन नहीं करती हैं उन्हें उनके पते द्वारा आदेश दिया जाता है।

जबकि Python 3.x में:

विभिन्न प्रकार की वस्तुएं, विभिन्न सांख्यिक प्रकार को छोड़कर, बराबर की तुलना कभी नहीं।

4

आप स्ट्रिंग संख्यात्मक रूप से तुलना कर रहे हैं। की तुलना orange के साथ तुलना करना असंभव है, जो कि बड़ा है? कंप्यूटर समझ में नहीं आता है, इसे आकार की तुलना करने की आवश्यकता है।

ऐसा करने के लिए, हमें इसे एक पूर्णांक में बदलने की आवश्यकता है। int() फ़ंक्शन का उपयोग करें। यहां:

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

आशा है कि इससे मदद मिलती है!

4

आप तार यह इतना कोषगत करता है, एक फोन बुक में की तरह की तुलना है।

"a" < "b": यह सच है
"bill" < "bob": यह सच है
"100" < "3": उदाहरण के लिए यह सच है

आप कि हम उन्हें गिनती में संख्याओं की तुलना करना चाहते हैं आप पूर्णांक प्रकार का उपयोग करने की जरूरत है।

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

फिर स्ट्रिंग शाब्दिक के सभी अपने कोड में "50" तरह पूर्णांक शाब्दिक को 50 तरह बदल जाते हैं।

0

यह कुल मिलाकर कुल मिलाकर प्राप्त करने के लिए सेब & घरों को जोड़ने जैसा है। कुल मिलाकर, यह एक ही प्रकार की आवश्यकता है, इस मामले में पूर्णांक प्रकार। स्ट्रिंग को एक पूर्णांक में बदलने के लिए int() का उपयोग करें।

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

भी हो सकता है (लेकिन कम वरीय):

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

जब raw_input का उपयोग कर अपने उपयोगकर्ता इनपुट स्ट्रिंग के रूप में आता है और आप तार के प्रारूप में संख्या की गणना नहीं कर सकते हैं। तो तुलना करने के लिए आपको अपने स्ट्रिंग इनपुट को एक पूर्णांक में बदलने की आवश्यकता है। आप इस तरह कर सकते हैं:

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

मैं सिर्फ एक यहाँ बिल्कुल नया और अजगर प्रोग्रामिंग कर रहा हूँ। मैं आपकी समस्या को हल करने की कोशिश कर रहा था। उम्मीद है, यह आपकी मदद कर सकता है।

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

बताएं कि आपने क्या बदल दिया है। पायथन के मामले में, इंडेंटेशन सही प्राप्त करें, या इस वजह से प्रोग्राम गलत होगा। इसके अलावा, इस मामले में, आपने केवल 'प्रिंट' लाइनों को बदल दिया है जैसा कि ऐसा लगता है जो पाइथन संस्करण के आधार पर मदद कर सकता है लेकिन समस्या का उत्तर नहीं है। – Risadinha

संबंधित मुद्दे