সাধারণত একটি এক্সপ্রেশনের ডেটা টাইপ আর্গুমেন্টের টাইপের ওপর নির্ভর করে। এই নিয়ম অধিকাংশ অপারেটরের ক্ষেত্রে প্রযোজ্য: যেমন যখন আমরা দুটি ইন্টিজার যোগ করি, ফলাফল ইন্টিজার হওয়া উচিত। কিন্তু ডিভিশনের ক্ষেত্রে এটি ভালো কাজ করে না কারণ দুটি ভিন্ন আশা রয়েছে। কখনো আমরা ডিভিশনের সঠিক ফ্লোটিং পয়েন্ট নম্বর আশা করি এবং কখনো রাউন্ড-ডাউন ইন্টিজার ফলাফল চাই।
সাধারণত পাইথনের ডিভিশন (/) এর সংজ্ঞা শুধু আর্গুমেন্টের ওপর নির্ভর করে। উদাহরণস্বরূপ পাইথন ২.৭-এ, 20/7 এর ফলাফল ২ ছিল কারণ দুটি আর্গুমেন্টই ইন্টিজার। কিন্তু 20./7 আউটপুট দেবে 2.857142857142857 কারণ আর্গুমেন্টগুলো ফ্লোটিং পয়েন্ট নম্বর।
উপরোক্ত '/' সংজ্ঞা যেসব অ্যাপ্লিকেশনে ডেটা টাইপ ব্যবহার করা হয়েছে যা লেখক আশা করিনি সেখানে সমস্যা সৃষ্টি করত।
একটি সহজ প্রোগ্রাম বিবেচনা করুন যা সেলসিয়াস থেকে ফারেনহাইটে রূপান্তর করে। এটি ইনপুটের ওপর নির্ভর করে দুটি ভিন্ন ফলাফল দেবে। যদি একজন ব্যবহারকারী ইন্টিজার আর্গুমেন্ট (18) দেয় এবং অন্যজন ফ্লোটিং পয়েন্ট আর্গুমেন্ট (18.0) দেয়, তবে উত্তর দুটি পুরাপুরি ভিন্ন হবে, যদিও সমস্ত ইনপুটের নমেরিক মান সমান।
#Conversion of celcius to Fahrendheit in python 2.6 >>> print 18*9/5 + 32 64 >>> print 18.0*9/5 + 32 64.4 >>> 18 == 18.0 True
উপরে থেকে আমরা দেখতে পাচ্ছি, যখন আমরা 18.0 পাস করি, সঠিক আউটপুট পাই এবং যখন 18 পাস করি, ভুল আউটপুট পাই। এই আচরণের কারণ হলো পাইথন ২.x-এ, সব আর্গুমেন্ট ইন্টিজার হলে "/" অপারেটর ফ্লোর ডিভিশন হিসেবে কাজ করে। তবে আর্গুমেন্টের একটা ফ্লোট ভ্যালু হলে "/" অপারেটর ফ্লোট ভ্যালু রিটার্ন করে।
এক্সপ্লিসিট কনভার্সন ফাংশন (যেমন float(x)) এই সমস্যা প্রতিরোধ করতে সাহায্য করতে পারে। কিন্তু আইডিয়া হলো পাইথনকে একটি সহজ এবং সুস্পষ্ট ভাষা রাখা, বিনা কোনো ঘন ঘন কনভার্সনের클াটারের যা অপ্রত্যাশিত ডেটা টাইপের বিরল কেস কভার করে। পাইথন ২.২ ভার্সন থেকে শুরু করে, একটি নতুন ডিভিশন অপারেটর যোগ করা হয়েছে যা আশা স্পষ্ট করতে। সাদারন / অপারেটর ভবিষ্যতে ফ্লোটিং-পয়েন্ট ফলাফল রিটার্ন করবে। একটি স্পেশাল ডিভিশন অপারেটর, //, রাউন্ড-ডাউন ফলাফল রিটার্ন করবে।
>>> # Python 2.7 program to demonstrate the use of "//" for both integers and floating point number >>> print 9//2 4 >>> print -9//2 -5 >>> print 9.0//2 4.0 >>> print -9.0//2 -5.0
পাইথন ৩.x-এ ডিভিশন অপারেশন
পাইথন ৩.x-এ উপরে উল্লিখিত ত্রুটিগুলো দূর করা হয়েছে এবং '/' অপারেটর ইন্টিজার এবং ফ্লোটিং পয়েন্ট উভয় আর্গুমেন্টের জন্য ফ্লোটিং পয়েন্ট ডিভিশন করে।
>>> #Conversion of celcius to Fahrendheit in python 3.x >>> #Passing 18 (integer) >>> print(18*9/5 + 32) 64.4 >>> #Passing 18.0(float) >>> print(18.0*9/5 + 32) 64.4
পজিটিভ বা নেগেটিভ আর্গুমেন্ট পাস করলে কোনো পার্থক্য নেই।
>>> print(9/2) 4.5 >>> print(-9/2) -4.5 >>> print(9.0/2) 4.5 >>> print(-9.0/2) -4.5