0

APythonを使用して単純なパスワードジェネレーターを作成しようとしています.大文字、小文字a$数字#、記号の次の形式でフィードするパターンを読み取ります。パターンはコマンド ライン引数を介して指定され、出力はsys.exit()メソッドによって返されます。

何らかの理由でスクリプトが機能していません。問題ないように見えますが、何が問題なのかわかりません。ターミナル ウィンドウに空白行が出力されます。

#!/usr/bin/env python
# IMPORTS
import os
import sys
import random

alc = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
auc = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
num = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
sym = ["!", "#", "%", "&", "?", "@", "(", ")", "[", "]", "<", ">", "*", "+", ",", ".", "~", ":", ";", "=", "-", "_", "\\", "/"]

pattern = list(sys.argv[1])
password = ""

# PROCESSING

for x in pattern:
    if x == "A":
        random.shuffle(auc)
        password.join(auc[0])
    elif x == "a":
        random.shuffle(alc)
        password.join(alc[0])
    elif x == "$":
        random.shuffle(num)
        password.join(num[0])
    elif x == "#":
        random.shuffle(sym)
        password.join(sym[0])
    else:
        password = "ERROR: Invalid Syntax."
        break

# END PROCESSING

sys.exit(password)
4

3 に答える 3

1

password = password.join(alc[0])または使用する必要がありますpassword += alc[0]

A.join(b)変わりませんA。と同じ新しい文字列を作成してA+b返しますが、A変更されません。

于 2013-07-21T06:07:51.350 に答える
1

やりたいことのはるかに単純なバージョンを次に示します。

import os
import sys
import random
import string

vals = {'a': string.ascii_lowercase,
        'b': string.ascii_uppercase,
        '$': '0123456789',
        '#': '!#%&?@()[]<>*+,.~:;=-_\\/',
       }

pattern = sys.argv[1]

password = ''.join(random.choice(vals[c]) for c in pattern) # assumes that there are no invalid characters in the input

password = ''.join(random.choice(vals[c][0]) for c in pattern if c in vals) # takes only the valid characters in the input

random.shuffleリスト全体をシャッフルする、比較的コストのかかる操作です。一方、random.choiceイテラブル内のランダムな要素を選択します。

お役に立てれば

于 2013-07-21T06:20:12.793 に答える