2017-04-23 6 views
0

Kann jemand erklären, wie dieses Stück Code den ganzzahligen Wert von „shift-val“ weiß, so dass es es aus dem ASCII-Wert eines Zeichenseine Funktion mit zwei Parametern definiert

wird
alpha=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 


def encodeMessage(message,shift_val): 
    encodedMessage = "" 
    l = len(alpha) 
    length = len(message) 
    for i in range(0,length): 
     # ord returns ASCII value of character, we add shift_val to it and 
     subtract ASCII value of 'A' 
     x = ord(message[i])+shift_val- ord('A') 
     # x could exceed 26, we need to cycle back hence mod 26 is used. 
     x = x % 26 
     # add xth index alphabet to encoded message 
     encodedMessage += alpha[x] 

# return encodedMessage 
    return encodedMessage 


def main(): 
# message will be a string 
    message = "" 
    UserInput = input("Enter maximum 10 upper-case letters in one line to store: ") 
    lengthAlpha= len(alpha) 

    while not UserInput.isalpha() or len(UserInput) > 10 :    # message is not acceptable in case it's greater than ten or it isn't a letter 
     print (" No special characters numbers are allowed (maximum 10 letters) ") 
     UserInput = input("Enter maximum 10 upper-case letters in one line to store: ") 
    else: 
    message =UserInput 
    message = [element.upper() for element in message]                   
    move = int(input("How far do you wish to shift?: ")) 

    print('The encoded message is',encodeMessage(message, move)) 
main() 
+1

Dieser Code enthält einen Einrückungsfehler (ich nehme an, die 'return' sollte innerhalb der Funktion body sein), aber es sieht aus wie' shift_val' wird einfach in die Funktion übergeben, wenn es aufgerufen wird. Ist es das, wonach du fragst? – Chris

+0

Sie haben Recht, die Rückkehr sollte innerhalb des Funktionskörpers sein. ord (message [i]) nimmt den ASCII-Wert jedes Zeichens in der Nachricht, ord ('A') macht dasselbe für die alphabetische Liste. Was ist der numerische Wert, der davon subtrahiert wird, der als shift_val definiert ist? Tut mir leid, wenn die Frage schlecht klingt. –

+0

Der Wert, der von 'ord (message [i])' subtrahiert wird, ist der Wert, der in der Funktion als 'shift_val' übergeben wird. Vermutlich ist das ein numerischer Wert. Aber es gibt buchstäblich keine Möglichkeit, dies auf der Grundlage Ihrer Angaben zu beantworten. Vielleicht wird eine Zahl übergeben, vielleicht eine Zeichenkette, vielleicht ein beliebiges Objekt, vielleicht eine Liste oder ein Diktat, vielleicht »None«. Sie müssen uns zeigen, wie das heißt. – Chris

Antwort

0

Der Benutzer für eine gefragt subtrahiert zu "verschieben". Dieser Wert wird in einer Variable gespeichert move als eine ganze Zahl genannt:

move = int(input("How far do you wish to shift?: ")) 

dieser Wert in encode_message() übergeben wird, wo es mit dem shift_val Parameter gebunden ist:

print('The encoded message is',encodeMessage(message, move)) 

encodeMessage() kennt den Wert von shift_val weil es wird in die Funktion als Argument übergeben. In einem anderen Zusammenhang könnte shift_val irgendeinen anderen Wert haben; Es hängt ganz davon ab, wie die Funktion aufgerufen wird.

+0

Danke @Chris! Sie sagen, dass shift-val im Prinzip seinen Wert von der Benutzereingabe erhält, so dass die Funktion auch als geschrieben werden könnte; def encodeMessage (Nachricht, verschieben): x = ord (Nachricht [i]) + move-ord ('A') –

+0

@ EmreÇakır, nur wenn 'move' irgendwie auf' int gesetzt ist (Eingabe ("Wie weit Sie möchten verschieben ?: "))' im Rahmen der Funktion. Es muss immer noch z. indem Sie 'encodeMessage (message, move)' aufrufen, wie Sie es jetzt sind. Der Parameter 'move' in der Funktionsdeklaration und die Variable' move' außerhalb der Funktion haben keine Beziehung; Übergabe der Variable in die Funktion, wenn Sie sie aufrufen, bindet ihren Wert an den Parameter. – Chris

Verwandte Themen