7

2 つの数値N1N2が同じ数字の順列であるかどうかを調べたいと思います。たとえば、123321は同じ数字の順列ですが、234とは違い123ます。私は専門家ではない問題を解決するために Python を使用しました。で使用IDLE Python GUIしていWindows 7ます。仕様はPython 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32.

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

次のコマンドを使用してファイルを保存し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で次の回答を確認しましたが、問題を解決できませんでした。

グローバル名の定義のヘルプ

Python での「global」キーワードの使用

私が信じていたのは、Python では変数を宣言する必要はなく、単に変数を使用できるということでした。この仮定について私は間違っていますか?

助言がありますか?ありがとうございました。

4

2 に答える 2

3

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

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

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

于 2013-05-02T08:16:03.537 に答える