2013-06-29 6 views
6

मैं अजगर पर बहुत नया हूं और मैं argv के साथ खेल रहा हूं। मैं यहाँ और एक त्रुटि है कि कहते हैं हो रही इस साधारण प्रोग्राम लिखा है:Argv - इंटीजर में स्ट्रिंग

TypeError: %d format: a number is required, not str

from sys import argv 

file_name, num1, num2 = argv 
int(argv[1]) 
int(argv[2]) 
def addfunc(num1, num2): 
    print "This function adds %d and %d" % (num1, num2) 
    return num1 + num2 

addsum = addfunc(num1, num2) 
print "The final sum of addfunc is: " + str(addsum) 

जब मैं filename.py 2 2 चलाने के लिए, करता argv स्ट्रिंग में 2 2 डाल? यदि हां, तो मैं इन्हें पूर्णांक में कैसे परिवर्तित करूं?

आपकी मदद के लिए धन्यवाद।

उत्तर

9

sys.argv वास्तव में तारों की एक सूची है। एक स्ट्रिंग को किसी संख्या में बदलने के लिए int() फ़ंक्शन का उपयोग करें, बशर्ते स्ट्रिंग परिवर्तित हो।

आप असाइन परिणाम की जरूरत है, तथापि:

num1 = int(argv[1]) 
num2 = int(argv[2]) 

या बस का उपयोग करें:

num1, num2 = int(num1), int(num2) 

आप फोन int() किया, लेकिन वापसी मान पर ध्यान नहीं दिया।

4

वे चर परिवर्तित पूर्णांकों असाइन करें:

num1 = int(argv[1]) #assign the return int to num1 
num2 = int(argv[2]) 

बस कर:

int(argv[1]) 
int(argv[2]) 

रूप int रिटर्न एक नया int वस्तु मूल आइटम को प्रभावित नहीं करेगा, sys.argv अंदर आइटम नहीं हैं उस से प्रभावित

argv[1:] = [int(x) for x in argv[1:]] 
file_name, num1, num2 = argv #now num1 and num2 are going to be integers 
1

int(argv[1]) चल रहा है वास्तव में argv[1] का मूल्य परिवर्तन नहीं करता है (या num1, की जो उसके असाइन करने के लिए):

यो मूल सूची आप ऐसा कर सकते संशोधित करते हैं।

इस बदलें:

int(argv[1]) 
int(argv[2]) 
इस के साथ

:

num1 = int(num1) 
num2 = int(num2) 

और यह काम करना चाहिए।

int (..), str (...) आदि फ़ंक्शन उन्हें पास किए गए मानों को संशोधित नहीं करते हैं। इसके बजाय, वे वापसी डेटा को एक अलग प्रकार के रूप में पुन: व्याख्यान देते हैं।

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