2017-03-09 60 views
0

该功能的目的是加密和解密文本信息的一小部分:Python的改变功能

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

是否有可能改变ord()调用,这样我就不必创建一个完全新功能?有点像str,我可以在每次运行函数时重新输入一个新字符串。

+0

什么shoukd的PROGRAMM到底如何呢? –

+0

正如您从3种截然不同的答案中可以看出的那样,您的问题与书面内容相当不清楚。考虑对其进行编辑以使其更加明显,正是您所期待的(一个好的开始是包括示例输入和期望的输出)。 – KernelPanic

回答

0

对不起,如果我没有正确解释这个问题;措辞有点混乱。我假设当你说“全新的功能”时,你的意思是“全新的循环”。如果你问是否有可能完全抛弃while循环,据我所知,这是不可能的。尽管可以使用for循环。

for i in range(len(str)): 
    message.append(ord(str[i])) 

再次,抱歉,如果我误解了你的问题。

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]


相关注:我改变了参数strmy_str,因为str是一个内置的功能,它的重新定义那些没有很好的理由从来没有很好的做法!

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]