【问题标题】:Capitalize every 3rd letter in a string - Python [closed]将字符串中的每个第三个字母大写 - Python [关闭]
【发布时间】:2018-01-03 20:55:44
【问题描述】:

我刚刚开始学习 Python,所以请多多包涵。我的数学知识也有点不稳定。我可以将单个单词或字符串中的第一个单词大写。我遇到的问题是我需要将字符串中的每个第三个字母大写。我需要把它作为一个函数来做。 我用过类似的东西,但只能用这个来改变一个单词的字母,而不是每 3 个。

x = "string"
y = x[:3] + x[3].swapcase() + x[4:] 

有一个使用的示例模板

if i in phrase (len(phrase))

但我不确定它是如何工作的。

我想要一个输出来显示类似“this tExtIng fuNctIon”的内容

提前感谢您的帮助。

【问题讨论】:

  • 字符串中的空格怎么办?它们是否被忽略或跳过?
  • 您的预期结果不一致 - 直到 fuNctIon 它似乎忽略了空格,但如果它忽略了空格,它应该是 FunCtiOn
  • @zwer 操作非常清楚:“我需要将字符串中的每个第三个字母大写”。请不要提出OP没有提到的新要求!
  • @alfasin 他的例子不清楚,因为它大写了第 3、6、9、14 和 17 个字母。
  • @alfasin - space 从技术上讲不是字母,所以他的问题不清楚,尤其是根据他的示例字符串。

标签: python string capitalize


【解决方案1】:

你可以从一个数组中取出一个 stride 切片,这样可以产生漂亮的 Pythonic 几行代码:

s = "thisisareallylongstringwithlotsofletters"  

# convert to list
a = list(s)

#change every third letter in place with a list comprehension
a[2::3] = [x.upper() for x in a[2::3]]

#back to a string
s = ''.join(a)

# result: thIsiSarEalLylOngStrIngWitHloTsoFleTteRs

不清楚你想要什么空格 - 这会将它们视为字符。

【讨论】:

    【解决方案2】:

    尝试应用一些split,和一个lambda,如下所示,然后join

    >>> x = "this texting function"
    >>> " ".join(map(lambda w: w[:2] + w[2].swapcase() + w[3:], x.split()))
    'thIs teXting fuNction'
    

    如果你不是 lambda 的粉丝,那么你可以写一个这样的方法

    >>> def swapcase_3rd(string):
    ...     if len(string) >3:
    ...             return  string[:2] + string[2].swapcase() + string[3:]
    ...     if len(string) == 3:
    ...             return  string[:2] + string[2].swapcase()
    ...     return string
    ...
    >>> x = "this texting function"
    >>> " ".join(map(swapcase_3rd, x.split()))
    'thIs teXting fuNction'
    

    【讨论】:

      【解决方案3】:

      如果你不关心字母和空格:

      ''.join(phrase[i-1] if i % 3 or i == 0 else phrase[i-1].upper() for i in range(1, len(phrase) + 1))
      

      如果你只想计算字母:

      new_phrase = ''
      phrase = "here are some words"
      counter = 0
      for c in phrase:
          if not c.isalpha():
              new_phrase += c
          else:
              counter += 1
              if not counter % 3:
                  new_phrase += c.upper()
              else:
                  new_phrase += c
      

      由于您的示例显示您使用swapcase() 而不是upper(),因此您只需在此代码中将upper() 替换为swapcase() 即可实现该功能,如果这是您想要的。

      【讨论】:

        【解决方案4】:
        x = "string"
        z = list(x)
        for x in range(2,len(z),3): # start from 3rd (index2) and step by 3  
          z[x] = z[x].upper()
        x = ''.join(z)
        print x
        

        输出:字符串

        【讨论】:

          【解决方案5】:

          由于您想要每个第 3 个字母而不仅仅是第 3 个字母,我们需要迭代字母并根据字符的位置生成结果:

          def cap_3rd(word):
              result = ""
              for i in range(1, len(word) + 1):
                  if i % 3 == 0:
                      result += word[i-1].upper()
                  else:
                      result += word[i-1]
              return result
          
          
          word = "thisisaverylonglongword"
          print(cap_3rd(word))  # thIsiSavEryLonGloNgwOrd
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-04-05
            • 1970-01-01
            • 2022-08-23
            • 2013-03-29
            • 1970-01-01
            • 1970-01-01
            • 2018-10-24
            • 2017-03-20
            相关资源
            最近更新 更多