ANCIEN MACDONALD: Ecrire une fonction qui met en majuscule les première et quatrième lettres d'un nom
J'essaye d'écrire ceci de différentes manières et j'ai aussi l'impression qu'il y a un moyen plus simple de le faire. Cant, vous l'appliquez directement sans obtenir tous les autres mots d'une chaîne? Ou une scission ou quelque chose comme ça?
Voici une de mes tentatives pour essayer autrement. J'essaye de le faire avec une instruction for
ET une instruction if
aussi. Toute aide est appréciée.
def old_macdonald(words): wordletter = words[0] fourthletter = words[3] newword = [] for i,l in enumerate(words): if i[0]: newword = l.capatalize return newword if i[3]: newword = l.capatalize return newword
9 Réponses :
def old_macdonald(s): return ''.join([s[:1].upper(), s[1:3], s[3:4].upper(), s[4:]]) # s[:1] - letter index 0 (first) # s[1:3] - letters index 1-2 # s[3:4] - letter index 3 (fourth) # s[4:] - letters index 4 onward test_string = "abcdefghijklmnopqr" print(old_macdonald(test_string )) # AbcDefghijklmnopqr
Voici une solution. Vous devez diviser la chaîne en une liste de caractères pour changer les caractères individuels, car les chaînes sont immuables, puis utiliser join pour les reconvertir en chaîne.
def old_macdonald(name): letters = list(name) for letter_to_capitalize in [1, 4]: if len(letters) >= letter_to_capitalize: letters[letter_to_capitalize - 1] = letters[letter_to_capitalize - 1].upper() return "".join(letters)
Un exemple assez simple et modifiable.
def old_mcdonald(word): indexes = (0,3) #letters i want to cap new_word = "".join([v.capitalize() if i in indexes else v for i,v in enumerate(word)]) return new_word
J'aime l'écrire de cette façon:
def old_macdonald(word): indices = (0, 4) new_string = [] for index, c in enumerate(word): new_string.append(c.capitalize() if index in indices else c) return ''.join(new_string)
Bien que ce soit un peu long, vous préférerez peut-être l'écrire plus clairement comme:
def old_macdonald(word): indices = (0, 4) return ''.join(c.capitalize() if index in indices else c for index, c in enumerate(word))
Oups, il semble que TheLazyScripter ait déjà dit presque exactement la même chose
def old_macdonald(name): return (name[0].upper()+name[1:3].lower()+name[3].upper()+name[4:].lower())
Les vidages de code sans aucune explication sont rarement utiles. Stack Overflow consiste à apprendre, pas à fournir des extraits à copier et à coller à l'aveugle. Veuillez modifier votre question et expliquer en quoi elle fonctionne mieux que ce que l'OP a fourni. Voir Comment répondre .
def old_macdonald(s): w="" for i in s: t=s.index(i) if t==0: w=w+i.upper() elif(t==3): w=w+i.upper() else: w=w+i print(w) old_macdonald("aman")
def old_macdonald(name): letters = list(name) for index in range(len(name)): if index == 0: letters[index] = letters[index].upper() elif index == 3: letters[index] = letters[index].upper() return "".join(letters) This one worked for me
Bienvenue à SO et merci d'avoir répondu! Pourquoi itérer avec une boucle alors que vous avez déjà les index? Les listes ont un accès aléatoire, vous pouvez donc dire lettres [0] = lettres [0] .upper ()
.
def old_macdonald(s): return s[0:3].capitalize() + s[3:].capitalize() https://ideone.com/2D0qbZ
C'est le moyen le plus lisible IMO
def old_macdonald(name): mylist = list(name) mylist[0] = mylist[0].upper() mylist[3] = mylist[3].upper() return ''.join(mylist)
Est-ce que cela répond à votre question? changer certaines lettres minuscules en majuscules dans la chaîne