কম্পিউটার টিউটোরিয়াল

পাইথনে আর্গপার্সে choices অপশন দিয়ে আর্গুমেন্ট ভ্যালু সীমাবদ্ধ করার টিউটোরিয়াল

ভূমিকা

মান লेआপ আপনাকে টেনিসের 그্যান্ড স্ল্যাম টাইটলের সংখ্যা ইউজারের কাছ থেকে গ্রহণ করে প্রসেস করার জন্য একটি প্রোগ্রাম লিখতে বলা হয়। আমরা জানি, ফেডারার এবং নডাল টেনিসে সর্বাধিক ২০টি গ্র্যান্ড স্ল্যাম টাইটল শেয়ার করেন (২০২০ পর্যন্ত) আর ন্যূনতম ০, অনেক খেলোয়াড় এখনো প্রথম গ্র্যান্ড স্ল্যাম টাইটল পাওয়ার জন্য লড়াই করছেন।

চলুন টাইটল গ্রহণের জন্য একটি প্রোগ্রাম তৈরি করি।

নোট - প্রোগ্রামটি টার্মিনাল থেকে রান করুন।

উদাহরণ (choices ছাড়া)

import argparse

def get_args():
    """Function: get_args
    .add_argument-এ ব্যবহৃত প্যারামিটারগুলো:
    1. metavar - ইউজারের জন্য ডেটা টাইপ সম্পর্কে হিন্ট দেয়।
    2. type - আসলে পাইথন ডেটা টাইপ (quotes ছাড়া)।
    3. help - প্যারামিটারের সংক্ষিপ্ত বিবরণ usage-র জন্য।
    """
    parser = argparse.ArgumentParser(
        description='Example for one positional arguments',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    # প্রথম আর্গুমেন্ট: খেলোয়াড়ের টাইটেল, টাইপ int
    parser.add_argument('titles', metavar='titles', type=int, help='GrandSlam Titles')
    return parser.parse_args()

def main(titles):
    print(f" *** Player had won {titles} GrandSlam titles.")

if __name__ == '__main__':
    args = get_args()
    main(args.titles)

আউটপুট (choices ছাড়া)

>>> python test.py 20
 *** Player had won 20 GrandSlam titles.
>>> python test.py 50
 *** Player had won 50 GrandSlam titles.
>>> python test.py -1
 *** Player had won -1 GrandSlam titles.
>>> python test.py 30
 *** Player had won 30 GrandSlam titles.

কোডে কোনো টেকনিক্যাল সমস্যা নেই, কিন্তু ফাংশনাল সমস্যা আছে—প্রোগ্রামটি যেকোনো সংখ্যা (নেগেটিভও) গ্রহণ করছে।

এই ধরনের ক্ষেত্রে যেখানে আমরা গ্র্যান্ড স্ল্যাম টাইটলের চয়েস সীমাবদ্ধ করতে চাই, সেখানে choices অপশন ব্যবহার করা যায়।

নিচের উদাহরণে টাইটলকে রেঞ্জ (0, 20) এ সীমাবদ্ধ করা হয়েছে।

উদাহরণ (choices সহ)

import argparse

def get_args():
    """Function: get_args
    .add_argument-এ ব্যবহৃত প্যারামিটারগুলো:
    1. metavar - ইউজারের জন্য ডেটা টাইপ সম্পর্কে হিন্ট দেয়।
    2. type - আসলে পাইথন ডেটা টাইপ (quotes ছাড়া)।
    3. help - প্যারামিটারের সংক্ষিপ্ত বিবরণ usage-র জন্য।
    4. choices - ইউজার প্রোগ্রামে দিতে পারবে এমন পূর্বনির্ধারিত চয়েসের রেঞ্জ।
    """
    parser = argparse.ArgumentParser(
        description='Example for one positional arguments',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    # প্রথম আর্গুমেন্ট: খেলোয়াড়ের টাইটেল, টাইপ int
    parser.add_argument('titles', metavar='titles', type=int, choices=range(0, 20), help='GrandSlam Titles')
    return parser.parse_args()

def main(titles):
    print(f" *** Player had won {titles} GrandSlam titles.")

if __name__ == '__main__':
    args = get_args()
    main(args.titles)

আউটপুট (choices সহ)

>>> python test.py 30
usage: test.py [-h] titles
test.py: error: argument titles: invalid choice: 30 (choose from 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
>>> python test.py 10
 *** Player had won 10 GrandSlam titles.
>>> python test.py -1
usage: test.py [-h] titles
test.py: error: argument titles: invalid choice: -1 (choose from 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
>>> python test.py 0
 *** Player had won 0 GrandSlam titles.
>>> python test.py 20
usage: test.py [-h] titles
test.py: error: argument titles: invalid choice: 20 (choose from 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)

উপসংহার:

  • choices অপশনটি একটি ভ্যালুর লিস্ট নেয়। আর্গপার্স প্রোগ্রাম বন্ধ কর देता है যদি ইউজার এই ভ্যালুগুলোর বাইরে কিছু দেয়।
  • ইউজারকে ০-১৯ এর মধ্যে থেকে বেছে নিতে হবে, অন্যথায় আর্গপার্স এরর দিয়ে বন্ধ হবে।

অবশেষে, আপনি স্ট্রিং চয়েসও গ্রহণকারী প্রোগ্রাম লিখতে পারেন।

উদাহরণ (স্ট্রিং choices সহ)

import argparse

def get_args():
    parser = argparse.ArgumentParser(
        description='Example for one positional arguments',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    # প্রথম আর্গুমেন্ট: খেলোয়াড়ের নাম, টাইপ str
    parser.add_argument('player', metavar='player', type=str, choices=['federer', 'nadal', 'djokovic'], help='Tennis Players')
    # دوم আর্গুমেন্ট: খেলোয়াড়ের টাইটেল, টাইপ int
    parser.add_argument('titles', metavar='titles', type=int, choices=range(0, 20), help='GrandSlam Titles')
    return parser.parse_args()

def main(player, titles):
    print(f" *** {player} had won {titles} GrandSlam titles.")

if __name__ == '__main__':
    args = get_args()
    main(args.player, args.titles)

আউটপুট (স্ট্রিং choices সহ)

>>> python test.py
usage: test.py [-h] player titles
test.py: error: the following arguments are required: player, titles
>>> python test.py "federer" 30
usage: test.py [-h] player titles
test.py: error: argument titles: invalid choice: 30 (choose from 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
>>> python test.py "murray" 5
usage: test.py [-h] player titles
test.py: error: argument player: invalid choice: 'murray' (choose from 'federer', 'nadal', 'djokovic')
>>> python test.py "djokovic" 17
 *** djokovic had won 17 GrandSlam titles.
  1. Python দিয়ে MySQL টেবিল কপি করা

  2. Python দিয়ে MySQL টেবিলে নির্দিষ্ট মান আপডেট করা

  3. পাইথনে Cerberus দিয়ে ডেটা ভ্যালিডেশন

  4. পাইথনে scikit-learn ব্যবহার করে ইমেজের পিক্সেল মান কীভাবে দেখবেন?