কখনও কখনও একটি চিন্তার পরীক্ষা দরকারী হতে পারে।
- আচরণ এ:
int('1.23')একটি ত্রুটি দিয়ে ব্যর্থ। এটি বিদ্যমান আচরণ।
- আচরণ বি: ত্রুটি ছাড়াই
int('1.23')উত্পাদন করে 1। এটিই আপনি প্রস্তাব করছেন।
আচরণ এ এর সাথে, আচরণ বি এর প্রভাব পেতে এটি সোজা এবং তুচ্ছ: এর int(float('1.23'))পরিবর্তে ব্যবহার করুন।
অন্যদিকে, আচরণ বি এর সাথে, আচরণের এ অর্জনের বিষয়টি উল্লেখযোগ্যভাবে জটিল:
def parse_pure_int(s):
if "." in s:
raise ValueError("invalid literal for integer with base 10: " + s)
return int(s)
(এবং উপরের কোডটি সহ, আমারও পুরোপুরি আস্থা নেই যে কোথাও কোথাও কেস কেসটি ক্ষতিগ্রস্থ করে না isn't
আচরণ A এ আচরণ বি এর চেয়ে বেশি অভিব্যক্তিপূর্ণ is
আরেকটি বিষয় বিবেচনা করুন: '1.23'হ'ল ভাসমান-পয়েন্ট মানের একটি স্ট্রিং প্রতিনিধিত্ব। রূপান্তর '1.23'একটি পূর্ণসংখ্যা ধারণার দিক থেকে দুই ধর্মান্তর (পূর্ণসংখ্যা থেকে ভাসা স্ট্রিং) জড়িত থাকে, কিন্তু int(1.23)এবং int('1')প্রতিটি কেবল একটি রূপান্তর জড়িত।
সম্পাদনা করুন:
এবং প্রকৃতপক্ষে, কোণার কেস রয়েছে যে উপরের কোডটি পরিচালনা করবে না: 1e-2এবং 1E-2উভয়ই ভাসমান পয়েন্টের মান।
type(3)আয়<type int>। তবে পাইথন অভিযোগ করে নাfloat("3")। পাইথন কি স্পষ্টভাবে স্ট্রিংটিকে কোনও int এবং তারপরে একটি ফ্লোটে রূপান্তর করছে না?