আমি কীভাবে বিভাগকে পাইথনে ভাসমান বিন্দুতে বাধ্য করতে পারি?
আমার দুটি এবং পূর্ণসংখ্যার দুটি মান রয়েছে তবে আমার ভাসমান পয়েন্টে তাদের অনুপাতের প্রয়োজন। আমি জানি যে একটি <b এবং আমি a / b গণনা করতে চাই, সুতরাং আমি যদি পূর্ণসংখ্যা বিভাগটি ব্যবহার করি তবে আমি সর্বদা একটি এর বাকী অংশ দিয়ে 0 পাই।
নীচের পাইথনে সিটিকে কীভাবে একটি ভাসমান পয়েন্ট নম্বর হিসাবে বাধ্য করতে পারি?
c = a / b
এখানে আসলে যা জিজ্ঞাসা করা হচ্ছে তা হ'ল:
"আমি কীভাবে সত্য বিভাগকে জোর a / b
করব যে ভগ্নাংশ ফিরে আসবে?"
পাইথন 3 এ আপগ্রেড করুন
পাইথন 3 এ, সত্য বিভাগ পেতে, আপনি কেবল করেন a / b
।
>>> 1/2
0.5
মেঝে বিভাগ, পূর্ণসংখ্যার জন্য ক্লাসিক বিভাগের আচরণ এখন a // b
:
>>> 1//2
0
>>> 1//2.0
0.0
তবে, আপনি পাইথন 2 ব্যবহার করে আটকে থাকতে পারেন, বা আপনি কোড লিখতে পারেন যা অবশ্যই 2 এবং 3 উভয় ক্ষেত্রেই কাজ করবে।
পাইথন 2 ব্যবহার করা হলে
পাইথন 2 এ এটি এত সহজ নয়। ক্লাসিক পাইথন 2 বিভাগের সাথে ডিল করার কিছু উপায় অন্যদের চেয়ে ভাল এবং আরও মজবুত।
পাইথন 2 এর জন্য সুপারিশ
আপনি নীচে নীচে আমদানি সহ যে কোনও প্রদত্ত মডিউলে পাইথন 3 বিভাগের আচরণ পেতে পারেন:
from __future__ import division
যা পুরো মডিউলে পাইথন 3 স্টাইল বিভাগ প্রয়োগ করে। এটি কোনও নির্দিষ্ট সময়ে পাইথন শেলটিতেও কাজ করে। পাইথন 2 এ:
>>> from __future__ import division
>>> 1/2
0.5
>>> 1//2
0
>>> 1//2.0
0.0
এটি সত্যই সেরা সমাধান কারণ এটি নিশ্চিত করে যে আপনার মডিউলে কোডটি পাইথন 3 এর সাথে আরও সামঞ্জস্যপূর্ণ।
পাইথন 2 এর জন্য অন্যান্য বিকল্প
আপনি যদি এটি পুরো মডিউলে প্রয়োগ করতে না চান তবে আপনি কয়েকটি কাজের ক্ষেত্রের মধ্যে সীমাবদ্ধ। সর্বাধিক জনপ্রিয় হ'ল অপারেটরগুলির মধ্যে একটিকে ভাসাতে বাধ্য করা। একটি শক্ত সমাধান a / (b * 1.0)
। একটি তাজা পাইথন শেল এ:
>>> 1/(2 * 1.0)
0.5
মজবুত truediv
থেকেও দৃust operator
় operator.truediv(a, b)
, তবে এটি সম্ভবত ধীর কারণ এটি একটি ফাংশন কল:
>>> from operator import truediv
>>> truediv(1, 2)
0.5
পাইথন 2 এর জন্য প্রস্তাবিত নয়
সাধারণভাবে দেখা হয় a / float(b)
। এটি একটি টাইপরর উত্থাপন করবে যদি বি জটিল সংখ্যা হয়। জটিল সংখ্যার বিভাজন যেহেতু সংজ্ঞায়িত করা হয়েছে, তাই বিভাজকের জন্য একটি জটিল সংখ্যা পাস করার সময় বিভাগটি ব্যর্থ না হওয়ার বিষয়টি আমার কাছে বোধগম্য।
>>> 1 / float(2)
0.5
>>> 1 / float(2j)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't convert complex to float
উদ্দেশ্যমূলকভাবে আপনার কোডটিকে আরও ভঙ্গুর করে তোলা আমার পক্ষে খুব একটা অর্থবহ নয়।
আপনি -Qnew
পতাকাটি দিয়ে পাইথনও চালাতে পারেন , তবে এটিতে নতুন পাইথন 3 আচরণের মাধ্যমে সমস্ত মডিউলগুলি কার্যকর করার ক্ষয়ক্ষতি রয়েছে এবং আপনার কিছু মডিউল ক্লাসিক বিভাগের আশা করতে পারে, তাই আমি পরীক্ষা ছাড়া এটি সুপারিশ করি না। তবে প্রদর্শন করতে:
$ python -Qnew -c 'print 1/2'
0.5
$ python -Qnew -c 'print 1/2j'
-0.5j