字符串中的替代字母 - 代码不起作用

时间:2018-04-25 12:38:04

标签: python string python-3.x uppercase lowercase

我正在尝试在大写和小写字母之间交替使用字符串。我目前的代码是:

def skyline (str1): 

    result = ''
    index = 0

    for i in str1:
        result  += str1[index].upper() + str1[index + 1].lower()
        index += 2

    return result

当我运行上面的代码时,我收到一条错误String index out of range。我该如何解决这个问题?

8 个答案:

答案 0 :(得分:2)

使用join + enumerate下面的一种方法:

s = 'asdfghjkl'
''.join(v.upper() if i%2==0 else v.lower() for i, v in enumerate(s))
#'AsDfGhJkL'

答案 1 :(得分:0)

这是我重写逻辑的方式:

from itertools import islice, zip_longest

def skyline(str1): 

    result = ''
    index = 0

    for i, j in zip_longest(str1[::2], islice(str1, 1, None, 2), fillvalue=''):
        result += i.upper() + j.lower()

    return result

res = skyline('hello')

'HeLlO'

<强>解释

  • 使用itertools.zip_longest来迭代字符串的块。
  • 使用itertools.islice提取每个第二个字符,而不构建单独的字符串
  • 现在只需遍历压缩的iterable并像以前一样追加。

答案 2 :(得分:0)

尝试for i in range(len(str1)):并在代码中将index替换为i。之后,你可以做到

if i % 2 == 0:    result += str1[i].upper()
else:     result += str1[i].lower()

答案 3 :(得分:0)

对于输入字符串中的每个字符,您将索引递增2.这就是您越界的原因。

为此目的尝试使用字符串长度

答案 4 :(得分:0)

您不会检查您的索引是否仍然是字符串的大小。

有必要添加一个条件来验证i的值是否总是小于字符串并且i%2 == 0并且i == 0以将第1个字符放在Upper

i%2 == 0我们将在两个

上应用上面的一个字母
for i, __ in enumerate(str1):
    if i+1 < len(str1) and i % 2 == 0 or i == 0:
        result  += str1[i].upper() + str1[i + 1].lower()

答案 5 :(得分:0)

我尝试在代码中尽可能地修改,以便您可以正确理解。我刚刚在步骤2中添加了一个for循环,这样你就不会有索引超出范围。对于奇数长度字符串的最终字符,我单独处理。

def skyline (str1): 

    result = ''
    length = len(str1)
    for index in range(0, length - 1, 2):
        result  += str1[index].upper() + str1[index + 1].lower()

    if length % 2 == 1:
        result += str1[length - 1].upper()

    return result

答案 6 :(得分:0)

您可以使用以下代码:

def myfunc(str1):
    result=''
    for i in range(0,len(str1)):
        if i % 2 == 0:    
            result += str1[i].upper()
        else:     
            result += str1[i].lower()
    return result

答案 7 :(得分:0)

在您的代码中,您一次得到2个单词,因此您应该将循环除以2,因为循环取决于您的输入字符串,因此可以使诸如peak之类的变量等于len(您的输入输入),然后peak = int(peak / 2)会解决您的问题

def func(name):
counter1 = 0
counter2 = 1
string = ''
peak = len(name)
peak = int(peak/2)



for letter in range(1,peak+1):
    
    string += name[counter1].lower() + name[counter2].upper()

    counter1 +=2
    counter2 +=2

return string