2016-09-24 9 views
0

3桁の許可番号を文字列として受け取り、それが許可するアクセス権を返す関数decode(chmod)を書きたいと思います。 私は0番目の要素を要求しない限り動作しているようです。私は理由を理解できませんでした。Pythonリスト第0要素が混在します

def decode(chmod): 

    liste = [int(i)for i in str(chmod)] 


    chmod = ["None", "Execute only", "Write only", 
     "Write and Execute", "Read only", 
     "Read and Execute", "Read and Write", 
     "Read Write and Execute"] 

    for i in liste: 

     print chmod[i] 

    return liste 

print decode(043) 

答えて

1

043を引用符で囲む必要があります。「043」を試してください。 (あなたが整数を通過したいと仮定すると)

+0

おかげ -

strを変更してみてください。しかし、私は入力に関与するはずがありません。私はそれが動作するかどうかだけをテストしていました。 – janvar

+1

pythonが043を見ると、それは8進数の整数であると考えられます。あなたのデコード関数は、そのintgerを取得します。 str()を実行するのは、あなたが望むものではありません。 8進整数を渡したい場合は、それを8進文字列repに変換する必要があります。 (str()で十分ではありません)。 – sureshvv

+1

@grv:あなたが書いた説明はこう書いています: "3桁の許可番号**を文字列**として取ります"。しかし、あなたのテストでは、文字列を渡すことはありません。あなたは整数を渡しています。したがって、引用符の必要性。 –

1

043がベース8あなたは、したがってデコード機能の整数35を通過しているベース10において35と同じです。お返事のための>oct

liste = [int(i) for i in oct(chmod)[2:]] #Use [2:] in Py3, and [1:] in Py2 
+0

あるいは 'liste = oct(chmod)'だけで、 'for i in liste'は各シンボルを繰り返し処理します。 – AArias

+0

'oct(chmod)[2:]'は '0o'という接頭辞を切り捨てたいと思うかもしれません。または、おそらく 'format(chmod、 '03o')'を使って、常に3桁の8進文字列を得るようにします。 –

+0

@ MarkDickinson:ありがとう、私はPy3では '043'、Py3では' 043 'であることを忘れました。私の答えを更新しました。 :) – SuperSaiyan

関連する問題