Swapping uppercase and lowercase in a string

寵の児 提交于 2020-01-03 14:01:23

问题


I would like to change the chars of a string from lowercase to uppercase.

My code is below, the output I get with my code is a; could you please tell me where I am wrong and explain why? Thanks in advance

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)

回答1:


If you want to invert the case of that string, try this:

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



回答2:


There are two answers to this: an easy one and a hard one.

The easy one

Python has a built in function to do that, i dont exactly remember what it is, but something along the lines of

string.swapcase()

The hard one

You define your own function. The way you made your function is wrong, because iterating over a string will return it letter by letter, and you just return the first letter instead of continuing the iteration.

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



回答3:


Your loop iterates over the characters in the input string. It then returns from the very first iteration. Thus, you always get a 1-char return value.

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)



回答4:


That's because your function returns the first character only. I mean return keyword breaks your for loop.

Also, note that is unnecessary to convert the string into a list by running words = list(string) because you can iterate over a string just as you did with the list.

If you're looking for an algorithmic solution instead of the swapcase() then modify your method this way instead:

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)



回答5:


You are returning the first alphabet after looping over the word alternating which is not what you are expecting. There are some suggestions to directly loop over the string rather than converting it to a list, and expression if <variable-name> == True can be directly simplified to if <variable-name>. Answer with modifications as follows:

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 using list comprehension :

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

OR using map, lambda:

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



回答6:


You should do that like this:

test = "AltERNating"

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



回答7:


contents='abcdefgasdfadfasdf'
temp=''
ss=list(contents)
for item in range(len(ss)):
    if item%2==0:
        temp+=ss[item].lower()
    else:
        temp+=ss[item].upper()

print(temp)

you can add this code inside a function also and in place of print use the return key




回答8:


string=input("enter string:")
temp=''
ss=list(string)
for item in range(len(ss)):
    if item%2==0:
        temp+=ss[item].lower()
    else:
        temp+=ss[item].upper()
print(temp)



回答9:


Here is a short form of the hard way:

alt_case = lambda s : ''.join([c.upper() if c.islower() else c.lower() for c in s])
print(alt_case('AltERNating'))

As I was looking for a solution making a all upper or all lower string alternating case, here is a solution to this problem:

alt_case = lambda s : ''.join([c.upper() if i%2 == 0 else c.lower() for i, c in enumerate(s)])
print(alt_case('alternating'))


来源:https://stackoverflow.com/questions/36247173/swapping-uppercase-and-lowercase-in-a-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!