2016-03-27 8 views
2

Ich möchte die Zeichen einer Zeichenfolge von Kleinbuchstaben in Großbuchstaben ändern. Unter meinem Code ist meine tatsächliche Ausgabe "a": Könnten Sie mir bitte sagen, wo ich falsch liege und mir erklären warum? Vielen Dank im VorausPython: Alternate Groß- und Kleinbuchstaben in einer Zeichenfolge

test = "AltERNating" 

def to_alternating_case(string): 
    words = list(string) 
    for word in words: 
     if word.isupper() == True: 
      return word.lower() 
     else: 
      return word.upper() 

print to_alternating_case(test) 
+0

Der Grund, warum der Code nicht funktioniert, ist, dass „Rückkehr "wird die aktuelle Funktion verlassen ('to_alternating_case()'). Wenn Sie .swapcase() für Bildungszwecke implementieren möchten, mutieren Sie die "words" -Liste, anstatt beim ersten Zeichen zurückzukehren. – folkol

Antwort

8

Es ist wie Ihr wünschen sieht den Fall dieser Zeichenfolge zu invertieren, versuchen Sie dies:

>>> 'AltERNating'.swapcase() 
'aLTernATING' 
1

Das ist, weil Ihre Funktion nur das erste Zeichen zurückgibt. Ich meine return Schlüsselwort bricht Ihre for Schleife.

Beachten Sie auch, dass es nicht notwendig ist, die Zeichenfolge in eine Liste zu konvertieren, indem Sie words = list(string), da you can iterate over a string wie Sie mit der Liste ausgeführt haben.

Wenn Sie sich für eine algorithmische Lösung anstelle des swapcase() ändern Sie dann Ihre Methode diese Art und Weise statt suchen:

test = "AltERNating" 

def to_alternating_case(string): 
    res = "" 
    for word in string: 
     if word.isupper() == True: 
      res = res + word.lower() 
     else: 
      res = res + word.upper() 
    return res 


print to_alternating_case(test) 
1

Ihre Schleife iteriert über die Zeichen in der Eingabezeichenfolge. Es kehrt dann von der allerersten Iteration zurück. Daher erhalten Sie immer einen Rückgabewert von 1 Zeichen.

test = "AltERNating" 

def to_alternating_case(string): 
    words = list(string) 
    rval = '' 
    for c in words: 
     if word.isupper(): 
      rval += c.lower() 
     else: 
      rval += c.upper() 
    return rval  

print to_alternating_case(test) 
1

Sie, dass wie dies tun sollten:

test = "AltERNating" 

def to_alternating_case(string): 
    words = list(string) 
    newstring="" 
     if word.isupper() == True: 
      newstring+=word.lower() 
     else: 
      newstring+=word.upper() 
    return alternative 
print to_alternating_case(test) 
3

Es gibt zwei Antworten auf diese : eine leichte und eine harte.

Die leicht

Python eine eingebaute Funktion hat, das zu tun, ich nicht mehr genau, was es ist, aber etwas entlang der Linien von

string.swapcase() 

Die harte ein

Sie definieren Ihre eigene Funktion. Die Art und Weise, wie Sie Ihre Funktion erstellt haben, ist falsch, weil beim Iterieren über einen String Buchstabe für Buchstabe zurückkehrt und Sie den ersten Buchstaben einfach zurückgeben, anstatt die Iteration fortzusetzen.

def to_alternating_case(string): 
    temp = "" 
    for character in string: 
     if character.isupper() == True: 
      temp += character.lower() 
     else: 
      temp += word.upper() 
    return temp 
1

Sie das erste Alphabet zurückkehren, nachdem über das Wort abwechselnd Looping, die nicht das, was Sie erwarten, gibt es einige Vorschlag, wie Sie direkt Schleife über Zeichenfolge in Python können, anstatt sie zu konvertieren aufzulisten und Ausdruck, wenn <Variablenname> == True kann direkt vereinfacht werden, wenn <Variablenname>.Am mit Änderungen wie folgt:

test = "AltERNating" 

def to_alternating_case(string): 
    result = '' 
    for word in string: 
     if word.isupper(): 
      result += word.lower() 
     else: 
      result += word.upper() 
    return result 

print to_alternating_case(test) 

OR mit Liste Verständnis:

def to_alternating_case(string): 
    result =[word.lower() if word.isupper() else word.upper() for word in string] 
    return ''.join(result) 

OR mit Karte, Lambda:

def to_alternating_case(string): 
    result = map(lambda word:word.lower() if word.isupper() else word.upper(), string) 
    return ''.join(result) 
Verwandte Themen