2013-05-02 19 views
7

Desidero scoprire se due numeri N1 e N2 sono le permutazioni delle stesse cifre. Ad esempio 123 e 321 sono permutazioni delle stesse cifre, dove non lo sono 234 e 123. Ho usato Python per risolvere il problema di cui non sono un esperto. Sto usando IDLE Python GUI su Windows 7. Le specifiche sono Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32.Nome globale in Python

Il codice Python è mostrato di seguito,

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 

Ho salvato il file come k.py e importati utilizzando il seguente comando import k. Ma quando ho provato a eseguire il codice come k.k(123, 321) ho ricevuto il seguente errore.

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 

ho cercato di dichiarare le matrici come segue,

arr1 = [] 
arr2 = [] 

Ho anche provato,

global arr1 = [] 
global arr2 = [] 

e

global arr1 
global arr2 

Ma ancora sto ottenendo lo stesso errore . cosa c'è che non va nel mio codice?

Ho verificato le seguenti risposte in SO ma non ho potuto risolvere il mio problema.

Help Defining Global Names

Use of "global" keyword in Python

quello che credevo fosse che in Python non devi dichiarare qualsiasi variabile, invece si può semplicemente utilizzare. Mi sbaglio su questa ipotesi?

Qualche suggerimento? Grazie.

+1

potrebbe prendere in considerazione 'ordinato (str (n)) == ordinato (str (m)) 'che è un po 'più facile da digerire –

+0

@Jon Clements: Grazie per la soluzione semplice :) – Deepu

risposta

3

Non è necessario fare nulla con i valori globali qui. Tutto dovrebbe essere contenuto all'interno della funzione.

Il problema è semplicemente che non si definisce arr1 o arr2 prima di provare ad accedervi. È necessario definirli in quella funzione, insieme a s1, s2, k e fl.

Modifica Devo aggiungere che il codice è estremamente non piccante. Tutti questi cicli while con contatori incrementali devono essere sostituiti con cicli for: for k in range(10) ecc. Ma il primo ciclo non è nemmeno necessario: si dovrebbe avere arr1 = [0] * 10 e lo stesso per arr2.

+0

+1. Come posso definire un array? Ho provato arr1 = [] e arr2 = []. – Deepu

+0

E l'hai fatto prima di chiamare la funzione? – Matthias

+0

@Matthias: No l'ho fatto all'interno della funzione. È sbagliato? – Deepu

1

È necessario definire gli array nelle funzioni. E poi aggiungere ad esso. arr1 = [] definisce un array vuoto.

arr1[k] = 2 

tenta di modificare il valore all'indice k. Pertanto, è necessario inizializzarlo a una certa dimensione o aggiungerlo alla matrice vuota (utilizzando la funzione append).

Inoltre, se si desidera accedere gli array dal di fuori della funzione, si potrebbe desiderare di ritornare le matrici dalla funzione

+0

+1. Ma la mia idea era di usare l'indice per verificare la presenza di cifre da 0 a 9. – Deepu

+0

Il tuo primo ciclo non è un'inizializzazione a 0? usa arr1.append (0) invece dell'indicizzazione dopo aver creato l'array come arr1 = []. Oppure sostituire il ciclo con arr1 = [0] * 10, che crea una matrice vuota di 10 zeri. – nab

Problemi correlati