मैं कमांड लाइन के माध्यम से दो स्ट्रिंग्स word1 और word2 स्वीकार कर रहा हूं, जिसमें केवल अक्षर होने चाहिए।

check_conditions फ़ंक्शन यह सुनिश्चित करेगा कि तार केवल अक्षर के लिए हैं।

जब मैं इस प्रोग्राम को python myprogram.py 'word1' 'word2' के रूप में चलाता हूं, तो यह कुछ भी नहीं दिखाता, कोई त्रुटि नहीं, कोई आउटपुट नहीं।

जब मैं कक्षा का उपयोग किए बिना इस प्रोग्राम को चलाता हूं, तो यह अपवाद के रूप में काम करता है।

 class FindWinner:
    def __init__(self, word1, word2):
        self.word1 = word1
        self.word2 = word2

def check_conditions(self):
    special_chars = set('[~!@#$%^&*.-()_+{}":;01234567989\']+$')
    if special_chars.intersection(self.word1) or special_chars.intersection(self.word1) or (len(self.word1) != len(self.word2) 
or ('no' in self.word1) or ('no' in self.word2)):
        print('Invalid string.')
    else:
        print("String is valid")
        print(list(self.word1))
        print(list(self.word2))


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("word1", help="First word")
    parser.add_argument("word2", help="Second word")
    args = parser.parse_args()

    c1 = FindWinner(args.number1, args.number2)
    c1.check_conditions()

मुझे यहां क्या समझ नहीं आ रहा है?

संपादित करें मैं main() को कॉल करने से चूक गया

if __name__ == "__main__":
    main()

अब, मुझे एक और त्रुटि मिल रही है:

if special_chars.intersection(self.word1) or special_chars.intersection(self.word1) or (len(self.word1) != len(self.word2) or ('no' in self.word1) or ('no' in self.word2)):

जब मैं अजगर myprogram.py my_string my_long_string चलाता हूं, तो यह मुझे string is valid आउटपुट (अन्य भाग) देता है। उपरोक्त शर्त के अनुसार, दोनों तारों में कोई विशेष वर्ण नहीं होना चाहिए और लेन समान होना चाहिए।

-1
PRK 30 सितंबर 2017, 19:52
क्या आप main() कहीं भी कॉल कर रहे हैं?
 – 
Will
30 सितंबर 2017, 20:00

3 जवाब

आपको अपने कोड से मुख्य फ़ंक्शन को कॉल करना चाहिए क्योंकि आपने केवल इसे परिभाषित नहीं किया है। अपने कोड के नीचे निम्न पंक्तियों को जोड़कर इसे पूरा करने का सामान्य तरीका।

if __name__ == '__main__':
    main()
3
sdvd 30 सितंबर 2017, 20:06
धन्यवाद एसडीवी। इसने काम कर दिया। अब, मुझे एक और त्रुटि मिल रही है विशेषता त्रुटि: 'नेमस्पेस' ऑब्जेक्ट में कोई विशेषता नहीं है 'नंबर 1'
 – 
PRK
30 सितंबर 2017, 20:19
'नंबर 1' और 'नंबर 2' के बजाय 'वर्ड 1' और 'वर्ड 2' का इस्तेमाल करें
 – 
sdvd
30 सितंबर 2017, 20:26
मैं नाम बदलने से चूक गया। बहुत बहुत धन्यवाद एसडीवी। जब मैं python myprogram.py my_string my_long_string चलाता हूं, तो यह मुझे स्ट्रिंग वैध आउटपुट देता है (अन्य भाग)। उपरोक्त शर्त के अनुसार, दोनों तारों में कोई विशेष वर्ण नहीं होना चाहिए और लेन समान होना चाहिए।
 – 
PRK
30 सितंबर 2017, 20:40

@ एसडीवीडी के उत्तर पर विस्तार करने के लिए, लाइनें

if __name__ == “__main__”:
    main()

जाँचता है कि क्या स्क्रिप्ट सीधे दुभाषिया द्वारा लागू की जा रही है या यदि इसे आयात किया जा रहा है। यदि स्क्रिप्ट आयात की जा रही है, तो मुख्य कार्य नहीं चल रहा है, क्योंकि संभावना है कि आप स्क्रिप्ट को तुरंत नहीं चलाना चाहते हैं। यदि स्क्रिप्ट को सीधे दुभाषिया द्वारा बुलाया जा रहा है, तो आप मुख्य फ़ंक्शन को तुरंत चलाना चाहते हैं, जो कि तब होता है जब उस अभिव्यक्ति का मूल्यांकन सही होता है।

आपकी स्क्रिप्ट में अब मुख्य फ़ंक्शन के लिए कोई कॉल नहीं है, इसलिए कुछ नहीं होता है। उपरोक्त पंक्तियों को अपनी स्क्रिप्ट के निचले भाग में जोड़ें, और चीजें वैसे ही आगे बढ़नी चाहिए जैसे आप चाहते हैं।

अपने तर्कों तक पहुँचने के लिए, args.number1 और args.number2 के बजाय args.word1 और args.word2 का उपयोग करें, क्योंकि यही आपने उनका नाम रखा है।

0
Steampunkery 30 सितंबर 2017, 20:35
आपके इनपुट के लिए धन्यवाद स्टीमपंकरी। मैंने एसडीवीडी द्वारा सुझाए गए कार्यक्रम को संपादित किया है।
 – 
PRK
30 सितंबर 2017, 20:26
मेरे पास ArgParser का उपयोग करने का शून्य अनुभव है, लेकिन दस्तावेज़ों पर एक त्वरित नज़र मुझे बताती है कि आपके पास word1 और word2 नाम के तर्क हैं। मुझे विश्वास है कि आप उन्हें इस प्रकार एक्सेस कर सकते हैं: args.word1 और args.word2। मैंने इसे दर्शाने के लिए अपना जवाब संपादित कर लिया है।
 – 
Steampunkery
30 सितंबर 2017, 20:34

आप तर्क को एक नाम देते हैं और बाद में किसी अन्य नाम के साथ उसका उपयोग करते हैं।

args.word1 और args.word2 का उपयोग करके देखें, या जब आप उन्हें जोड़ते हैं तो उन्हें number1 और number2 पर कॉल करें (add_argument का उपयोग करके)।

0
Neo 30 सितंबर 2017, 20:51