2016-03-27 22 views
2

Bir dizenin karakterlerini küçük harflerden büyük harflere değiştirmek istiyorum. Kodumun altında, gerçek çıktım "a" dır: lütfen bana nerede olduğumu söyler misin ve nedenini açıklar mısın? sizin işlevi yalnızca ilk karakteri döndürdüğü için var peşinPython: Bir dize içinde büyük ve küçük harfleri ayırma

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

kodunuzu çalışmıyor sebebi "dönüş olmasıdır "Geçerli işlevi ('to_alternating_case()') bırakacaktır. Eğitim amaçlı .swapcase() öğesini uygulamak istiyorsanız, ilk karakterde geri dönmek yerine "kelimeler" listesini değiştirin. – folkol

cevap

8

O dize davayı ters çevirmek için sizin istediğiniz gibi görünüyor, bu deneyin:

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

içinde teşekkürler. return anahtar kelimesi, for döngüsünü keser.

Ayrıca, words = list(string)'u çalıştırarak, bu listeyle yaptığınız gibi you can iterate over a string'u çalıştırarak dizgeyi bir listeye dönüştürmek için gereksiz olduğunu unutmayın. girdi dizesindeki karakter üzerinde

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

Sizin döngü yinelenir: yerine swapcase() algoritmik bir çözüm arıyorsanız

sonra onun yerine bu yolu yöntemi değiştirin. Daha sonra ilk iterasyondan döner. Böylece, her zaman 1-char dönüş değeri elde edersiniz.

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

Böyle gerçekleştirmeliyiz:

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

bu iki cevabı vardır : Kolay ve zor olanı.

kolay bir

Python bir bunu işlevinde inşa etti, ben tam olarak ne hatırlamıyorum ama

string.swapcase() 

sert bir

çizgisinde bir şey

Kendi işlevinizi tanımlarsınız. İşlevinizi yapma şekliniz yanlıştır, çünkü bir dize üzerinde yinelenen harfi harfi harfine döndürür ve yinelemeye devam etmek yerine ilk harfi döndürürsünüz.

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

Eğer bekliyoruz değildir kelimesinin ne alternatif üzerinde döngü sonra ilk alfabe dönüyor vardır doğrudan yerine dönüştürerek daha Python dize üzerinde döngü listelemek ve anlatım < eğer yapabilirsiniz gibi bazı öneri değişken adı > == Doğru, < değişken adı > ise, doğrudan doğruya basitleştirilebilir.değişikliklerle Ans şöyle:

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) 

VEYA liste kavrayışa:

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

VEYA kullanarak haritayı, lambda:

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