Перейти на верхний и нижний регистр в python

Я пытался запустить эту программу, но по какой-то причине строка меняется только на нижний регистр. Гласные не превращаются в нижний регистр. Любые идеи о том, почему?

Спасибо!

def changeCaps(string):
        i = 0
        while i < len(string):
            if string[i] == 'a' or string[i] == 'e' or string[i] == 'i' or string[i] == 'o' or string[i] =='u':
                print(string[i].upper())
                i = i + 1
            else:
                print(string[i].lower())
                i = i + 1
    changeCaps("AlbErT") 

person albad    schedule 11.09.2014    source источник
comment
Вы должны четко понимать, что именно вы хотите, чтобы ваша программа делала. В вашем случае, AlbErT, он всегда возвращается к else, кстати.   -  person doubleo    schedule 11.09.2014
comment
Почему он всегда возвращается к другому?   -  person albad    schedule 11.09.2014
comment
В АльбЭрТ нет строчных гласных. Попробуйте changeCaps(aeiou) и увидите разницу.   -  person doubleo    schedule 11.09.2014


Ответы (1)


То, что doubleo сказал в своих двух комментариях, правильно: поскольку A и E в AlbErt уже написаны с большой буквы, они не равны строчным a и e, и поэтому они сделаны строчными вместе со всеми согласными. если вы хотите изменить регистр любой набранной буквы, для этого потребуется другая процедура. Что-то еще в этом духе:

def changeCaps(string):
        i = 0
        while i < len(string):
            if string[i].islower():
                print(string[i].upper())
                i = i + 1
            else:
                print(string[i].lower())
                i = i + 1
changeCaps("AlbErT")

Это приведет к тому, что любые прописные буквы станут строчными, а любые строчные буквы станут прописными, и независимо от того, является ли это гласной или согласной, это не будет иметь никакого отношения к этому.

Кроме того, почему бы вместо этого не использовать цикл for? Это будет работать так же хорошо и займет меньше строк кода:

def changeCaps(string):
    for i in range(len(string)):
        if string[i].islower():
            print(string[i].upper())
        else:
            print(string[i].lower())
changeCaps("AlbErT")

Итак, он сохраняет только две строки, но, на мой взгляд, более разумно использовать цикл for. В любом случае результирующий вывод будет:

aLBeRt

В заключение, как отметил Антон, вам даже не нужен числовой указатель, просто перейдите по строке.

def changeCaps(string):
    for c in string:
        if c.islower():
            print(c.upper())
        else:
            print(c.lower())
changeCaps("AlbErT")

(Спасибо, Антон!)

person PCGuyIV    schedule 11.09.2014
comment
Если вы выполняете цикл for, то зачем использовать индекс i? Вы можете зацикливаться непосредственно на символах в строке, например for c in string: .... - person Anton; 11.09.2014
comment
Хорошая точка зрения. Я забываю об этом. Я помню этот факт при использовании истинного списка, но почему-то ускользает из виду при работе со строками. Определенно лучший путь. - person PCGuyIV; 11.09.2014