在字符串中交换大写和小写

问题描述 投票:5回答:9

我想将字符串的字符从小写更改为大写。

我的代码如下,我的代码输出是a;你能告诉我我错在哪里并解释原因吗?提前致谢

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)
python string python-2.x uppercase lowercase
9个回答
13
投票

如果要反转该字符串的大小写,请尝试以下操作:

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

3
投票

这有两个答案:简单的和艰难的。

这很简单

Python有一个内置的功能来做到这一点,我不完全记住它是什么,但有些东西沿袭

string.swapcase()

艰难的一个

您定义自己的功能。你创建函数的方式是错误的,因为迭代字符串将逐字母地返回它,你只需返回第一个字母而不是继续迭代。

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

1
投票

您的循环遍历输入字符串中的字符。然后它从第一次迭代返回。因此,您始终获得1-char返回值。

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
投票

那是因为你的函数只返回第一个字符。我的意思是return关键字打破你的for循环。

另外,请注意,通过运行words = list(string)将字符串转换为列表是不必要的,因为you can iterate over a string正如您对列表所做的那样。

如果您正在寻找算法解决方案而不是swapcase(),那么请改用您的方法:

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
投票

在循环切换单词后,您将返回第一个字母,这不是您所期望的。有一些建议直接循环字符串而不是将其转换为列表,表达式if <variable-name> == True可以直接简化为if <variable-name>。答案修改如下:

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)

或使用列表理解:

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

或者使用map,lambda:

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

1
投票

你应该这样做:

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)

0
投票
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)

您也可以在函数内添加此代码,并使用返回键代替print


0
投票
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)

0
投票

这是一种简短的形式:

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

当我正在寻找一个解决方案,使所有上部或所有下部字符串交替的情况下,这里是这个问题的解决方案:

alt_case = lambda s : ''.join([c.upper() if i%2 == 0 else c.lower() for i, c in enumerate(s)])
print(alt_case('alternating'))
© www.soinside.com 2019 - 2024. All rights reserved.