2017-03-09 61 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]