Python 3中的另一个交替大小写字符串。+

时间:2017-03-21 22:09:10

标签: python loops case uppercase lowercase

我是Python的新手,我正在尝试理解如何操纵字符串。

我想要做的是通过删除空格并将案例从上到下交替来改变字符串,IE“这比我想象的要难”到“ThIsIsHaRdErThAnItHoUgHtItWoUlDbE”

我拼凑了一个代码来删除空格(从这里大量借用):

string1 = input("Ask user for something.")
nospace = ""
for a in string1:
      if a == " ":
         pass
      else:
         nospace=nospace+a

......但是我无法绕过帽子/小写部分。在这个网站上有几个类似的问题,我已经尝试修改其中一些,没有任何乐趣。我意识到我需要定义一个范围并迭代它,但这就是我画一个空白的地方。

for c in nospace[::]:
    d = ""
    c = nospace[:1].lower()
    d = d + c
    c = nospace[:1].upper
print d

我所得到的只是一个V列。我显然错了。有人可以建议在哪里?提前谢谢。

3 个答案:

答案 0 :(得分:2)

这是一种可爱的方式:

>>> s = "This is harder than I thought it would be"
>>> from itertools import cycle
>>> funcs = cycle([str.upper, str.lower])
>>> ''.join(next(funcs)(c) for c in s if c != ' ')
'ThIsIsHaRdErThAnItHoUgHtItWoUlDbE'
>>>

或者,正如摩西在评论中所建议的那样,您可以使用str.isspace,它不仅可以处理单个空格' '

>>> ''.join(next(funcs)(c) for c in s if not c.isspace())
'ThIsIsHaRdErThAnItHoUgHtItWoUlDbE'

这种方法只对字符串进行一次传递。虽然,两遍法可能足够高效。

现在,如果您使用nospace字符串开头,最好的方法是转换为某种可变类型(例如list)并使用切片分配表示法。它有点低效,因为它构建了中间数据结构,但在Python中切片是 fast ,所以它可能非常高效。最后你必须''.join,把它带回一个字符串:

>>> nospace
'ThisisharderthanIthoughtitwouldbe'
>>> nospace = list(nospace)
>>> nospace[0::2] = map(str.upper, nospace[0::2])
>>> nospace[1::2] = map(str.lower, nospace[1::2])
>>> ''.join(nospace)
'ThIsIsHaRdErThAnItHoUgHtItWoUlDbE'
>>>

答案 1 :(得分:0)

所以你的第二个循环是你打破它的地方,因为原始列表没有被缩短,c = nospace [:1]抓住字符串的第一个字符,这是唯一一个打印过的字符。所以解决方案如下。

string1 = str(input("Ask user for something."))

nospace = ''.join(string1.split(' '))

for i in range(0, len(nospace)):
    if i % 2 == 0:
        print(nospace[i].upper(), end="")
    else:
        print(nospace[i].lower(), end="")

还可以用ternary opperator替换if / else语句。

for i in range(0, len(nospace)):
    print(nospace[i].upper() if (i % 2 == 0) else nospace[i].lower(), end='')

使用枚举作为评论

的最终方式
for i, c in enumerate(nospace):
    print(c.upper() if (i % 2 == 0) else c.lower(), end='')

答案 2 :(得分:0)

你正试图一次做所有事情。别。将您的计划分解为步骤。

  1. 阅读字符串。
  2. 从字符串中删除空格(如@ A.Sherif刚演示here
  3. 逐字逐句查找字符串。如果角色处于奇数位置,请将其转换为大写。否则,转换为小写。