Home / Python

Python

পাইথন(Python) ইনপুট, আউটপুট এবং ইম্পোর্ট

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

পাইথন নানা ধরণের বিল্ট-ইন ফাংশন সরবরাহ করে যেগুলো আমরা আমাদের প্রয়োজনে নির্দিধায় ব্যবহার করতে পারি।

স্টান্ডার্ড ইনপুট এবং আউটপুটের জন্য যথাক্রমে input() এবং  print() ফাংশন ব্যবহৃত হয়। চলুন প্রথমেই আমরা আউটপুট সেকশনটি দেখে নেই।

 

print() ফাংশনের মাধ্যমে পাইথন আউটপুট

স্টান্ডার্ড আউটপুট ডিভাইসে(যেমন-স্ক্রিনে) আউটপুট নেওয়ার জন্য আমরা print() ফাংশন ব্যবহার করি।

এছাড়া আমরা ডাটা ফাইলেও আউটপুট নিতে পারি। পরিবর্তি অধ্যায়ে এটি সম্মন্ধে বিস্তারিত আলোচনা করা হবে।

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

print('This sentence will be displayed on the screen')
# Output: This sentence will be displayed on the screen

num= 10

print('The value of num is', num)
# Output: The value of num is 10

দ্বিতীয় print() স্টেটমেন্টে লক্ষ্য করলে দেখবেন স্ট্রিং(string) এবং ভ্যারিয়েবল num এর মধ্যে একটি স্পেস দেওয়া আছে এবং এটি ডিফল্টভাবে ব্যবহৃত হয়, কিন্তু আমরা ইচ্ছা করলে এটি পরিবর্তন করতে পারি।

print()  ফাংশনের প্রকৃত সিনট্যাক্স (syntax ) নিম্নরূপঃ


print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

 

সিনট্যাক্স এর ব্যাখ্যা

  • এখানে objects হচ্ছে ভ্যালু যা প্রিন্ট করতে হবে।
  •   sep সেপারেটর দুটি ভ্যালুর মধ্যে ব্যবহৃত হয়। এটার ডিফল্ট ভ্যালু হচ্ছে স্পেস ক্যারেক্টার।
  • সকল ভ্যালু প্রিন্ট হওয়ার পরে end  প্রিন্ট হয় যার ডিফল্ট ভ্যালু হলো নতুন লাইন(new line)।
  • file হলো অবজেক্ট যেখানে /যাতে ভ্যালু প্রিন্ট হয় এবং এটার ডিফল্ট ভ্যালু হলো sys.stdout(স্ক্রিন)। নিচের উদাহরণের সাহায্যে ব্যাখ্যা দেওয়া হলোঃ

print(1,2,3,4,5)
# Output: 1 2 3 4

print(1,2,3,4,sep='&')
# Output: 1&2&3&4&5

print(1,2,3,4,5,sep='#',end='&')
# Output: 1*2*3*4&

আউটপুট ফরম্যাটিং(Output formatting)

আউটপুটকে অধিক আকর্ষনীয় করে তোলার জন্য মাঝে মাঝে আমাদের আউটপুট বিন্যাস/ফরম্যাটিং এর প্রয়োজন হতে পারে। str.format() মেথড ব্যবহার করে এটি সম্পন্ন করা যায়। যেকোনো স্ট্রিং অবজেক্টে এই মেথডটি প্রয়োগ করা যায়।


>>> x = 3; y = 5
>>> print('The value of x is {} and y is {}'.format(x,y))
#Output: The value of x is 3 and y is 5

এখানে কারলি ব্রাকেট{} স্থানধারক(placeholder) হিসাবে ব্যবহৃত হয়েছে। আমরা নাম্বার(টাপল ইনডেক্স) ব্যবহার করে এগুলোর অর্ডার ঠিক করে দিতে পারি।

</pre>
print('We love {0} and {1}'.format('SATT','founder of SATT'))
# Output: We love SATT and founder of SATT

print('We love {1} and {0}'.format('SATT','founder of SATT'))
# Output: We love founder of SATT and SATT
<pre>

স্ট্রিং ফরম্যাটের জন্য আমরা আর্গুমেন্টও ব্যবহার করতে পারি।

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


>>> print('Hello {name}, {asking}'.format(asking = 'How are you?', name = 'Tamjid'))
#Output: Hello Tamjid How are you?

সি প্রোগ্রামিং ভাষায় ব্যবহৃত পুরাতন স্টাইল   sprintf() ফাংশন ব্যবহার করেও আমরা স্ট্রিং ফরম্যাট করতে পারি।

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


>>> num = 10.35623906
>>> print('The value of num is %3.2f' %x)
#Output: The value of num is 10.36
>>> print('The value of num is %3.4f' %x)
#Output: The value of num is 10.3562


<h2>পাইথন ইনপুট(Python Input)</h2>
এতক্ষণ পর্যন্ত আমাদের প্রোগ্রাম ছিল স্ট্যাটিক(static)। অর্থাৎ ভ্যারিয়েবল এর ভ্যালু সোর্স কোডে ডিফাইন্ড(Defined) করা ছিল অথবা আমরা বলতে পরে এটি ছিল হার্ড কোডেড(Hard coded)।

প্রোগ্রামকে সহজ এবং ডাইনামিক করে তোলার জন্য আমাদেরকে অবশ্যই ইউজারদের কাছ থেকে ইনপুট নিতে হবে। পাইথনে এই কাজটি সম্পন্ন করতে <strong>input()</strong> ফাংশন ব্যবহৃত হয়। <strong>input()</strong>ফাংশনের সিনট্যাক্স নিম্নরূপঃ



input([prompt])

যেখানে prompt হচ্ছে স্ট্রিং যা স্ক্রিনে প্রদর্শিত হয় এবং যার মাধ্যমে ইউজারকে নির্দেশনা দেওয়া হয়। এটি ঐচ্ছিক(optional)।

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


>>> num = input('Enter a number: ')
Enter a number: 10
>>> num
#Output: '10'

এখানে আমরা 10 যে ভ্যালুটি দেখছি তা নাম্বার নয় বরং স্ট্রিং। এটাকে নাম্বারে রূপান্তর(convert) করার জন্য আমরা int() অথবা float() ফাংশন ব্যবহার করতে পারি।


>>> int('10')
#Output: 10
>>> float('10')
#Output: 10.0

একই কাজ আমরা eval() ফাংশনের মাধ্যমেও সম্পন্ন করতে পারি। বরং এটার সুযোগ-সুবিধা আরও বেশী। যদি ইনপুট ভ্যালু স্ট্রিং হয় তাহলে এটি এক্সপ্রেশন(expression) কেও নির্ণয়(evaluate) করতে পারে।


>>> int('3+7')
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '3+7'
>>> eval('3+7')
#Output: 10

পাইথন ইম্পোর্ট(Python Import)

যখন আমাদের প্রোগ্রাম অনেক বড় হতে থাকে তখন সবচেয়ে ভালো বুদ্ধি হলো প্রোগ্রামের বিভিন্ন অংশকে বিভিন্ন মডিউল(module)-এ বিভক্ত করা।

মডিউল হচ্ছে পাইথন এর বিভন্ন সংজ্ঞা এং স্টেটমেন্ট সম্বলিত একটি ফাইল। পাইথন মডিউলের একটি ফাইল নাম থাকে এবং এটি .py এক্সটেনশন এর মাধ্যমে শেষ হয়।

পাইথনে এক মডিউলে থাকা সংজ্ঞা(কোড) অন্য মডিউলে ইম্পোর্ট করা যায়। এটি করার জন্য আমরা import কীওয়ার্ড ব্যবহার করি।

উদাহরণস্বরূপ, import math এর মাধ্যমে আমারা math মডিউলকে ইম্পোর্ট করতে পারি।


import math
print(math.pi)

এখন math মডিউলে থাকা সমস্ত সংজ্ঞা(কোড) আমাদের স্কোপেও বিদ্যমান অর্থাৎ আমরা এর সমস্ত কোড ব্যবহার করতে পারি। এছাড়া আমরা চাইলে   from কীওয়ার্ড ব্যবহার করে কোনো মডিউলের নির্দিষ্ট কোনো সংজ্ঞাকেও ইম্পোর্ট করতে পারি।

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


>>> from math import pi
>>> pi
#Output: 3.141592653589793

যখন একটি মডিউলকে ইম্পোর্ট করা হয় তখন এটি sys.path এ নির্ধারিত বিভিন্ন স্থানে খোঁজ করে। নিম্নে ডিরেক্টরি লোকেশন এর তালিকা তুলে ধরা হলোঃ


>>> import sys
>>> sys.path
['',
'C:\\Python36\\Lib\\idlelib',
'C:\\Windows\\system32\\python36.zip',
'C:\\Python36\\DLLs',
'C:\\Python36\\lib',
'C:\\Python36',
'C:\\Python36\\lib\\site-packages']

আপনি চাইলে আপনার নিজস্ব লোকেশনকেও এই তালিকায় যুক্ত করতে পারেন।

Key Generation in Python

I’m creating a REST API for my current Django project, and I want a good psuedo-random way to generate alpha numeric API keys. Outlined is a simple method which I believe makes pretty good psuedo-random keys.

Like Session keys, API keys should be sufficiently unpredictable to be psuedo-random. To be unpredictable, no user variables (or timestamps) are encoded into the key.

Specifically, the key starts life as a 256bit number generated by the Mersenne Twister Pseudo Random Number Generator (PRNG).

>> str(random.getrandbits(256))
>>90035287577760653301955374895950037116738729760252440482985364146171806313429

Mersenne Twister itself is not considered cryptographically secure (it has been demonstrated that observing a sufficient number of iterates allows one to predict all future iterates).

To mitigate this problem, the 256bit number is cryptographically hashed using SHA-256.

>> hashlib.sha224( str(random.getrandbits(256)) ).hexdigest()
>> 654c6da8f3b0fd8fe819669daf07996738d21a53c02c731b0aee6373

The result is then Base64 encoded – which results in a string containing only lower and upper case alphabetical characters, and numbers – and also two special characters (usually ‘/’ and ‘+’).

A character-pair (eg: ‘aF’ or ‘zZ’) is then selected randomly (pseudo-randomly) from a pool of character-pairs; these are substituted (salted) for the non-alphanumeric characters left by the Base64 encoding.

The resulting string is a 38 character alphanumeric that is sufficiently large and unpredictable for an API key.

>> base64.b64encode(hashlib.sha256( str(random.getrandbits(256)) ).digest(), random.choice([‘rA’,’aZ’,’gQ’,’hH’,’hG’,’aR’,’DD’])).rstrip(‘==’)
>> mwkMqTWFnK0LzJHyfkeBGoS2hr2KG7WhHqSGX0SbDJ4