2016-11-08 16 views
-2

Ich habe Antworten hier gesucht und versucht, sie zu implementieren, aber ich denke, dass es ein kleines Detail fehlt, das ich vermisse. Ich habe einen sehr kurzen Python-Code für ein Programm, das die Initialen mit den Perioden einer Personeneingabe (für ihren vollen Namen) zurückgeben soll. So ist zum Beispiel Eingangs Atticus Leonard Beasley und Ausgabe solltePython-Code, .rstrip funktioniert nicht?

A.L.B. 

sein, aber stattdessen bin ich immer:

A. 
L. 
B. 

Hier ist mein Code:

def main(): 

    full_name = input("Enter your first, middle, and last name: ") 

    for ch in full_name: 
     if ch.isupper(): 
      ch = ch.rstrip('\n') 
      print (ch,'.', sep='') 

main() 
+2

zu schreiben Wenn 'ch'' 'A'' ist, was erwarten Sie' 'A'.strip (' \ n ') 'zu Sein? –

+0

'für ch in full_name' sollte niemals ein' \ n' als 'ch' haben, da das' input' alle Eingaben bis zum Zeilenumbruch übernimmt –

+0

Ich denke, du verkomplizierst die Dinge. Dies sind die Schritte, die Sie benötigen: Teilen Sie die Eingabe mit 'split', verwenden Sie die Indizierung, um das erste Zeichen jedes Wortes zu erhalten, verwenden Sie '.'. Join', um diese zusammenzufügen –

Antwort

0

FYI, die Sie tun können dies unter Verwendung von split und join:

def main(): 

    full_name = input("Enter your first, middle, and last name: ") 
    initials = [] 

    for name in full_name.split(): 
     initials.append(name[0]) 

    print('.'.join(initials) + '.') 

main() 

Oder mit Liste Verständnis:

def main(): 

    full_name = input("Enter your first, middle, and last name: ") 
    print('.'.join(name[0] for name in full_name.split())+'.') 

main() 
+0

Sie haben vergessen, die Funktion '.split()' zu full_name im Listenverständnisbeispiel hinzuzufügen. –

+0

@ MaxChrétien Danke! –

0

Ich glaube, Sie auf diese Weise in einer einfachen und „mehr pythonic“ tun können.

full_name = input("Enter your first, middle, and last name: ") 

print(''.join([ch[0].upper() + '.' for ch in full_name.split()])) 

ERKLÄRUNGEN

Statt eine for Schleife über jeden Buchstaben des Namens zu tun, Sie split() Funktion sicher sein können, ohne dass die zusätzlichen Leerzeichen der einzelnen Worte kümmerten.

sentence = "hello world" 

for ch in sentence.split(): 
    print(ch) # hello 
    break 

Nun versuchen Sie, um zu überprüfen, ob der erste Buchstabe ein uppercase ist, aber wenn der Benutzer seinen Namen ohne uppercase eingeben, Ihre Funktion funktioniert nicht. Eine einfachere Lösung wird den ersten Buchstaben des Wortes ch[0] und automatisch hinzufügen, ein uppercase zu extrahieren sein: ch[0].upper()

Vielleicht ist die Einzeiler Lösung ist verwirrend, aber die meisten der Python-Entwickler verwenden list comprehension über for Schleifen, wenn die Lösung ist einfach lesbar.

EDIT

Eine weitere Sache, auch wenn Sie die Initialen eines Namens eine einfache Funktion wie Print schreiben, sollten Sie immer entsprechend Schreibtests.

Ein guter Weg zu starten ist, doctests zu verwenden, weil es Sie zwingt zu beschreiben, was Ihre Funktion tut. Selbst wenn Sie denken, dass es eine Verschwendung von Zeiten ist, hilft es, viele Probleme zu überwinden, wenn Ihr Programm größer wird. Ich würde Ihnen bitte helfen, wenn Sie versuchen möchten, Ihre erste doctest