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

Execute specific function based on user input in Python

我正在制作一个 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 语句下,我将调用该函数并将用户输入(包含哈希算法)作为参数传递给它。

我希望问题很清楚,如果有任何帮助,我们将不胜感激!

您也可以像这样简单地从 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)

使用getattr:

import hashlib

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