3
votes

Comment changer les majuscules et les minuscules alternativement dans une chaîne?

Je veux créer une nouvelle chaîne à partir d'une chaîne donnée avec des majuscules et des minuscules alternées.

J'ai essayé d'itérer sur la chaîne et de changer d'abord en majuscules dans une nouvelle chaîne, puis en minuscules dans une autre nouvelle chaîne.

def myfunc(x):
    even = x.upper()
    lst = list(even)
    for itemno in lst:
        if (itemno % 2) !=0:
            even1=lst[1::2].lowercase()
        itemno=itemno+1   
    even2=str(even1)
    print(even2)

Comme je ne peux pas changer la chaîne donnée, j'ai besoin d'un bon moyen de créer une nouvelle chaîne de caractères alternatifs.


0 commentaires

8 Réponses :


2
votes

Vous pouvez simplement choisir au hasard pour chaque lettre de l'ancienne chaîne si vous devez la mettre en minuscule ou en majuscule, comme ceci:

import random

def myfunc2(old):
  new = ''
  for c in old:
    lower = random.randint(0, 1)
    if lower:
      new += c.lower()
    else:
      new += c.upper()
  return new


0 commentaires

2
votes

En voici une qui renvoie une nouvelle chaîne en utilisant avec des majuscules alternatives:

def myfunc(x):
   seq = []
   for i, v in enumerate(x):
      seq.append(v.upper() if i % 2 == 0 else v.lower())
   return ''.join(seq)


0 commentaires

6
votes

Voici un

"".join([x.upper() if i%2 else x.lower() for i,x in enumerate(mystring)])

en ligne


2 commentaires

Vous n’avez pas besoin d’une liste: "" .join (x.upper () if i% 2 else x.lower () for i, x in enumerate (mystring))


@MykolaZotko, sauf que c'est une instance où l'utilisation d'une liste est plus efficace .



2
votes

Cela fait également le travail

def foo(input_message):

    c = 0 
    output_message = ""

    for m in input_message:
        if (c%2==0):
            output_message = output_message + m.lower() 
        else: 
            output_message = output_message + m.upper()
        c = c + 1 

    return output_message


0 commentaires

1
votes

Utilisation d'un découpage de chaîne:

def func(x, y):
    if x[-1].islower():
        return x + y.upper()
    else:
        return x + y.lower()

new_s = reduce(func, s) # eXaMpLe

Utilisation d'un itérateur:

s_iter = iter(s)

new_s = ''.join(x.upper() + y.lower()
                for x, y in zip_longest(s_iter, s_iter, fillvalue=''))
# ExAmPlE

Utilisation de la fonction reduction () code >:

from itertools import zip_longest

s = 'example'

new_s = ''.join(x.upper() + y.lower()
                for x, y in zip_longest(s[::2], s[1::2], fillvalue=''))
# ExAmPlE


0 commentaires

1
votes

Voici une solution utilisant itertools qui utilise le découpage de chaînes:

from itertools import chain, zip_longest

x = 'inputstring'

zipper = zip_longest(x[::2].lower(), x[1::2].upper(), fillvalue='')
res = ''.join(chain.from_iterable(zipper))

# 'iNpUtStRiNg'


0 commentaires

0
votes

Ce code renvoie également une chaîne de majuscules alternative: -

def alternative_strings(strings):
        for i,x in enumerate(strings):
            if i % 2 == 0:
                print(x.upper(), end="")
            else:
                print(x.lower(), end= "")
        return ''


print(alternative_strings("Testing String"))


3 commentaires

Votre fonction renvoie une chaîne vide: '' .


Non, lorsque vous exécutez le code, il affiche la chaîne de sortie souhaitée. Je retourne vide dans la chaîne car je ne veux pas de None dans la chaîne de sortie.


Le questionneur veut créer (pas imprimer) une nouvelle chaîne à partir d'une chaîne donnée. C'est une copie de la réponse @ Perte d'identité humaine mais avec impression.



0
votes
def myfunc(string):
    # Un-hash print statements to watch python build out the string.
    # Script is an elementary example of using an enumerate function.
    # An enumerate function tracks an index integer and its associated value as it moves along the string.
    # In this example we use arithmetic to determine odd and even index counts, then modify the associated variable.
    # After modifying the upper/lower case of the character, it starts adding the string back together.
    # The end of the function then returns back with the new modified string.
    #print(string)
    retval = ''
    for space, letter in enumerate(string):
        if space %2==0:
            retval = retval + letter.upper()
            #print(retval)
        else:
            retval = retval + letter.lower()
            #print(retval)
    print(retval)
    return retval
myfunc('Thisisanamazingscript')

1 commentaires

salut @hydraspun merci pour votre réponse. Le simple fait de poster du code n'est presque jamais une bonne réponse. Essayez peut-être d'élaborer un peu votre réflexion et d'expliquer pourquoi votre réponse est la bonne. Vous pouvez également consulter les docstrings .