2010-08-31 8 views
21

स्तर के गैर पूर्णांक द्वारा अनुक्रम गुणा नहीं कर सकते: आरंभकप्रकार 'नाव'

क्यों "प्रकार 'नाव' के गैर पूर्णांक द्वारा अनुक्रम गुणा नहीं कर सकते" मैं त्रुटि मिलता है?

def nestEgVariable(salary, save, growthRates): 
    SavingsRecord = [] 
    fund = 0 
    depositPerYear = salary * save * 0.01 
    for i in growthRates: 
     fund = fund * (1 + 0.01 * growthRates) + depositPerYear 
     SavingsRecord += [fund,] 
    return SavingsRecord 


print nestEgVariable(10000,10,[3,4,5,0,3]) 

धन्यवाद बाबा

+0

का उपयोग करके ',' को हटाएं, मैं आपके 'बचत रिकॉर्डर' के बजाय 'SavingsRecord.append (Fund)' पसंद करूंगा + = [फंड,] ', यह * तेज हो सकता है। –

+0

संभावित डुप्लिकेट [मुझे TypeError क्यों मिलता है: 'फ्लोट' प्रकार के गैर-int द्वारा अनुक्रम को गुणा नहीं कर सकता है?] (https://stackoverflow.com/questions/485789/why-do-i-get-typeerror-cant-multiply-sequence-by-non-int-of-type-float) –

+1

@StephanWeinhold, वह पोस्ट दिनांकित है 2012. यह सवाल 2010 में पोस्ट किया गया था। – raoulbia

उत्तर

14
for i in growthRates: 
    fund = fund * (1 + 0.01 * growthRates) + depositPerYear 

होना चाहिए:

for i in growthRates: 
    fund = fund * (1 + 0.01 * i) + depositPerYear 

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

उदाहरण:

>>> 2 * [1,2] 
[1, 2, 1, 2] 
3

आप अपने "1 + 0.01" कई बार growthRate सूची multipling कर रहे हैं, सूची आप के माध्यम से पुनरावृत्ति कर रहे हैं में आइटम नहीं। मैंने i को rate का नाम बदल दिया है और इसके बजाय इसका उपयोग किया है। क्योंकि growthRates एक दृश्य (! आप भी यह पुनरावृत्ति कर रहे हैं) है

def nestEgVariable(salary, save, growthRates): 
    SavingsRecord = [] 
    fund = 0 
    depositPerYear = salary * save * 0.01 
    # V-- rate is a clearer name than i here, since you're iterating through the rates contained in the growthRates list 
    for rate in growthRates: 
     #       V-- Use the `rate` item in the growthRate list you're iterating through rather than multiplying by the `growthRate` list itself. 
     fund = fund * (1 + 0.01 * rate) + depositPerYear 
     SavingsRecord += [fund,] 
    return SavingsRecord 


print nestEgVariable(10000,10,[3,4,5,0,3]) 
+3

SO वास्तव में अद्भुत है ... केवल 11 विचारों के साथ, एक मिनट के भीतर 5 सही उत्तर हैं। – sdolan

0

और आपके द्वारा (1 + 0.01) गुणा है, जो स्पष्ट रूप से है एक नाव (1.01): नीचे अद्यतन कोड देखें। मुझे लगता है कि आप for growthRate in growthRates: ... * growthrate मतलब है?

1

इस पंक्ति में:

fund = fund * (1 + 0.01 * growthRates) + depositPerYear 

मुझे लगता है कि आप इस मतलब है:

fund = fund * (1 + 0.01 * i) + depositPerYear 

जब आप growthRates द्वारा एक नाव (जो सूची दी गई है) गुणा करने के लिए प्रयास करते हैं, आपको लगता है कि त्रुटि मिलती है।

7

पायथन आपको अपने मूल्यों को दोहराने के लिए अनुक्रमों को गुणा करने की अनुमति देता है। यहाँ एक दृश्य उदाहरण है:

>>> [1] * 5 
[1, 1, 1, 1, 1] 

लेकिन यह आप चल बिन्दु संख्या के साथ यह करने के लिए अनुमति नहीं देता:

>>> [1] * 5.1 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: can't multiply sequence by non-int of type 'float' 
2

इस पंक्ति में:

fund = fund * (1 + 0.01 * growthRates) + depositPerYear

growthRates एक है अनुक्रम ([3,4,5,0,3])। आप उस अनुक्रम को एक फ्लोट (0.1) से गुणा नहीं कर सकते हैं। ऐसा लगता है कि आप i क्या रखना चाहते थे।

संयोग से, i उस चर के लिए एक महान नाम नहीं है। growthRate या rate जैसे कुछ और वर्णनात्मक पर विचार करें।

+0

@ सभी: आपके त्वरित प्रतिक्रियाओं के लिए धन्यवाद। @ नाथन: मुझे खुशी है कि आपने चर नाम के बारे में टिप्पणी की है। प्रोग्रामिंग सीखते समय शुरुआत से सिंटैक्स अनुशासन प्राप्त करना महत्वपूर्ण है। – raoulbia

0

मैं एक ही मुद्दे से मुलाकात की और इसे हल किया। अत्यधिक संभव है कि मान में '1,234.56' जैसे कुछ शामिल हैं, यदि हां, तो str.replace (',', '')