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.
8 Réponses :
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
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)
Voici un
"".join([x.upper() if i%2 else x.lower() for i,x in enumerate(mystring)])
en ligne
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 .
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
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
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'
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"))
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.
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')
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 .