আমি টাইপ-এরিয়ারটি কেন পাই: 'ফ্লোট' টাইপ না করে ক্রমটি গুণতে পারি না?


99

আমি একটি বিক্রয় পরিমাণ (ইনপুট দ্বারা) একটি সংজ্ঞায়িত বিক্রয় কর (০.০৮) দ্বারা গুণিত করার জন্য টাইপ করছি এবং তারপরে এটি মোট পরিমাণ (বিক্রয় করের বার বিক্রয় পরিমাণ) মুদ্রণ করতে।

আমি এই ত্রুটি চালাচ্ছি। যে কেউ ভুল হতে পারে বা কোন পরামর্শ থাকতে পারে জানেন?

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'

উত্তর:


86

raw_inputএকটি স্ট্রিং (অক্ষরের ক্রম) প্রদান করে। পাইথনে, একটি স্ট্রিং এবং ফ্লোটকে গুণ করলে কোনও সংজ্ঞায়িত অর্থ হয় না (একটি স্ট্রিং এবং পূর্ণসংখ্যার গুণনের সময় একটি অর্থ রয়েছে: "AB" * 3এটি "ABABAB"কতটা "L" * 3.14? অনুগ্রহ করে উত্তর দিন না "LLL|")) আপনার স্ট্রিংটিকে একটি সংখ্যাসম্যতে পার্স করতে হবে।

আপনি চেষ্টা করতে পারেন:

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

আমি এখানে পোস্ট করার আগে এবং গুগল ব্যবহার করার আগে সিনট্যাক্স ত্রুটি পড়তে শিখেছি। আমি বিক্রয় হিসাবে কাঁচা_ ইনপুট রূপান্তর করার চেষ্টা করছিলাম একটি ভাসা চেয়ে বরং একটি int তে। আপনি কি জানেন যে ইনট কেন কাজ করবে না, বরং ভাসবে? আমার সাথে সহ্য করুন, লোল।
এসডি

4
একটি পূর্ণসংখ্যা দ্বারা একটি স্ট্রিংকে গুণন করা (* অপারেটর) পাইথনে ভালভাবে সংজ্ঞায়িত। একটি ফ্লোট দ্বারা স্ট্রিংয়ের গুণকে সংজ্ঞায়িত করা হয় না এবং পাইথন যা অভিযোগ করছিল।
গ্রেগ হিউগিল

ধন্যবাদ গ্রেগ! আমার ধারণা আমার আরও কিছু বেসিক নিয়মগুলি নামানো দরকার।
এসডি

4
@ রাজ: আমি বলেছিলাম এটি যথাযথভাবে সংজ্ঞায়িত হয়েছে তবে এটি আপনি যা আশা করেন তা অগত্যা নয়। "abc" * 3 হ'ল "অ্যাবকাব্যাক্যাবসি", এবং তাই "5" * 3 হ'ল "555"।
গ্রেগ হিউগিল

54

সম্ভবত এটি ভবিষ্যতে অন্যকে সহায়তা করবে - একাধিক ফ্লোট এবং ফ্লোটের তালিকার একাধিক চেষ্টা করার সময় আমারও একই ত্রুটি হয়েছিল। জিনিসটি হ'ল এখানে প্রত্যেকে একটি স্ট্রিং দিয়ে একটি ফ্লোটকে গুণ করার বিষয়ে কথা বলেছিল (তবে এখানে আমার সমস্ত উপাদানগুলি ভাসমান ছিল) সুতরাং সমস্যাটি আসলে তালিকার * অপারেটরটি ব্যবহার করে।

উদাহরণ স্বরূপ:

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

আমি এই পদ্ধতির পছন্দ!
লিও লোপল্ড হার্টজ 준영

4
যদি আপনার দ্বারা আমদানি numpy চাই না, আপনি কি করতে পারেন:coff = [i * c for i in coff]
nicolas.fg

3

সমস্যাটি হচ্ছে বিক্রয়সমাউন্টটি একটি স্ট্রিংয়ে সেট করা হচ্ছে। আপনি যদি পাইথন ইন্টারপ্রেটারে ভেরিয়েবলটি প্রবেশ করেন এবং এন্টার টিপুন, আপনি উদ্ধৃতি দ্বারা বদ্ধমূল প্রবেশদ্বারটি দেখতে পাবেন। উদাহরণস্বরূপ, আপনি যদি 56.95 প্রবেশ করিয়ে থাকেন তবে আপনি দেখতে পাবেন:

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

স্ট্রিংটি বিক্রয় করের মাধ্যমে গুণ করার আগে আপনি স্ট্রিংটিকে একটি ফ্লোটে রূপান্তর করতে চান। আমি আপনাকে খুঁজে বের করার জন্য এটি ছেড়ে দেব। শুভকামনা!


4
অনেক অনেক ধন্যবাদ। আমি সাহায্যের প্রশংসা করি! সংজ্ঞায়িত করার সময় আমি একটি ভাসমান মান সংরক্ষণ করতে সক্ষম হব না। আমি ফ্লাইতে এটি করার চেষ্টা করছিলাম (তবে আমি একটি স্ট্রিং থেকে মানকে একটি ইনট-তে পরিবর্তন করার চেষ্টা করছিলাম - সুতরাং আমার ভাসা ভ্যালুর প্রয়োজন হওয়ায় আমি ভুলতে ছিলাম)।
এসডি

1

আপনি নীচের মতো চেষ্টা করে স্ট্রিং এবং ফ্লোট.ইনস্টেডকে গুণ করতে পারবেন না it এটি দুর্দান্ত কাজ করে

totalAmount = salesAmount * float(salesTax)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.