Correction de Initiales

Quelques propositions d'élèves, et à la fin un corrigé du professeur.

Propositions d'élèves

À la suite de chaque proposition de code, un commentaire de correction du professeur. Le cartouche demandé en introduction a été supprimé ici.

Proposition 1

import string
def initiales(nb_caractère: int, chaine_caractère: str) -> str:
    """Cette fonction prend en paramètre une chaîne de caractère et affiche la première lettre de chacun de ces mots en majuscule.
    >>> 21
        rentre avec tes pieds
    RATP
    """
    chaine_finale = []
    string.capwords(chaine_caractère)
    for x in range(nb_caractère-1):
        if chaine_caractère[x] == " ":
            pass
        else:
            if chaine_caractère[x] == chaine_caractère[x].upper():
                chaine_finale.append(chaine_caractère[x])
            else:
                pass
    return chaine_finale
# tests
import doctest
doctest.testmod()

# Entrée
nb_caractère = int(input())
chaine_caractère = input()

# Sortie
print(initiales(nb_caractère, chaine_caractère))

Proposition 2

def initiales(chaîne_caractère : str) -> str:
    """ Renvoie les Initiales d'une chaîne de caractère
    >>> initiales("oui bonjour")
    'OB'
    >>> initiales("je suis pas là")
    'JSPL'
    """
    liste_chaîne = list(chaîne_caractère.split())
    initiale = ""

    for x in range(len(liste_chaîne)):
        initiale += liste_chaîne[x][0].upper()
    
    return initiale

# tests
import doctest
doctest.testmod()

# Entrée
nb_caractères = int(input())
chaîne_caractère = input()
# Sortie
print(initiales(chaîne_caractère))

Quand on doit accumuler des objets, il faut penser en premier à une liste !

Proposition 3

nombre_caractères = int(input())
liste_mots = list(input().split(" "))

initiales_majuscules = "".join(mot[0].upper() for mot in liste_mots)

print(initiales_majuscules)

Proposition 4

def initiales(texte):
  """Renvoie l'initiale de chaque mots de la phrase.
  >>> initiales('Rentre Avec tes pieds')
  RATP
  """ 
  lettre=""
  for i, c in enumerate(texte):
    if c!=" " and (i==0 or (i > 0 and texte[i-1] == " ")):
      lettre += c.upper()
  print(lettre)

# Test
import doctest
doctest.testmod()

# Entrées  
nb_lettre = int(input())
texte=input()

# Sortie
initiales(texte)

Proposition 5

def cherche_initiales(liste_phrase):
    """ cherche les initieles d'une phrase est l'affiche
    >>>cherche_initiales(['rentre', 'avec', 'tes', 'pieds'])
    RATP
    """
    initiale = []
    for x in liste_phrase:
        initiale.append(x[0].upper())
    return initiale

""" mon doctest ne marche pas 
import doctest
doctest.testmod()    
"""
nb_lettre = int(input())
liste_phrase = input().split()

print("".join(cherche_initiales(liste_phrase)))

Proposition 6

def première_lettre(phrase):
    """ Cette fonction prend en paramètre une chaîne de caractères, et affiche la première lettre de chacun de ces mots, en majuscule.

    Je n'ai pas activer le test, car celui-ci faisait bugger le programme et je ne sais pas comment le rendre juste.
    #>>> première_lettre(rentre avec tes pieds)
    RATP

    """
    for lettre in liste:
        print(lettre[0].upper(), end="")

# tests
import doctest
doctest.testmod()

# Entrée
nb_caractères = int(input())  #cette variable n'a pas d'action dans le programme, elle est "passive".
phrase = input()
liste = phrase.split() 

# Sortie
première_lettre(phrase)

Proposition 7

# 0- Coeur du programme

def construire_initiales(nb_lettres: int, chaîne_mots: list) -> str:
    """ Renvoie la première lettre de chacun des mots de chaîne_mots
    >>> construire_initiales(11, ["Hello","World"])
    'HW'
    >>> construire_initiales(21, ["rentre", "avec", "tes", "pieds"])
    'RATP'
    """

    initiales = ""
    for mot in chaîne_mots:
        initiales += mot[0].upper()
    return initiales

# 1- Tests

import doctest
doctest.testmod()

# 2- Lecture des entrées

nb_lettres = int(input())
chaîne_mots = input().split()

# 3- Appel de la fonction / Sortie

print(construire_initiales(nb_lettres, chaîne_mots))

Proposition 8

def initiales(texte : str) -> str :
    """ Renvoie la première lettre de chaque mot, en majuscule, dans la chaîne de caractère 'texte'.
    
    >>> texte = 'rentre avec tes pieds'
    >>> initiales(texte)
    RATP
    
    """
    for mot in texte :
        print(mot[0].upper(), end="") #mot[0] = initiale 

# tests
import doctest
doctest.testmod()

# Entrée
nb_caracteres = int(input())
assert 1 <= nb_caracteres <= 200
texte = input().split()

# Sortie
initiales(texte)

Corrigé du professeur

"""
auteur : Franck CHAMBON
https://prologin.org/train/2003/semifinal/initiales
"""

def majuscule(lettre: str) -> str:
    """Renvoie la version majuscule de `lettre`,
    `lettre` est donnée en minuscule.

    >>> majuscule('r')
    'R'

    """
    id_lettre = ord(lettre) - ord('a')
    lettre_maj = chr(ord('A') + id_lettre)
    return lettre_maj


def initiales(chaîne: str) -> str:
    """Renvoie les initiales de la chaîne, en majuscules.

    >>> initiales("rentre avec tes pieds")
    'RATP'

    """

    taille = len(chaîne)
    if taille == 0: # ce cas ne devrait pas se produire
        return ""
    if chaîne[0] == " ":
        sigle = []
    else:
        sigle = [majuscule(chaîne[0])]
    for i in range(1, taille):
        if (chaîne[i - 1] == ' ') and (chaîne[i] != ' '):
            sigle.append(majuscule(chaîne[i]))
    return "".join(sigle)


import doctest
doctest.testmod()

taille = int(input())
chaîne = input()

print(initiales(chaîne))

Une version fonctionnelle serait

def initiales(chaîne: str) -> str:
    return "".join(mot[0].upper() for mot in chaîne.split())