2013-05-02 4 views
7

मैं यह जानना चाहता हूं कि दो नंबर N1 और N2 समान अंक के क्रमपरिवर्तन हैं। उदाहरण के लिए 123 और 321 समान अंक के क्रमपरिवर्तन हैं, जहां 234 और 123 नहीं हैं। मैंने उस समस्या को हल करने के लिए पायथन का उपयोग किया है जिसमें से मैं एक विशेषज्ञ नहीं हूं। मैं Windows 7 पर उपयोग कर रहा हूं। विनिर्देश Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32 हैं।पायथन में वैश्विक नाम

अजगर कोड नीचे दिखाया गया है,

def k(n, m): 
    s1 = n 
    s2 = m 
    k = 0 
    fl = 0 
    while k < 10 : 
     arr1[k] = 0 
     arr2[k] = 0 
     k = k + 1 
    while s1 > 0 : 
     t = s1 % 10 
     arr1[t] = 1 
     t = s2 % 10 
     arr2[t] = 1 
     s1 = s1/10 
     s2 = s2/10 
    k = 0 
    while k < 10 : 
     if arr1[k] != arr2[k]: 
      fl = 1 
     k = k + 1 
    return fl 

मैं k.py के रूप में फ़ाइल को बचाया और निम्न आदेश import k का उपयोग कर आयात किया। लेकिन जब मैंने कोड को k.k(123, 321) के रूप में निष्पादित करने का प्रयास किया तो मुझे निम्न त्रुटि मिल रही है।

Traceback (most recent call last): 
    File "<pyshell#7>", line 1, in <module> 
    k.k(123,321) 
    File "k.py", line 7, in k 
    global arr2 
NameError: global name 'arr1' is not defined 

मैं इस प्रकार सरणियों घोषित करने की कोशिश,

arr1 = [] 
arr2 = [] 

मैं भी कोशिश की,

global arr1 = [] 
global arr2 = [] 

और

global arr1 
global arr2 

लेकिन मैं अब भी वही त्रुटि हो रही है । मेरे कोड में क्या गलत है?

मैंने SO में निम्नलिखित उत्तरों की जांच की है लेकिन मैं अपनी समस्या का समाधान नहीं कर सका।

Help Defining Global Names

Use of "global" keyword in Python

मैं क्या माना जाता था कि अजगर में आप किसी भी चर घोषित करने के लिए नहीं है, बजाय आप बस उन्हें उपयोग कर सकते हैं। क्या मैं इस धारणा के बारे में गलत हूं?

कोई सुझाव? धन्यवाद।

+1

() str (एन) 'विचार करने के लिए हल कर सकता है चाहता हूँ == अनुसार क्रमबद्ध (एसटीआर (एम)) 'जो –

+0

@ जोन क्लेमेंट्स के लिए थोड़ा आसान है: सरल समाधान के लिए धन्यवाद :) – Deepu

उत्तर

3

यहां वैश्विक मूल्यों के साथ कुछ भी करने की आवश्यकता नहीं है। सब कुछ समारोह के भीतर निहित होना चाहिए।

समस्या यह है कि आप उन्हें जोड़ने का प्रयास करने से पहले arr1 या arr2 परिभाषित नहीं करते हैं। s1, s2, k और fl के साथ आपको उस फ़ंक्शन में परिभाषित करने की आवश्यकता है।

संपादित करें मुझे यह जोड़ना चाहिए कि आपका कोड बेहद असंभव है। इन सभी के दौरान बढ़ते काउंटरों के साथ लूप को लूप के साथ प्रतिस्थापित किया जाना चाहिए: for k in range(10) इत्यादि। लेकिन पहला लूप भी आवश्यक नहीं है - आपके पास arr1 = [0] * 10 और arr2 के लिए होना चाहिए।

+0

+1। मैं एक सरणी कैसे परिभाषित कर सकता हूं? मैंने arr1 = [] और arr2 = [] की कोशिश की। – Deepu

+0

और आपने फ़ंक्शन को कॉल करने से पहले ऐसा किया था? – Matthias

+0

@ माथियास: नहीं मैंने इसे फ़ंक्शन के अंदर किया था। क्या यह ग़लत है? – Deepu

1

आपको कार्यों में सरणी को परिभाषित करने की आवश्यकता है। और फिर इसमें शामिल हों। arr1 = [] एक खाली सरणी परिभाषित करता है।

arr1[k] = 2 

सूचकांक k पर मान बदलने की कोशिश करता है। तो या तो आपको इसे किसी निश्चित आकार में प्रारंभ करना चाहिए या खाली सरणी में जोड़ना चाहिए (append फ़ंक्शन का उपयोग करके)।

इसके अलावा, आप समारोह बाहर से सरणियों उपयोग करना चाहते हैं, तो आप समारोह से सरणियों वापस जाने के लिए चाहते हो सकता है

+0

+1। लेकिन मेरा विचार इंडेक्स का उपयोग 0 से 9 तक अंकों की उपस्थिति की जांच के लिए करना था। – Deepu

+0

क्या आपका पहला लूप 0 से प्रारंभिक नहीं है? arr1 = [] के रूप में सरणी बनाने के बाद अनुक्रमण के बजाय arr1.append (0) का उपयोग करें। या लूप को arr1 = [0] * 10 द्वारा प्रतिस्थापित करें, जो 10 शून्यों की एक खाली सरणी बनाता है। – nab

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