Listes

Tirer au hasard un prénom parmi 10

On souhaite tirer et classer au hasard les prénoms des élèves d'un groupe de l'ISN :

Aurélien, Axel, Guillaume, Louis, Miguel, Nathan, Olivier, Pierre, Quentin, Valentin.

  1. Ecrire un programme permettant d'afficher un prénom choisi au hasard parmi la liste ci-dessus
  2. On import le module random Voir comment importer un module, puis on définit la liste des prénoms :

    from random import *
    prenoms = ["Aurélien", "Axel", "Guillaume", "Louis", "Miguel", \
    "Nathan", "Olivier", "Pierre", "Quentin", "Valentin"]
    

    Réfléchissez à l'aide de l'indication ci-dessus avant de dévoiler la résolution proposée :

    Une résolution de l'exercice "Tirer au hasard un prénom parmi 10".

    from random import *
    prenoms = ["Aurélien", "Axel", "Guillaume", "Louis", "Miguel", \
    "Nathan", "Olivier", "Pierre", "Quentin", "Valentin"]
    nump = randint(0, 9)
    print(" C’est à ", prenoms[nump], " de commencer")
  3. Modifier ce programme pour qu'il classe d’une façon aléatoire les 10 élèves du groupe ISN

Une résolution de l'exercice "Classer au hasard les élèves".

from random import *
prenoms = ["Aurélien", "Axel", "Guillaume", "Louis", "Miguel", \
"Nathan", "Olivier", "Pierre", "Quentin", "Valentin"]
k = 9
while k >= 0 :
    num = randint(0, k)
    print(" C’est ", prenoms[num], " qui occupe la", 10-k, "ième position")
    k -=1
    del prenoms[num]

Simulation de tirage de Loto

Ecrire un programme permettant de simuler le tirage de Loto

Une résolution de l'exercice "Simulation de tirage de Loto".

import random 
numero = []
for i in range(1, 50) :
	numero.append(i)
for i in range(1, 6) :
	b = random.choice(numero)
	numero.remove(b)
	print(" Numéro ", i, " : ", b)
print(" N° de chance est : ", random.randint(1,10))

Affichage du calendrier d'une année

Écrire un programme qui affiche un calendrier d'une année à saisir, en utilisant les listes et dictionnaires. Attention les années multiples de quatre sont bissextiles, sauf les années multiples de cent qui ne le sont pas, sauf les années multiples de quatre cents qui le sont, ainsi 2100, 2200, 2300, 2500, 2600, 2700, 2900 et 3000 ne sont pas bissextiles mais 2400 et 2800 le sont. Ajouter à ce calendrier le jour de la semaine pour obtenir l'affichage suivante :

Entrez une année : 2016
  vendredi     1    Janvier      2016
  samedi       2    Janvier      2016
  dimanche     3    Janvier      2016
  lundi        4    Janvier      2016
  mardi        5    Janvier      2016
  mercredi     6    Janvier      2016
  jeudi        7    Janvier      2016
  ...
  ...
  ...

Pour connaître le jour de la semaine du premier janvier de l'année à saisir On importe le module random Voir comment importer un module

puis on utilise la méthode voir ci-dessous :

import calendar
t = calendar.weekday(annee,1,1) 
# pour obtenir le numéro du jour de la semaine du premier janvier de l'année nommée annee (lundi correspond au numéro 0)

Réfléchissez à l'aide de l'indication ci-dessus avant de dévoiler la résolution proposée :

Une résolution de l'exercice "Affichage du calendrier d'une année".

import calendar
""" Ce programme permet d'afficher un calendrier pour une année en
utilisant les listes et dictionnaires
"""
lemois = {0:"Janvier  ", 1:"Février  ", 2:"Mars     ",3: "Avril    ", 4:"Mai      ",
        5:"Juin     ", 6:"Juillet  ", 7:"Août     ", 8:"Septembre", 9:"Octobre  ",
        10:"Novembre ", 11:"Décembre "}
joursMois = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
jourSemaine = ["lundi   ", "mardi   ", "mercredi", "jeudi   ","vendredi",
           "samedi  ", "dimanche"]
annee= int(input("Entrez une année : "))

if(annee % 4 == 0 and annee % 100 != 0) or (annee % 400 == 0): # pour vérifier si l'année est bissextile ou pas
    joursMois[1]=29
for j in range(0,12):
    if j == 0 :
        t = calendar.weekday(annee,1,1) # pour obtenir le jour de la semaine du premier janvier de l'année
    
    jour = 0   
    while jour < joursMois[j] :
        if jour <= 8 :
            if joursMois[j] <=8 :
                print("  ", jourSemaine[(jour+t)%7],"   ",jour+1, "  ",lemois[j],"  ",annee)
            else :
                print(" ", jourSemaine[(jour+t)%7],"   ",jour+1, "  ",lemois[j],"  ",annee)
        else :
             print(" ", jourSemaine[(jour+t)%7],"  ",jour+1, "  ",lemois[j],"  ",annee)
        jour = jour + 1
    t = (jour+t)%7 # pour tenir compte du décalage des jours de la semaine d'un mois à l'autre

Triangle étoilé.

Écrire un programme qui :

  1. demande à l'utilisateur un entier n > 0,
  2. puis affiche un triangle d'étoiles, suivant le modèle des exemples ci-dessous.

Avec n=4 :

   *   
  ***  
 ***** 
*******

Avec n=7 :

      *      
     ***     
    *****    
   *******   
  *********  
 *********** 
*************

Le triangle comporte donc n lignes, la première compte une étoile, chaque ligne compte deux étoiles de plus que la précédente.

Une première version a été vue dans les exercices sur les chaînes de caractères.

Il est demandé ici une autre version qui cherchera à calculer chaque ligne en fonction de la ligne précédente.

Pour cela, on remarquera qu'une ligne est constituée de 2n-1 caractères (* ou espace). Et, pour chaque caractère de la ligne :

  • Si le caractère est une étoile, le caractère de même indice de la ligne suivante sera aussi une étoile.
  • Si le voisin de gauche du caractère (lorsqu'il existe) est une étoile, le caractère de même indice de la ligne suivante sera aussi une étoile.
  • Si le voisin de droite du caractère (lorsqu'il existe) est une étoile, le caractère de même indice de la ligne suivante sera aussi une étoile.
  • Dans les autres cas, le caractère de même indice de la ligne suivante sera une espace.

Une résolution de l'exercice "Triangle étoilé".


def lg(n) :
	""" n est un entier strictement positif.
	La fonction retourne un entier égal à la longueur des lignes
	du triangle, c'est à dire 2n-1. """
	return 2*n-1 
	
	
def voisinage(j, n):
	""" j est un entier compris entre 0 et lg(n)-1.
	C'est l'indice d'un caractère constituant une ligne
	du triangle (une ligne étant de type str).
	La fonction retourne la liste des indices des 
	caractères voisins dans la chaîne ligne,
	un voisin étant ici le caractère gauche lorsqu'il existe,
	le caractère droit lorsqu'il existe,
	et le caractère d'indice j lui-même."""
	if j==0 : 
		return [0,1]
	if j==lg(n)-1 :
		return [lg(n)-2, lg(n)-1]
	return [j-1,j,j+1]
	
	
	
def etoileChezUnVoisin(j, ligne) :
	""" j est un entier compris entre 0 et lg(n)-1.
	C'est l'indice d'un caractère constituant ligne,
	qui est une ligne du triangle (de type str).
	La fonction retourne True si un voisin de ligne[j]
	est une étoile et retourne False sinon."""
	for v in voisinage(j,n) :
		if ligne[v]=='*' : return True
	return False
	
	
def ligneSuivante(ligne) :
	""" ligne est une chaîne de caractères, 
	ligne du triangle.
	La fonction retourne la chaîne de caractères
	correspondant à la ligne suivante du triangle."""
	nvligne=''
	for j in range(len(ligne)) :
		if etoileChezUnVoisin(j, ligne) :
			nvligne+='*'
		else :
			nvligne+=' '
	return nvligne
	
	
def ligneDepart(n) :
	""" n est un entier strictement positif.
	La fonction retourne la première ligne (type str)
	du triangle de n lignes."""
	return ' '*(n-1)+'*'+' '*(n-1)


def triangleEtoiles(n) :
	""" n est un entier strictement positif.
	La fonction retourne le triangle (type str)
	de n lignes."""
	ligne=ligneDepart(n)
	triangle=''
	for k in range(n) :
		triangle+=ligne+'\n'
		ligne=ligneSuivante(ligne)
	return triangle
	

n=int(input('Nombre de lignes : '))
 
print(triangleEtoiles(n))