2016-11-14 2 views
-1

Was möchte ich tun?Wie man in Python mehrmals eine Funktion ausspucken kann?

Ich möchte ein Palindrom in Form einer Pyramide haben. Ich kann die untere Ebene der Pyramide mit meinem Code erreichen, aber ich weiß nicht, wie man eine for-Schleife formt, die x Zeilen mit einem Palindrom in Form einer Pyramide ausspuckt.

Beispiel:

a 
aba 
abcba 
abcdcba 
abcdedcba 

und so weiter ...

Mein Code:

end_letter = 0 # is this correct? 

def test_palindrome(end_letter): 
    print call_palindrome(end_letter) + call_palindrome_second_part(end_letter) 

def call_palindrome(end_letter): 

    letters_from_a_to_y = ""   

    for letter in range(97,end_letter): 
     letters_a_to_y += chr(letter) 

    return(letters_a_to_y) 

def call_palindrome_second_part(end_letter): 

    letters_y_to_a = "" 

    for letter in range(end_letter,96,-1): 
     letters_y_to_a += chr(letter) 

    return(letters_y_to_a) 

test_palindrome(end_letter) 

Wie kann ich diesen Code erhalten zu arbeiten? Was mache ich falsch und was vermisse ich?

+2

'end_letter' nicht initialisiert wird, bevor Sie es benutzen, ich vermute, Sie so etwas wie' end_letter = 98' tun müssen, bevor Sie anrufen 'test_palindrome (end_letter)' – depperm

+1

Was ist 'end_letter' in' test_palindrome (end_letter) 'an der Unterseite? Sie haben es nicht definiert, daher der Fehler. – davidism

+0

Was meinst du? Ich meine, muss ich das global definieren? Das ist eigentlich mein ganzes Problem: Ich weiß nicht, ob es global oder in irgendeiner Methode definiert werden sollte. Kann das bitte jemand erklären? – Siyah

Antwort

1

Es folgt die korrigierte Programm:

def palindromeGen(end_letter): 
    print(call_palindrome(end_letter) + call_palindrome_second_part(end_letter)) 

def call_palindrome(end_letter): 

    letters_a_to_y = ""   

    for letter in range(97,end_letter): 
     letters_a_to_y += chr(letter) 

    return(letters_a_to_y) 

def call_palindrome_second_part(end_letter): 

    letters_y_to_a = "" 

    for letter in range(end_letter,96,-1): 
     letters_y_to_a += chr(letter) 

    return(letters_y_to_a) 

def test_palindrome(ch): 
    for i in range(ord('a'), ord(ch)+1): 
     palindromeGen(i) 

test_palindrome('e') 

Erläuterung:

  • Bug in call_palindrome(): letters_from_a_to_y --> letters_a_to_y
  • end_letter ist ein Argument, können Sie es als eine Variable geliefert. Entweder geben Sie ihm den Wert (zB ord('e')) oder weisen denselben zu.
  • Sobald Sie in der Lage, eine Zeile zu produzieren, können Sie es über mehrere Zeilen durchlaufen. Ich habe Ihre test_palindrome() in konvertiert und eine neue für diesen Prozess codiert.
+0

Danke, macht jetzt Sinn! – Siyah

1

Sie sind verwirrt darüber, wie eine Funktion aufgerufen wird.

Definieren einer Funktion:

def giveValue(x): 
    return(x) 

Aufruf einer Funktion:

giveValue(4) 

OUTPUT: 4 

oder:

a = 4 
giveValue(a) 

OUTPUT: 4 
+0

Danke! Ja, das bin ich wirklich. Upvoted Sie, merci! – Siyah

Verwandte Themen