Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में argparse choices विकल्प का उपयोग करके आर्गुमेंट मान प्रतिबंधित करना

परिचय

मान लीजिए आपको एक प्रोग्राम लिखना है जो उपयोगकर्ता से टेनिस ग्रैंड स्लैम खिताब की संख्या स्वीकार करे। हम जानते हैं कि फेडरर और नडाल के पास अधिकतम 20 खिताब हैं (2020 तक), जबकि न्यूनतम 0 है।

आइए एक प्रोग्राम बनाएं जो खिताब की संख्या स्वीकार करे।

नोट - प्रोग्राम को टर्मिनल से चलाएं।

बिना प्रतिबंध के संस्करण

import argparse

def get_args():
    parser = argparse.ArgumentParser(
        description='एक स्थानिक आर्गुमेंट का उदाहरण',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('titles', metavar='titles', type=int, help='ग्रैंड स्लैम खिताब')
    return parser.parse_args()

def main(titles):
    print(f" *** खिलाड़ी ने {titles} ग्रैंड स्लैम खिताब जीते।")

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

आउटपुट:


>>> python test.py 20
*** खिलाड़ी ने 20 ग्रैंड स्लैम खिताब जीते।
>>> python test.py 50
*** खिलाड़ी ने 50 ग्रैंड स्लैम खिताब जीते।
>>> python test.py -1
*** खिलाड़ी ने -1 ग्रैंड स्लैम खिताब जीते।

समस्या: प्रोग्राम अमान्य मान (नकारात्मक, 20 से अधिक) स्वीकार कर लेता है।

choices विकल्प के साथ प्रतिबंधित संस्करण

import argparse

def get_args():
    parser = argparse.ArgumentParser(
        description='एक स्थानिक आर्गुमेंट का उदाहरण',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    # choices में range(0, 20) का उपयोग करें (0 से 19 तक)
    parser.add_argument('titles', metavar='titles', type=int, 
                       choices=range(0, 20), help='ग्रैंड स्लैम खिताब')
    return parser.parse_args()

def main(titles):
    print(f" *** खिलाड़ी ने {titles} ग्रैंड स्लैम खिताब जीते।")

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

आउटपुट:


>>> python test.py 30
usage: test.py [-h] titles
test.py: error: argument titles: invalid choice: 30 (choose from 0, 1, 2, ... 19)

>>> python test.py 10
*** खिलाड़ी ने 10 ग्रैंड स्लैम खिताब जीते।

>>> python test.py -1
usage: test.py [-h] titles
test.py: error: argument titles: invalid choice: -1 (choose from 0, 1, 2, ... 19)

स्ट्रिंग choices के साथ उदाहरण

import argparse

def get_args():
    parser = argparse.ArgumentParser(
        description='खिलाड़ी और खिताब का उदाहरण',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('player', metavar='player', type=str,
                       choices=['federer', 'nadal', 'djokovic'],
                       help='टेनिस खिलाड़ी')
    parser.add_argument('titles', metavar='titles', type=int,
                       choices=range(0, 20),
                       help='ग्रैंड स्लैम खिताब')
    return parser.parse_args()

def main(player, titles):
    print(f" *** {player} ने {titles} ग्रैंड स्लैम खिताब जीते।")

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

आउटपुट:


>>> python test.py "federer" 30
error: argument titles: invalid choice: 30

>>> python test.py "murray" 5
error: argument player: invalid choice: 'murray' (choose from 'federer', 'nadal', 'djokovic')

>>> python test.py "djokovic" 17
*** djokovic ने 17 ग्रैंड स्लैम खिताब जीते।

निष्कर्ष

  • choices विकल्प मान्य मानों की सूची लेता है। argparse प्रोग्राम रोक देता है यदि उपयोगकर्ता अमान्य मान देता है।
  • choices में कोई भी पुनरावृत्त योग्य (iterable) दे सकते हैं: सूची, टपल, range, सेट।
  • यह इनपुट सत्यापन का सरल और प्रभावी तरीका है।
  1. - Python में MySQL का उपयोग करके टेबल में मान अपडेट करना

    टेबल में डेटा पुराना हो सकता है और हमें कुछ समय बाद डेटा बदलने की आवश्यकता हो सकती है। मान लीजिए, हमारे पास Students की एक टेबल है और छात्रों में से एक ने अपना पता बदल लिया है। हमें भविष्य में गलत डेटा के कारण होने वाली किसी भी समस्या से बचने के लिए डेटाबेस में छात्र का पता बदलना होगा। MySQL में UP

  1. - Python में Cerberus का उपयोग करके डेटा कैसे वैलिडेट करें?

    परिचय Python में Cerberus मॉड्यूल शक्तिशाली फिर भी हल्के डेटा वैलिडेशन फंक्शन्स प्रदान करता है। इसे इस तरह से डिज़ाइन किया गया है कि आप इसे विभिन्न एप्लिकेशन्स और कस्टम वैलिडेशन्स तक बढ़ा सकते हैं। हम पहले एक स्कीमा परिभाषित करते हैं और फिर डेटा को स्कीमा के विरुद्ध वैलिडेट करते हैं और जांचते हैं क

  1. Python में scikit-learn का उपयोग करके इमेज के पिक्सेल वैल्यू कैसे देखें? Python में scikit-learn का उपयोग करके इमेज के पिक्सेल वैल्यू कैसे देखें?

    डेटा प्री-प्रोसेसिंग मूल रूप से सभी डेटा (जो विभिन्न संसाधनों या एकल संसाधन से एकत्र किया गया है) को एक सामान्य प्रारूप में या समान डेटासेट में इकट्ठा करने का कार्य है (डेटा के प्रकार के आधार पर)।चूंकि वास्तविक दुनिया का डेटा कभी भी आदर्श नहीं होता, इसलिए संभावना है कि डेटा में लापता सेल, त्रुटियां,