<分区>
我需要将这个 C 语言的函数转换为 Python:
void myencrypt(char password[],int mkey)
{
unsigned int i;
for(i=0;i<strlen(password);++i)
{
password[i] = password[i] - mkey;
}
}
我试过了,但是失败了...
def myencrypt(password, mkey):
i = 0
newpass = []
for i in range(len(password)):
newpass[i] = ord(password[i]) - mkey;
return newpass
有什么帮助吗?
C 代码正在就地修改 password
。因此,最接近的等价物是:
def myencrypt(password, mkey):
for i in range(len(password)):
password[i] = chr(ord(password[i]) - mkey)
假设 password
是字符的 list
,而不是字符串。
另外,请注意我正在对每个 ord(password[i]) - mkey
的结果调用 chr
,因为否则你将用一个数字——例如,myencrypt(['a'], 32)
会给你 [65]
而不是 ['A']
. (这在 C 中不是必需的,因为 65
和 'A'
在 C 中是相同的值。)
您更有可能希望使用一个字符串调用此函数,并返回一个字符串。您可以仍然使用 C 风格的就地功能来完成它,只需通过转换和转换回来:
def myencrypt(password, mkey):
newpass = list(password)
for i in range(len(newpass)):
newpass[i] = chr(ord(newpass[i]) - mkey)
return ''.join(newpass)
但是,这并不是一种非常 Pythonic 的做事方式。一个更惯用的解决方案是:
def myencrypt(password, mkey):
return ''.join(chr(ord(ch) - mkey) for ch in password)
这提出了一个更普遍的观点:除了在非常微不足道的情况下,尝试直接“将 C 代码转换为 Python”不是一个好主意。相反,弄清楚 C 代码的作用,然后编写新的 Python 代码,以最适合 Python 的方式完成相同的任务,而不是采用 C 代码的方式。