根据Python中的用户输入执行特定功能

时间:2019-02-03 09:00:21

标签: python algorithm function hashlib

我正在制作一个python脚本,该脚本使用用户在使用hashlib的输入中指定的算法对字符串进行哈希处理。在对字符串进行哈希处理之后,无论用户选择哪种哈希算法,我都希望对其执行相同的操作。因此,我想为其创建一个函数,而不是重复代码,但不知道如何根据输入来更改内置的哈希函数。我的代码现在看起来像这样:

current_algorithm = input('Hash algorithm: ')    

if current_algorithm == 'md5':
    hashed = hashlib.md5(word).hexdigest()
    # Execute the same code here
elif current_algorithm == 'sha256':
    hashed = hashlib.sha256(word).hexdigest()
    # Execute the same code here 
elif current_algorithm == 'sha512':
    hashed = hashlib.sha512(word).hexdigest()
    # Execute the same code here

函数hashlib.algorithm(word).hexdigest()必须根据用户选择的算法进行更改。例如,如果用户选择sha512,则代码将如下所示:hashlib.sha512(word).hexdigest(),相反,如果用户选择md5,则代码将如下所示:hashlib.md5(word).hexdigest(),依此类推。但是,这些行下的代码完全相同,现在我将其重复3次,如果将来我将添加更多算法,可能还会重复多次。因此,如何使一个函数根据用户输入更改算法,而不必重复太多代码?我当时想利用论点,但不知道该如何解决。这是我的想法,但是由于您无法更改内置方法而无法使用:

def func(algorithm):
    hashlib.algorithm(word).hexdigest()
    # Execute the same code here

if current_algorithm == 'md5':
    func(current_algorithm)
elif current_algorithm == 'sha256':
    func(current_algorithm)
elif current_algorithm == 'sha512':
    func(current_algorithm)

然后,在每个if语句下,我将调用函数,并将用户输入(包含哈希算法)作为参数传递给该函数。

我希望问题很清楚,希望能对您有所帮助!

2 个答案:

答案 0 :(得分:1)

使用getattr

import hashlib

current_algorithm = input('Hash algorithm: ')    
try:
    hashed = getattr(hashlib, current_algorithm)(word).hexdigest()
except AttributeError:
    print('Invalid algorithm choice')

答案 1 :(得分:0)

您也可以像这样从if/else块中提取通用代码:

current_algorithm = input('Hash algorithm: ')    

if current_algorithm == 'md5':
    hashed = hashlib.md5(word).hexdigest()
elif current_algorithm == 'sha256':
    hashed = hashlib.sha256(word).hexdigest()
elif current_algorithm == 'sha512':
    hashed = hashlib.sha512(word).hexdigest()

# Execute the same code here (using hashed variable)