Aller au contenu

Devoir sur les bases de Python B

L'usage de la calculatrice n'est pas autorisé

Durée: 55 min

Exercice 1 : Cochez la ou les réponses correctes

  1. Qu'affiche le code suivant ?

    x = 6
    y = 2
    print(x ** y)
    print(x // y)
    
    \(\square\) \(\square\) \(\square\) \(\square\)
    66 36 66 36
    0 0 3 3
  2. Qu'affiche le code suivant ?

    var1,var2,var3 = 1,2,"3"
    print(var1 + var2 + var3)
    
    \(\square\) \(\square\) \(\square\) \(\square\)
    6 33 123 Error
  3. Qu'affiche le code suivant ?

    valueOne = 5 ** 2
    valueTwo = 5 ** 3
    
    print(valueOne)
    print(valueTwo)
    
    \(\square\) \(\square\) \(\square\)
    10 25 Error: invalid syntax
    15 125
  4. Quelle est la valeur de x après l'exécution du code :

    x = 0
    while (x < 100):
        x-=2
    print(x)
    
    \(\square\) \(\square\) \(\square\) \(\square\)
    101 99 100 Boucle infinie
  5. Si j'exécute le code suivant, combien de fois est affiché "Learn_Computer_Science" ?

    var1,var2=1,10
    while var1<var2:
        print("Learn_Computer_Science")
        var1=var1+2
    
    \(\square\) \(\square\) \(\square\) \(\square\)
    3 4 5 6
  6. Qu'affiche le code suivant ?

    for num in range(-2,-5,-1):
        print(num)
    
    \(\square\) \(\square\) \(\square\) \(\square\)
    -2, -1, -3, -4 -2, -1, 0, 1, 2, 3 -2, -1, 0 -2, -3, -4
  7. Qu'affiche le code suivant ?

    x,a,b = 0,5,5
    if a > 0:
        if b > 0:
            x = x + 5 
        elif (b+a)>3:
            x = x + 3
    print(x)
    
    \(\square\) \(\square\) \(\square\) \(\square\)
    0 2 3 5
  8. Qu'affiche le code suivant ?

    res=''
    for car in 'Jhon':
        if car != 'o':
            res=res+car
        print(res)
    
    \(\square\) \(\square\) \(\square\)
    'Jhn' 'Jhon' 'J','Jh','Jh','Jhn'
  9. Qu'affiche le code suivant ?

    for num in range(10, 14):
        for i in range(2, num):
            if i%num == 1:
                print(num)
                break
    
    \(\square\) \(\square\) \(\square\)
    Rien 10 11
    11 13
  10. Qu'affiche le code suivant ?

    x = 75
    def myfunc():
        x = x + 1
        print(x)
    myfunc()
    print(x)
    
    \(\square\) \(\square\) \(\square\) \(\square\)
    Error 76 1 None

Exercice 2

En tant qu'expert informatique, vous êtes amené à vérifier la sécurité des mots de passe d'une société.

Pour cela, vous devez écrire une fonction verification(motDePasse) qui vérifie que le mot de passe motDePasse donné est correct, et retourne True ou False en conséquence.

Pour être correct, un mot de passe doit :

  • Contenir le caractère @

  • Contenir entre 8 et 20 caractères

Pour connaître la longueur d'une chaîne de caractères, on utilisera la fonction len.

Corrigé
def verification(motDePasse):
    return 8<=len(motDePasse)<=20 and '@' in motDePasse

Exercice 3

La somme des carrés des entiers impairs de 1 à 10 est \(1^2+3^2+5^2+7^2+9^2=165\).

Écrire une fonction sommecarr(n) qui affiche la somme des carrés des entiers impairs de 1 à n.

Corrigé
def sommecarr(n):
    S=0
    for n in range(1,n+1,2):
        S=S+n**2
    print(S)

Exercice 4

Écrire une fonction commencePar(debut, chaine) qui retourne True si chaine commence par debut , et False sinon.

>>> commencePar("bon", "bonjour")
True
>>> commencePar("na", "banane")
False
Corrigé
def commencePar(debut, chaine)
    for i in range(len(debut)):
        if debut[i]!=chaine[i]:
            return False
    return True

Exercice 5 (from codex)

On considère un entier naturel \(n\) et on calcule la somme \(s\) des carrés des chiffres de \(n\).

Par exemple si \(n=32\) alors \(s=3^2+2^2=13\).

On recommence avec \(s=13\) et on obtient \(s=10\). On recommence avec \(s=10\) et on obtient \(1\). Si on recommence on obtient toujours \(1\).

On peut démontrer (c'est un peu difficile, - et ça n'est pas attendu ici -) qu'en appliquant ce processus, trois situations peuvent se produire :

  • soit on reste à \(0\) (si \(n=0\));

  • soit on arrive à \(1\) et on y reste;

  • soit on arrive à \(4\) et on va reproduire la boucle \(4,16,37,58,89,145,42,20,4\).

En appliquant le processus décrit ci-dessus à un nombre \(n\), si on arrive à \(1\), on dit que le nombre \(n\) est heureux.

Écrire la fonction heureux(n) qui prend en paramètre un entier \(n\) positif et renvoie True si le nombre est heureux et False sinon.

Indice

On pourra utiliser les fonctions str et int pour obtenir les chiffres à partir de l'écriture d'un nombre. Par exemple int(str(387)[1]) est le nombre 8. Une autre possibilité est d'utiliser les opérateurs % et //.

Exemples

>>> heureux(32)
True
>>> heureux(58)
False
>>> heureux(0)
False
Corrigé
# On commence par écrire une fonction qui permet de déterminer la somme des chiffres d'un nombre n
def next(n):
    S=0
    for elt in str(n):
        S=S+(int(elt))**2
    return S
# On écrit ensuite une fonction qui détecte si un des nombres successif vaut 0, 1 ou est dans la liste [4,16,37,58,89,145,42,20]
def heureux(n):
    L=[4,16,37,58,89,145,42,20]
    while n>1 and n not in L:
        n=next(n)
    return n==1