পাইথন বিভাগ


133

আমি -100 থেকে 0 থেকে 10-100 এর পরিসীমা পর্যন্ত একটি সংখ্যার সেটকে স্বাভাবিক করার চেষ্টা করছিলাম এবং কেবলমাত্র খেয়াল করতে সমস্যা হচ্ছিল যে এমনকি কোনও ভেরিয়েবল না থাকলেও এটি যেভাবে আমার প্রত্যাশা করবে তা মূল্যায়ন করে না:

>>> (20-10) / (100-10)
0

ভাসা বিভাগটিও কাজ করে না:

>>> float((20-10) / (100-10))
0.0

বিভাগের উভয় পক্ষকে যদি একটি ফ্লোটে ফেলে দেওয়া হয় তবে এটি কাজ করবে:

>>> (20-10) / float((100-10))
0.1111111111111111

প্রথম উদাহরণের প্রতিটি পক্ষ একটি অন্তর্নিহিত হিসাবে মূল্যায়ন করছে যার অর্থ চূড়ান্ত উত্তরটি কোন ইনটকে দেওয়া হবে। যেহেতু ০.১১১১ .5 এর চেয়ে কম, এটি 0 এর চারদিকে রয়েছে my এটি আমার মতে স্বচ্ছ নয়, তবে আমার ধারণা এটি এটিই।

এর ব্যাখ্যা কী?



3
আদম, আপনার ব্যাখ্যাটি আমি এখনও পছন্দ করি না। প্রথম উদাহরণটি পূর্ণসংখ্যা বিভাগ, যা কেবলমাত্র 0 প্রদান করে The দ্বিতীয় উদাহরণটি আপনি চান এমন প্রভাবের জন্য ভুলভাবে প্রথম বন্ধনী দেওয়া হয় is
রাষ্ট্রপতি জেমস কে পোলক

@ গ্রেগস প্রথম উদাহরণটি ছিল সমস্যা। দ্বিতীয় উদাহরণটি ব্যাখ্যামূলক এবং প্রথম প্রশ্নের পরে লেখা হয়েছিল। নীচের সমস্ত উত্তরগুলি সমস্যাটি খুব ভালভাবে ব্যাখ্যা করেছে, বিশেষত @ কেনিটিএম এর। এটা খেয়াল করা জরুরী গুরুত্বপূর্ণ যে আমার মূল সমস্যা পাইথন 2.x শুধুমাত্র একটি বিষয় না 3. একটু disconcerting যে আচরণ যে মত পরিবর্তন কিন্তু এখন আমি জানি, আমি থেকে ব্যবহার করব হবে ভবিষ্যতে আমদানি বিভাগ এবং 3 ব্যবহার .x আচরণ। চিয়ার্স।
অ্যাডাম নেলসন

1
অ্যাডাম, দয়া করে আপনার শেষ সম্পাদনা সংশোধন করুন। ডান দিকের বিশেষ কিছু নেই; বিভাগটি ভাসমান হওয়ার জন্য, হয় অঙ্ক বা ডিনোমিনেটর (বা উভয়) ভাসমান হওয়া দরকার। আপনি যদি মনে করেন যে আপনি ডক্সে পড়েছেন যে ডান হাতটি ভাসমান হওয়া দরকার, তবে হয় ডকুমেন্টেশনটি খারাপভাবে বর্ণিত হয় এবং এটি সংশোধন করা উচিত, অথবা আপনি এটি ভুল বুঝেছিলেন। আপনি কি একটি উদাহরণ দেখেছেন, সম্ভবত, এবং তারপরে কোনও নিয়ম বহির্মুখী করে?
tzot

উত্তর:


246

আপনি পাইথন ২.x ব্যবহার করছেন, যেখানে পূর্ণসংখ্যা বিভাগগুলি একটি ভাসমান পয়েন্ট সংখ্যা হওয়ার পরিবর্তে কেটে যাবে।

>>> 1 / 2
0

তাদের মধ্যে একটি তৈরি করা উচিত float:

>>> float(10 - 20) / (100 - 10)
-0.1111111111111111

বা from __future__ import division, যা /পাইথন 3.x এর আচরণ অবলম্বন করতে বাধ্য করে যা সর্বদা ভাসমান ফেরত দেয়।

>>> from __future__ import division
>>> (10 - 20) / (100 - 10)
-0.1111111111111111

10
আপনি যদি ব্যবহার করেন তবে from __future__ import divisionদুটি স্ল্যাশ ব্যবহার করে আপনি পুরানো সি-স্টাইল বিভাজন আচরণ পেতে পারেন (উদাহরণস্বরূপ 1 // 20 হবে)। পেপ 238 বিভাগ অপারেটর পরিবর্তন করে
ব্যবহারকারী

1
@ ব্যবহারকারীর কাছ থেকে আমদানি করার দরকার নেই __future__। পাইথন 2 এবং 3 উভয়ই ডিফল্টরূপে //বোঝায় __floordiv__()
ক্যাসিমির

21

আপনি পূর্ণসংখ্যা স্থাপন করছেন যাতে পাইথন আপনাকে একটি পূর্ণসংখ্যার ফিরিয়ে দিচ্ছে :

>>> 10 / 90
0

যদি আপনি এটির পরে কোনও ফ্লোটে ফেলে দেন তবে রাউন্ডিংটি ইতিমধ্যে হয়ে গেছে, অন্য কথায়, 0 পূর্ণসংখ্যা সর্বদা 0 ফ্লোট হয়ে যাবে।

আপনি যদি বিভাগের দু'দিকে ফ্লোট ব্যবহার করেন তবে পাইথন আপনাকে প্রত্যাশিত উত্তর দেবে।

>>> 10 / 90.0
0.1111111111111111

সুতরাং আপনার ক্ষেত্রে:

>>> float(20-10) / (100-10)
0.1111111111111111
>>> (20-10) / float(100-10)
0.1111111111111111

11

বিভাগটি করার আগে আপনার এটি একটি ফ্লোটে পরিবর্তন করা দরকার। এটাই:

float(20 - 10) / (100 - 10)

4
@ অ্যাডাম নেলসন: আমার পক্ষে সঠিকভাবে কাজ করে। আপনার বন্ধনী পরীক্ষা করুন।
ফ্রেড লারসন

আসলে, আমি ভুল - তবে ডক্সটি দেখার পরে প্রথমে ডান দিকটি castালাই করা উচিত।
অ্যাডাম নেলসন

10
@ অ্যাডাম: প্রথমে কোন দিক থেকে কিছু যায় আসে না।
কেনেটিএম

11

পাইথন ২.7-এ, /ইনপুটগুলি পূর্ণসংখ্যা হলে অপারেটরটি একটি পূর্ণসংখ্যা বিভাগ:

>>>20/15
1

>>>20.0/15.0
1.33333333333

>>>20.0/15
1.33333333333

পাইথন ৩.৩-এ, /ইনপুটগুলি পূর্ণসংখ্যা হলেও অপারেটরটি একটি ফ্লোট বিভাগ।

>>> 20/15
1.33333333333

>>>20.0/15
1.33333333333

পাইথন 3 এ পূর্ণসংখ্যা বিভাগের জন্য, আমরা //অপারেটরটি ব্যবহার করব ।

//অপারেটর উভয় পাইথন 2.7 এবং পাইথন 3.3 মধ্যে একটি পূর্ণসংখ্যা বিভাজন অপারেটর।

পাইথন ২.7 এবং পাইথন ৩.৩ এ:

>>>20//15
1

এখন, তুলনা দেখুন

>>>a = 7.0/4.0
>>>b = 7/4
>>>print a == b

উপরের প্রোগ্রামটির জন্য আউটপুট পাইথন ২. 2. এ মিথ্যা এবং পাইথন ৩.৩ এ সত্য হবে।

পাইথনে ২.7 এ = ১.৫75 এবং খ = ১।

পাইথন ৩.৩ এ = ১.75৫ এবং বি = ১.75৫ এ, কারণ /এটি একটি ফ্লোট বিভাগ।


8

এটি অজগরটির যে সংস্করণ আপনি ব্যবহার করেন এটির সাথে এটি করতে হবে। মূলত এটি সি আচরণটি গ্রহণ করে: আপনি যদি দুটি পূর্ণসংখ্যা ভাগ করে থাকেন তবে ফলাফলগুলি একটি পূর্ণসংখ্যার সাথে গোল করা হবে। এছাড়াও মনে রাখবেন পাইথন বাম থেকে ডানে অপারেশন করে যা আপনি টাইপকাস্ট করার সময় একটি ভূমিকা পালন করে।

উদাহরণ: যেহেতু এটি একটি প্রশ্ন যা সর্বদা আমার মাথার উপরে উঠে আসে যখন আমি পাটিগণিত ক্রিয়াকলাপগুলি করি (আমাকে কি ভাসমান এবং কোন সংখ্যায় রূপান্তর করা উচিত), সেই দিক থেকে একটি উদাহরণ উপস্থাপন করা হয়েছে:

>>> a = 1/2/3/4/5/4/3
>>> a
0

যখন আমরা পূর্ণসংখ্যাগুলি ভাগ করি, অবাক হওয়ার কিছু নেই যে এটি গোলাকার হয়ে যায়।

>>> a = 1/2/3/4/5/4/float(3)
>>> a
0.0

যদি আমরা ভাসানোর শেষ সংখ্যাকে টাইপকাস্ট করি তবে আমরা এখনও শূন্য হয়ে যাব, কারণ পূর্ণসংখ্যা বিভাগের কারণে আমাদের সংখ্যাটি ভাসা দ্বারা ভাগ করা ইতিমধ্যে 0 হয়ে গেছে।

>>> a = 1/2/3/float(4)/5/4/3
>>> a
0.0

উপরের মতো একই দৃশ্য কিন্তু বাম পাশের সামান্য কাছাকাছি ফ্লোট টাইপকাস্ট স্থানান্তরিত।

>>> a = float(1)/2/3/4/5/4/3
>>> a
0.0006944444444444445

শেষ অবধি, যখন আমরা প্রথম পূর্ণসংখ্যাকে ভাসানোর জন্য টাইপকাস্ট করি, ফলাফলটি প্রথম বিভাগ থেকে শুরু করে অর্থাৎ বাম দিকের এক থেকে শুরু করে, আমরা পছন্দসই হয় flo

অতিরিক্ত 1: আপনি যে গাণিতিক মূল্যায়ন উন্নত করতে উত্তর বের করার চেষ্টা হয়, আপনি পরীক্ষা করা উচিত এই

অতিরিক্ত 2: দয়া করে নিম্নলিখিত দৃশ্যে সাবধান হন:

>>> a = float(1/2/3/4/5/4/3)
>>> a
0.0

4

একটি 'রেখে' একটি ফ্লোট নির্দিষ্ট করে দিন। সংখ্যা পরে এটি ভাসমান ডিফল্ট হতে হবে।

>>> 1 / 2
0

>>> 1. / 2.
0.5

2

তাদের মধ্যে কমপক্ষে একটিকে ভাসা করুন, তারপরে এটি পূর্ণসংখ্যা নয়, ভাসমান বিভাগ হবে be

>>> (20.0-10) / (100-10)
0.1111111111111111

ভাসতে ফলাফল কাস্টিংয়ে দেরি হয়ে গেছে।


1

পাইথনে cv2বিভাগ গণনা আপডেট করা হয়নি। সুতরাং, আপনাকে অবশ্যই from __future__ import division প্রোগ্রামের প্রথম লাইনে অন্তর্ভুক্ত করতে হবে ।


0

যেভাবেই হোক না কেন এটি পূর্ণসংখ্যা বিভাগ। 10/90 = 0. দ্বিতীয় ক্ষেত্রে, আপনি কেবল একটি ফ্লোটে 0 কাস্ট করছেন।

"/" এর অন্যতম অপারেটর একটি ভাসমান হতে কাস্ট করার চেষ্টা করুন:

float(20-10) / (100-10)

0

বিভাগটি ইতিমধ্যে আপনার দ্বিতীয় উদাহরণে ঘটার পরে আপনি ভাসতে কাস্ট করছেন। এটা চেষ্টা কর:

float(20-10) / float(100-10)

0

আমি কিছুটা অবাক হয়েছি যে কেউই উল্লেখ করেনি যে আসল পোস্টারটি সম্ভবত যুক্তিযুক্ত সংখ্যা পছন্দ করেছে । আপনি যদি এতে আগ্রহী হন, পাইথন-ভিত্তিক প্রোগ্রাম সেজে আপনার পিঠ রয়েছে । (বর্তমানে পাইথন ২.x এর উপর ভিত্তি করে, যদিও 3.x চলছে))

sage: (20-10) / (100-10)
1/9

এটি সবার জন্য সমাধান নয়, কারণ এটি কিছু প্রস্তুতিমূলক কাজ করে যাতে এই সংখ্যাগুলি নয় intতবে সেজ Integerশ্রেণীর উপাদানগুলি। তবুও, পাইথন ইকোসিস্টেমের অংশ হিসাবে উল্লেখযোগ্য।


0

ব্যক্তিগতভাবে আমি 1. *একেবারে প্রথম দিকে একটি sertোকানো পছন্দ করতাম । সুতরাং এক্সপ্রেশন কিছু হয়ে যায়:

1. * (20-10) / (100-10)

আমি যেমন কিছু সূত্রের জন্য সর্বদা একটি বিভাগ করি যেমন:

accuracy = 1. * (len(y_val) - sum(y_val)) / len(y_val)

সুতরাং কেবল একটি .0পছন্দ যুক্ত করা অসম্ভব 20.0। এবং আমার ক্ষেত্রে, একটি দিয়ে মোড়ানো float()কিছুটা পড়ার ক্ষমতা হারাতে পারে।

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