मुझे टाइपराइट क्यों मिलता है: 'फ्लोट' प्रकार के गैर-इंट द्वारा अनुक्रम को गुणा नहीं कर सकता?


96

मैं एक बिक्री राशि (इनपुट द्वारा) को एक परिभाषित बिक्री कर (0.08) से गुणा करने के लिए टाइप कर रहा हूं और फिर उसने कुल राशि (बिक्री कर समय बिक्री राशि) प्रिंट की है।

मैं इस त्रुटि में चलाता हूं। किसी को पता है कि क्या गलत हो सकता है या कोई सुझाव हो सकता है?

salesAmount = raw_input (["Insert sale amount here \n"])
['Insert sale amount here \n']20.99
>>> salesTax = 0.08
>>> totalAmount = salesAmount * salesTax

Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    totalAmount = salesAmount * salesTax
TypeError: can't multiply sequence by non-int of type 'float'

जवाबों:


84

raw_inputएक स्ट्रिंग (वर्णों का एक क्रम) देता है। अजगर में, एक स्ट्रिंग गुणा और एक नाव कोई परिभाषित करता है अर्थ (एक स्ट्रिंग गुणा जबकि और एक पूर्णांक एक अर्थ नहीं है: "AB" * 3है "ABABAB", कितना है "L" * 3.14? कृपया जवाब नहीं है "LLL|")। आपको स्ट्रिंग को संख्यात्मक मान के लिए पार्स करने की आवश्यकता है।

आप कोशिश करना चाहते हो सकता है:

salesAmount = float(raw_input("Insert sale amount here\n"))

मैंने यहां पोस्ट करने और Google का उपयोग करने से पहले सिंटैक्स त्रुटि को पढ़ना सीख लिया। मैं एक फ्लोट के बजाय एक बिक्री के लिए रॉ_इनपुट को बदलने की कोशिश कर रहा था। क्या आप जानते हैं कि int काम क्यों नहीं करेगा, बल्कि फ्लोट करेगा? मेरे साथ नंगे, लोल।
— एस.डी.

2
एक पूर्णांक द्वारा एक स्ट्रिंग (* ऑपरेटर का उपयोग करके) गुणा करना पायथन में अच्छी तरह से परिभाषित है। फ्लोट द्वारा एक स्ट्रिंग को गुणा करना परिभाषित नहीं है, और वह है जो पायथन के बारे में शिकायत कर रहा था।
— ग्रेग हेविगिल

धन्यवाद ग्रेग! मुझे लगता है कि मुझे कुछ और बुनियादी नियमों को छोड़ना होगा।
— एस.डी.

1
@ राज: मैंने कहा कि यह अच्छी तरह से परिभाषित है, लेकिन यह जरूरी नहीं है कि आप क्या उम्मीद करते हैं। "abc" * 3 "abcabcabc" है, और इसलिए "5" * 3 "555" है।
— ग्रेग हेवगिल

51

हो सकता है कि यह भविष्य में दूसरों की मदद करेगा - मुझे एक ही त्रुटि एक फ़्लोट और एक फ़्लोट की सूची में प्रयास करते समय हुई थी। बात यह है कि यहां हर किसी ने एक फ्लोट को स्ट्रिंग के साथ गुणा करने के बारे में बात की थी (लेकिन यहां मेरे सभी तत्व सभी के साथ तैरते थे) इसलिए समस्या वास्तव में एक सूची पर * ऑपरेटर का उपयोग कर रही थी।

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

import math
import numpy as np
alpha = 0.2 
beta=1-alpha
C = (-math.log(1-beta))/alpha

coff = [0.0,0.01,0.0,0.35,0.98,0.001,0.0]
coff *= C

त्रुटि:

    coff *= C 
TypeError: can't multiply sequence by non-int of type 'float'

समाधान - सूची को अफीम सरणी में बदलें:

coff = np.asarray(coff) * C

मुझे यह तरीका पसंद है!
— लेओ लेपोल्ड हर्ट्ज़ '

1
यदि आप आयात numpy नहीं करना चाहते, तो आप कर सकते हैं:coff = [i * c for i in coff]
— nicolas.fg

3

समस्या यह है कि SalesAmount को एक स्ट्रिंग पर सेट किया जा रहा है। यदि आप अजगर दुभाषिया और हिट दर्ज में चर दर्ज करते हैं, तो आपको उद्धरणों से घिरा हुआ मूल्य दिखाई देगा। उदाहरण के लिए, यदि आपने 56.95 दर्ज किया है तो आप देखेंगे:

>>> sales_amount = raw_input("[Insert sale amount]: ")
[Insert sale amount]: 56.95
>>> sales_amount
'56.95'

आप इसे बिक्री कर से गुणा करने से पहले स्ट्रिंग को फ्लोट में बदलना चाहते हैं। मैं आपको यह पता लगाने के लिए छोड़ दूँगा। सौभाग्य!


1
बहुत धन्यवाद भाई। मैं मदद की सराहना करता हूं! मुझे पता नहीं था कि परिभाषित करते समय एक फ्लोट मूल्य को स्टोर करने में सक्षम होने के बारे में। मैं इसे मक्खी पर करने की कोशिश कर रहा था (लेकिन मैं एक स्ट्रिंग से मान को बदलने की कोशिश कर रहा था - इसलिए मैं गलत में था क्योंकि मुझे एक फ्लोट मूल्य की आवश्यकता थी)।
— एस.डी.

1

आप स्ट्रिंग और फ्लोट नहीं कर सकते। नीचे दिए अनुसार आप कोशिश करें। यह ठीक काम करता है

totalAmount = salesAmount * float(salesTax)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.