Python社区  »  Python

python:将字符串转换成所有偶数字母都大写,奇数字母都小写

Raghu • 1 月前 • 45 次点击  

我希望能够在接受函数中转换字符串并返回一个结果字符串,其中所有偶数字母都是大写,奇数字母都是小写。例如, "europe" 会变成 "eUrOpE" 是的。下面的代码在第3行抛出语法错误。发生了什么?

       def myfunc(mystring):
             for i, c in enumerate(mystring):
                  if i%2 = 0:
                        c = c.upper()
                  else:
                        c = c.lower()
                 newstring = c + c
             return newstring
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46662
 
45 次点击  
分享到微博
文章 [ 4 ]  |  最新文章 1 月前
han solo
Reply   •   1 楼
han solo    1 月前

你只需要理解和 join 就像,

>>> x = 'foobar'
>>> ''.join(c.lower() if idx % 2 == 0 else c.upper() for idx, c in enumerate(x))
'fOoBaR'
>>> def myfunc(string):
...   return ''.join(c.lower() if idx % 2 == 0 else c.upper() for idx, c in enumerate(string))
... 
>>> myfunc('foobar')
'fOoBaR'
>>> 

还有,做事情的方式也很有趣:)[不要这样做]

>>> x
'foobar'
>>> # we can make use of slice awesomeness of iterables :)
>>> x[::2] # get the even parts
'foa'
>>> x[1::2] # get the odd parts
'obr'
>>> ''.join(a+b for a,b in zip(x[::2].lower(), x[1::2].upper()))
'fOoBaR'
Kevin Eaverquepedo
Reply   •   2 楼
Kevin Eaverquepedo    1 月前

一种更像蟒蛇的写作方式是:

def modify_s(s):
    new_s = ""
    for i,c in enumerate(s):
        new_c = c.upper() if i % 2 else c.lower()
        new_s += new_c
    return new_s
Alec Alameddine
Reply   •   3 楼
Alec Alameddine    1 月前

使用比较运算符( == ),而不是赋值运算符( = )以下内容:

if i%2 == 0:

不过,您可以通过使用0的隐式错误来简化此操作:

if not i%2:
Nick Reed
Reply   •   4 楼
Nick Reed    1 月前

那应该是 i%2 == 0 -你的任务是 = ,与 == 是的。

另外,如果这个条件是真的,你需要 c 成为 c.lower() ,反之亦然-现在您的代码将返回“europe”,因为数组在python中是零索引的。

最后, newstring 将只保存您现在所写的最后一个字母的两个副本,因为每次完成for循环时,都会用 c+c 是的。请改为:

def myfunc(mystring):
  newstring = ""
  for i, c in enumerate(mystring):
      if i%2 == 0:
            c = c.lower()
      else:
            c = c.upper()
      newstring = newstring + c
  return newstring

print(myfunc('hello'))

Try it here!