2013-05-02 5 views
7

2つの数字が同じ数字の順列であるかどうかを調べたいのですが、N1N2は同じ数字の順列です。例えば、123321は同じ桁の順列であり、234123はそうではありません。私は、私が専門家ではない問題を解決するためにPythonを使用しました。 私は、をWindows 7に使用しています。仕様はPython 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32です。Pythonのグローバル名

ザPythonコードを以下に示し、

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 

Iは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

Pythonでは、あなたは、単にそれらを使用することができます代わりに、任意の変数を宣言する必要はありませんということでした。私はこの仮定について間違っていますか?

ありがとうございました。

+1

()はSTR(n)は 'ソートを検討する必要があります==ソート(STR(メートル)) 'これはちょっとgrocに簡単です –

+0

@Jon Clements:簡単な解決法をありがとう:) – Deepu

答えて

3

ここでグローバル値を使用する必要はありません。すべてが関数内に含まれている必要があります。

問題を追加する前に、arr1またはarr2を定義しないことが問題です。その関数に、s1s2k、およびflと一緒に、それらの関数をと定義する必要があります。

編集あなたのコードは非常に不快であると付け加えるべきです。カウンタをインクリメントしているこれらのwhileループはすべてforループ(for k in range(10)など)に置き換える必要がありますが、最初のループは必要でもありません。arr1 = [0] * 10arr2と同じものが必要です。

+0

+1。配列を定義するにはどうすればよいですか?私はarr1 = []とarr2 = []を試しました。 – Deepu

+0

あなたは関数を呼び出す前にこれをしましたか? – Matthias

+0

@Matthias:いいえ私は関数の中でそれをやった。違いますか? – Deepu

1

関数で配列を定義する必要があります。そしてそれに追加してください。 arr1 = []は空の配列を定義します。

arr1[k] = 2 

インデックスkの値を変更しようとします。 したがって、それを特定のサイズに初期化するか、または空の配列に追加するか(append関数を使用)。あなたが機能外部からの配列にアクセスしたい場合

また、あなたが関数から配列を返すようにしたいかもしれません

+0

+1。しかし私の考えは、0から9までの数字の存在をチェックするためにインデックスを使用することでした。 – Deepu

+0

最初のループが0に初期化されていませんか?配列をarr1 = []として作成した後で、索引作成の代わりにarr1.append(0)を使用してください。または、ループをarr1 = [0] * 10で置き換えると、10個のゼロの空の配列が作成されます。 – nab

関連する問題