2015-10-22 8 views
8

मैं एक सूची संपादित करने और इसे एक पालिंड्रोम बनाने के लिए एक कोड लिखने की कोशिश कर रहा हूं।सरल पायथन इनपुट त्रुटि

सब कुछ मेरे इनपुट को छोड़कर काम कर रहा है अभी भी मुझे एक त्रुटि देता है। जब मैं get_number_2 में गैर-int दर्ज करता हूं, तो यह क्रैश हो जाता है।

def get_number(): 
    num = raw_input("Please enter number between 100,000 and 1,000,0000: ") 
    if not num.isdigit(): 
     print "---------------------------" 
     print "Invalid input: numbers only" 
     print "---------------------------" 
     my_main() 
    else: 
     return num 

def get_number_2(n): 
    num = input("Please confirm the number you have entered: ") 
    if num != int(n): 
     print "--------------------" 
     print "Entries do not match" 
     print "--------------------" 
     my_main() 
    else: 
     return num 

मैं get_number के रूप में कोड के बाकी के लिए get_number_2 से इनपुट का उपयोग काम नहीं करता है जब मैं जाँच अपने बीच दो नंबर है।

क्या कोई तरीका है यदि मैं get_number_2 में इनपुट int में हूं तो मैं सत्यापित कर सकता हूं ताकि मैं get_number से छुटकारा पा सकूं?

उत्तर

3

तुम भी raw_input और int(num) का उपयोग करना चाहिए

  • मुझे लगता है कि पैरामीटर n एक पूर्णांक है, या इस जांच करने के लिए आप के लिए है, तो बदल सकता है: if not num.isdigit() or not n.isdigit() or int(num) != int(n)
  • isdigit का उपयोग करके हम जांचते हैं कि यह वास्तव में इसे int में परिवर्तित करने से पहले एक पूर्णांक है या नहीं।
+0

यह अभी भी काम नहीं करेगा क्योंकि 'num' एक पूर्णांक नहीं है, तो 'int (num)' एक त्रुटि फेंक देगा। –

+0

अब और नहीं, क्योंकि मैं पहले चेक करता हूं। – agold

+0

मुझे बस एक int के रूप में वापसी संख्या थी। धन्यवाद दोस्त। –

3

आप num != int(n) ऐसा नहीं कर सकते क्योंकि यह int(n) जो अमान्य है कॉल करने के लिए करता है, तो n वास्तव में एक पूर्णांक नहीं है का प्रयास करेंगे। इसके अलावा पायथन 2.x में raw_input() बजाय input() का उपयोग करें:

यह करने के लिए उचित तरीके से try और except

try: 
    n = int(n) 
except ValueError: 
    print 'Entry is not an integer.' 
    #handle this in some way 

संपादन का उपयोग करने के लिए है। input() बहुत अजीब परिणाम देता है अगर आपको नहीं पता कि यह क्या कर रहा है।

def get_number_2(n): 
    num = raw_input("Please confirm the number you have entered: ") 
    if not num.isdigit() or int(num) != n: 
     print "--------------------" 
     print "Entries do not match" 
     print "--------------------" 
     my_main() 
    else: 
     return int(num) 

नोट्स:

+1

कृपया बयानों को छोड़कर नंगे का उपयोग नहीं करते उपयोगकर्ता नहीं मान्य पूर्णांक में प्रवेश करती है, तो यह ValueError अपवाद फेंकता है। यह 'ValueError को छोड़कर' होना चाहिए। –

+0

हां, लेकिन अगर मैं सत्यापित कर सकता हूं कि get_number_2 एक int है तो मैं get_number को त्याग सकता हूं और उनसे मिलान करने की आवश्यकता को खत्म कर सकता हूं? –

+0

@S_Sull yes, आप बस 'try: n = int (raw_input (' एंटर नंबर: ') कर सकते हैं) को छोड़कर: ValueError: प्रिंट करें' कृपया एक पूर्णांक दर्ज करें 'जो इनपुट को पकड़ता है और इसे एक पूर्णांक में बदल देता है, यह एक नहीं है। –

6

अपवाद को संभालने वाला प्रोग्राम लिखें।

try: 
    a = int(b) 
except ValueError: 
    print "Unable to interpret your input as a number" 

आप इस तरह अपने प्रश्न अपडेट करना होगा::

def get_number_2(n): 
    num = input("Please confirm the number you have entered: ") 
    try: 
     if num != int(n): 
      print "--------------------" 
      print "Entries do not match" 
      print "--------------------" 
      my_main() 
     else: 
      return num 
    except ValueError: 
     print "Unable to interpret your input as a number" 
-1
from operator import attrgetter 
num0 = input() 
if not attrgetter('isdigit')(num0)(): 
    print("that's not a number") 
+0

इंडेंटेशन तय किया !!! –

+2

कृपया कुछ स्पष्टीकरण जोड़ें। एक कोड स्निपेट केवल वास्तविक जवाब नहीं है। – cezar

+0

इसके कि स्पष्ट attrgetter ('isdigit') (num0)() रिटर्न Trus अगर "num0" चर पर दिया स्ट्रिंग अंक और झूठी नहीं तो इसलिए यदि दिए गए स्ट्रिंग एक अंक है तो कार्यक्रम चलेंगे है आम तौर पर यदि नहीं, तो यह प्रिंट नहीं करेगा और यदि आप चाहें तो आप निष्पादन को रोक सकते हैं या इनपुट agin –

संबंधित मुद्दे