Python改变了一小部分功能

时间:2017-03-09 04:27:52

标签: python

此功能的目的是加密和解密文本消息:

def program(str):
    i = 0
    message = []
    while i < len(str):
        message.append(ord(str[i]))
        i += 1
    print(message)
program (text)

是否可以更改ord()来电,这样我就不必创建全新的功能了?类似于str,我每次运行该函数时都可以重新输入一个新字符串。

3 个答案:

答案 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]