1
votes

Comment mettre en majuscule les 1er et 4ème caractères d'une chaîne?

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


1 commentaires

9 Réponses :


0
votes
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

0 commentaires

0
votes

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)


0 commentaires

0
votes

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


0 commentaires

0
votes

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))


1 commentaires

Oups, il semble que TheLazyScripter ait déjà dit presque exactement la même chose



-2
votes
def old_macdonald(name):
    return (name[0].upper()+name[1:3].lower()+name[3].upper()+name[4:].lower())

1 commentaires

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 .



0
votes
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")

0 commentaires

0
votes
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

1 commentaires

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 () .



0
votes
def old_macdonald(s):
    return s[0:3].capitalize() + s[3:].capitalize()
https://ideone.com/2D0qbZ

0 commentaires

0
votes

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)


0 commentaires