2017-03-09 3 views
0

Der Zweck dieser Funktion zu verschlüsseln ist und eine SMS-Nachricht zu entschlüsseln:Python Wechsel ein kleiner Teil der Funktion

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

Ist es möglich, die ord() Aufruf zu ändern, damit ich nicht eine völlig neue erstellen müssen Funktion? So wie die str, wo ich jedes Mal, wenn ich die Funktion starte, eine neue Zeichenfolge eingeben kann.

+0

Was das Programm tun am Ende shoukd? –

+0

Wie Sie vielleicht anhand der 3 sehr unterschiedlichen Antworten feststellen können, ist Ihre Frage, wie geschrieben, ziemlich unklar. Erwäge es, es zu bearbeiten, um es offensichtlicher zu machen, genau nach was du suchst (ein guter Anfang ist, Beispieleingabe und gewünschte Ausgabe einzuschließen). – KernelPanic

Antwort

0

Tut mir leid, wenn ich die Frage nicht richtig interpretiert habe; Der Wortlaut ist ein wenig verwirrend. Ich gehe davon aus, dass Sie mit "komplett neue Funktion" "komplett neue Schleife" meinten. Wenn Sie fragen, ob es möglich ist, die while-Schleife vollständig zu entfernen, ist es meines Wissens nicht möglich. Es ist jedoch möglich, eine for-Schleife zu verwenden.

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

Nochmals, Entschuldigung, wenn ich Ihre Frage falsch interpretiert habe.

1

Ich glaube, ich verstehe, was Sie hier wollen. Sie möchten program aufrufen können, so dass ord für jedes Zeichen in Ihrer Zeichenfolge ausgeführt wird, aber Sie auch (chr) für jedes Zeichen in Ihrer Zeichenfolge ausführen möchten, ohne eine ganz neue Funktion namens program_chr zu erstellen.

Glücklicherweise unterstützt Python first-class functions, also ist dies definitiv möglich. Sie können eine Funktion einfach als Argument an program übergeben, genauso einfach wie Sie eine Zeichenfolge übergeben.

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) 

Diese gibt [109, 121, 95, 115, 116, 114, 105, 110, 103], ohne ord jemals in program erscheinen!

Sie können jede Funktion für diese, diejenigen, einschließlich Sie selbst definieren:

def silly_fn (char): 
    return 12 

program("my_string", silly_fn) 

Diese gibt [12, 12, 12, 12, 12, 12, 12, 12, 12].


Relevante Anmerkung: änderte ich den Parameter str zu my_str, weil str eine eingebaute Funktion ist, und es ist nie gut Praxis diejenigen ohne Grund neu zu definieren!

0

Sie Frage ist nicht sehr klar, aber suchen Sie so etwas?

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) 

Diese gibt

[84, 104, 105, 115, 32, 105, 115, 32, 116, 101, 115, 116, 49] 
Verwandte Themen