2013-02-15 18 views
13

मैं अभी पाइथन पर सेवानिवृत्ति कैलक्यूलेटर बनाने की कोशिश कर रहा हूं। वहाँ वाक्य रचना के साथ कुछ भी गलत नहीं है, लेकिन जब मैं निम्नलिखित प्रोग्राम चलाने:"अस्थिर प्रकार: int() <str()"

def main(): 
    print("Let me Retire Financial Calculator") 
    deposit = input("Please input annual deposit in dollars: $") 
    rate = input ("Please input annual rate in percentage: %") 
    time = input("How many years until retirement?") 
    x = 0 
    value = 0 
    while (x < time): 
     x = x + 1 
     value = (value * rate) + deposit 
     print("The value of your account after" +str(time) + "years will be $" + str(value)) 

यह मेरे कि बताता है:

Traceback (most recent call last): 
    File "/Users/myname/Documents/Let Me Retire.py", line 8, in <module> 
    while (x < time): 
TypeError: unorderable types: int() < str() 

कोई भी विचार मैं यह कैसे हल कर सकते थे?

उत्तर

31

समस्या यह है कि input() पायथन 3.x में एक स्ट्रिंग देता है, इसलिए जब आप अपनी तुलना करते हैं, तो आप एक स्ट्रिंग और एक पूर्णांक की तुलना कर रहे हैं, जो अच्छी तरह परिभाषित नहीं है (क्या होगा यदि स्ट्रिंग एक शब्द है, एक स्ट्रिंग और संख्या की तुलना कैसे करता है?) - इस मामले में पायथन अनुमान नहीं लगाता है, यह एक त्रुटि फेंकता है।

इसे ठीक करने के लिए, बस int() फोन एक पूर्णांक के लिए अपने स्ट्रिंग परिवर्तित करने के लिए:

int(input(...)) 

एक नोट के रूप में, आप दशमलव संख्या के साथ सौदा करना चाहते हैं, आप float() या decimal.Decimal() में से एक (उपयोग करना चाहते हैं जाएगा आपकी सटीकता और गति आवश्यकताओं के आधार पर)।

ध्यान दें कि संख्याओं की श्रृंखला (जैसे while लूप और गिनती के विपरीत) range() का उपयोग करने के लिए अधिक पाइथोनिक तरीका है। उदाहरण के लिए:

def main(): 
    print("Let me Retire Financial Calculator") 
    deposit = float(input("Please input annual deposit in dollars: $")) 
    rate = int(input ("Please input annual rate in percentage: %"))/100 
    time = int(input("How many years until retirement?")) 
    value = 0 
    for x in range(1, time+1): 
     value = (value * rate) + deposit 
     print("The value of your account after" + str(x) + "years will be $" + str(value)) 
+1

ठीक है, मैंने इसे सब कुछ समझ लिया। आपके समय और प्रयास के लिए बहुत बहुत धन्यवाद। मेरे द्वारा सच में इसकी प्रशंसा की जाती है। बहुत बहुत धन्यवाद श्रीमान धन्यवाद। यह हल करने के लिए एक आखिरी मुद्दा है कि वार्षिक दर समय के साथ घट जाती है। उदाहरण के लिए यदि मैं 50% दर पर 10 वर्षों में 500 डॉलर इनपुट करता हूं तो यह मुझे एक वर्ष, 555.0, 555.55, 555.5555 इत्यादि के बाद 550 डॉलर देता है ... जैसा कि वास्तव में 50 प्रतिशत सालाना नहीं करता है। – user2074050

+1

@ user2074050 यह सिर्फ एक गणित त्रुटि है। आप जमा में जोड़ रहे हैं, वर्तमान मूल्य नहीं। आप 'value * = (1 + दर)' चाहते हैं (पिछले वर्ष के मूल्य को दर से एक से गुणा करें)। –

0

आपको एक पाश हालत के भीतर यह तुलना करने के लिए में एक पूर्णांक में अपने स्ट्रिंग परिवर्तित करने के लिए की जरूरत है। Int (time) के साथ अन्य प्रतिस्थापन समय में। लूप स्थिति के अंदर लूप से पहले इसे प्रतिस्थापित करना बेहतर होता है क्योंकि लूप को हर बार स्ट्रिंग को एक पूर्णांक में परिवर्तित करने का कारण बनता है।

0

सिर्फ एक तरफ नोट, पायथन 2.0 में आप किसी भी चीज (स्ट्रिंग से int) की तुलना कर सकते हैं। चूंकि यह स्पष्ट नहीं था, यह 3.0 में बदला गया था, जो एक अच्छी बात है क्योंकि आप एक-दूसरे के साथ मूर्खतापूर्ण मूल्यों की तुलना करने में परेशानी नहीं कर रहे हैं या जब आप किसी प्रकार को रूपांतरित करना भूल जाते हैं।

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