如何在字符串中大写偶数字母和小写奇数字母?

时间:2019-06-17 16:38:58

标签: python python-3.x

我正在创建一个接受字符串并返回匹配字符串的函数,其中每个偶数字母均为大写,每个奇数字母均为小写。该字符串仅包含字母

我尝试了一个for循环,使用if语句循环遍历字符串的长度,该语句检查索引是否偶数返回该索引的大写字母,以及索引是否为奇数以返回该索引的小写字母。 / p>

def my_func(st):
    for index in range(len(st)):
        if index % 2 == 0:
            return st.upper()
        else:
            return st.lower()

我希望偶数字母大写,奇数字母小写,但整个字符串我都只能大写。

11 个答案:

答案 0 :(得分:3)

您的代码中存在一些问题:

  • 当前,您正在从第一个索引本身的函数返回,即在执行index=0时从return st.lower()返回,因此该函数在遇到第一个索引并中断时会停止执行for循环

  • 执行st.lower()st.upper()会导致整个字符串大写/小写,而您想大写/小写单个字符

一种方法是遍历字符串,收集列表中所有修改过的字符,通过str.join将列表转换为字符串,然后在末尾返回结果

您还希望通过索引引用每个单独的字符。

def my_func(st):

    res = []
    #Iterate over the character
    for index in range(len(st)):
        if index % 2 == 0:
            #Refer to each character via index and append modified character to list
            res.append(st[index].upper())
        else:
            res.append(st[index].lower())

    #Join the list into a string and return
    return ''.join(res)

您还可以使用enumerate

遍历索引和字符
def my_func(st):

    res = []
    #Iterate over the characters
    for index, c in enumerate(st):
        if index % 2 == 0:
            #Refer to each character via index and append modified character to list
            res.append(c.upper())
        else:
            res.append(c.lower())

    #Join the list into a string and return
    return ''.join(res)
print(my_func('helloworld'))

输出将为

HeLlOwOrLd

答案 1 :(得分:2)

您可以预先存储您的操作,并在joinenumerate中使用它们:

def my_func(st):
    operations = (str.lower, str.upper)
    return ''.join(operations[i%2](x) for i, x in enumerate(st))

print(my_func('austin'))
# aUsTiN

答案 2 :(得分:0)

  • return将终止您的功能,因此循环的意义不大
  • st是整个字符串,所以st.upper()将产生大写的整个字符串。

答案 3 :(得分:0)

您可以使用按位和(&)检查奇数位置。枚举功能将为您提供位置和字符,因此您可以轻松地在列表理解中使用它:

def upLow(s):
    return "".join(c.lower() if i&1 else c.upper() for i,c in enumerate(s))
upLow("HelloWorld") # HeLlOwOrLd

答案 4 :(得分:0)

稍微调整一下代码,您可以使用'enumerate'并根据条件求值不断追加到字符串(对我来说,这很容易,因为我一直在用Java编写代码:))

def myfunc(st):
str=''
for index, l in enumerate(st):
    if index % 2 == 0:
        str+=l.upper()
    else:
        str+=l.lower()
return str

答案 5 :(得分:0)

下面的代码应该可以满足您的需求。

def myfunc(name):
    str=""

    lc=1;

    for character in name:

        if(lc%2==0):
            str+=character.upper()
        else:
            str+=character.lower()
        lc+=1
    return str

答案 6 :(得分:0)

代码如下:

def myfunc(st):
    list=[]
    index=0
    for x in st:
        if index%2==0:
            list.append(x.upper())
        else:
            list.append(x.lower())
        index=index+1    
    return ''.join(list)

这是有效功能。我已经阅读了上面给出的许多代码,但是都没有运行。所以在这里我做了一些修改。这是有效的。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

def myfunc(a):
    newString = ''
    for count, ele in enumerate(a, 0):
        if count %2 == 0:
            newString += (a[count].lower())
        else:
            newString += ((a[count].upper()))
    return newString

答案 9 :(得分:0)

public function store(Request $request)
{
    $request->validate([
        'title' => 'required',
        'description' => 'required',
        'condition' => 'required',
        'city' => 'required',
        'address' => 'required',
        'price' => 'required',
        'category' => 'required',
        // Images validation except mimes
        'images' => 'required',
        'images.*' => 'max:2048'
    ]);

    // Extensions to check
    $allowedfileExtension = ['jpeg','jpg','png'];

    $files = [];
    if ($request->hasfile('images')) {
        $images = $request->file('images');
        foreach ($images as $image) {
            // Getting image extension
            $extension = $image->getClientOriginalExtension();
            $check = in_array($extension, $allowedfileExtension);
            // Checking the image extension
            if (!$check) {
                return redirect()->back()->with('error', 'Images must be png, jpeg or jpg!');
            }
            // ...
        }
    }
    $files = json_encode($files);

    //.. Insert function

    return redirect()->back()->with('success', 'Your ad has been created!');
}

使用这个枚举方法来执行你的操作

答案 10 :(得分:-1)

st="rhinoceros"
p=list()
for index in range(len(st)):
    if index % 2!=0:
         p.append(st[index].upper())
         
    else:
         p.append(st[index].lower())

print("".join(p))