社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Raghu • 5 年前 • 2873 次点击  

我希望能够在接受函数中转换字符串并返回一个结果字符串,其中所有偶数字母都是大写,奇数字母都是小写。例如, "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
 
2873 次点击  
文章 [ 4 ]  |  最新文章 5 年前
han solo
Reply   •   1 楼
han solo    5 年前

你只需要理解和 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    5 年前

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

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    5 年前

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

if i%2 == 0:

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

if not i%2:
Nick Reed
Reply   •   4 楼
Nick Reed    5 年前

那应该是 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!