此功能的目的是加密和解密文本消息:
def program(str):
i = 0
message = []
while i < len(str):
message.append(ord(str[i]))
i += 1
print(message)
program (text)
是否可以更改ord()
来电,这样我就不必创建全新的功能了?类似于str
,我每次运行该函数时都可以重新输入一个新字符串。
答案 0 :(得分:1)
我相信我明白你的意思。您希望能够调用program
,以便它对字符串中的每个字符运行ord
,但您也希望能够在您的每个字符上运行(例如)chr
字符串,而不必创建一个名为program_chr
的全新函数。
令人高兴的是,Python支持first-class functions,所以这绝对是可能的。您可以将函数作为参数传递给program
,就像传递字符串一样容易。
def program (my_str, my_fn):
i = 0
message = []
while i<len(my_str):
message.append(my_fn(my_str[i]))
i += 1
print(message)
program("my_string", ord)
此输出[109, 121, 95, 115, 116, 114, 105, 110, 103]
,ord
没有出现program
!
您可以使用任何功能,包括您自己定义的功能:
def silly_fn (char):
return 12
program("my_string", silly_fn)
这会输出[12, 12, 12, 12, 12, 12, 12, 12, 12]
。
相关说明:我已将参数str
更改为my_str
,因为str
是一个内置函数,如果没有充分理由重新定义这些函数绝不是好习惯!
答案 1 :(得分:0)
对不起,如果我没有正确解释问题;措辞有点令人困惑。我假设当你说'#34;全新的功能&#34;时,你的意思是&#34;全新的循环&#34;。如果你问是否可以完全抛弃while循环,据我所知,这是不可能的。但是可以使用for循环。
for i in range(len(str)):
message.append(ord(str[i]))
再次,抱歉,如果我误解了你的问题。
答案 2 :(得分:0)
你的问题不是很明确,但你看起来像这样吗?
def program (str):
i, j = 0, 0
message = []
for i in range(len(str)):
while j<len(str[i]):
message.append(ord(str[i][j]))
j += 1
print(message)
text1 = 'This is test1'
text2 = 'This is test2'
text3 = 'This is test3'
text4 = 'This is test4'
str_list = [text1,text2,text3,text4]
program (str_list)
此输出
[84, 104, 105, 115, 32, 105, 115, 32, 116, 101, 115, 116, 49]