#! /usr/bin/env python3 # exam 2017 p.149 # Partie 1 ################################################################## # 1. def nombreChiffres(x): n = str(x) p = len(n) return p def nombreChiffres(x): i = 0 while x > 0: x = x // 10 # division entière i += 1 return i # 2. def sommePuissances(x): s = 0 p = nombreChiffres(x) while x > 0: u = x % 10 # chiffre des unités d = x // 10 # nombre de dizaines s += u**p x = d return s # 3. def narcissique(x): if x == sommePuissances(x): res = True else: res = False def narcissique(x): return x == sommePuissances(x) # 4. def listeNarcissiques(a): l = [] i = 1 while i <= a: if narcissique(i): l.append(i) i += 1 return l def q1(): bmax = int(input('bmax ? ')) l = listeNarcissiques(bmax) c = [] # liste des nombres en texte for n in l: c.append(str(n)) print(",".join(c)) #q1() # Partie 2 ################################################################## import math # 1. def estimPi1(a): p4 = 0 signe = 1 for i in range(1, a+1, 2): p4 += signe / i if signe == 1: signe = -1 else: # signe == -1 signe = 1 return p4*4 # 2. def estimPi2(a): p26 = 0 for i in range(1, a+1): p26 += 1/(i*i) return math.sqrt(p26*6) # 3. def estimPrecision(p): a = 1 while abs(estimPi2(a) - math.pi) > p: a += 1 return a, estimPi2(a) def q2(): rejouer = True while rejouer: p = float(input("précision ? ")) a, p = estimPrecision(p) print("borne :", a) print("pi :", p) rejouer = (input("rejouer [o/n] ? ") == "o") q2() # Partie 4 ################################################################## import random ALPHABET = "abcdefghijklmnopqrstuvwxyz" def initDico(): code = {} ordre = list(ALPHABET) random.shuffle(ordre) for k in ALPHABET: code[k] = ordre.pop() return code def codeMot(mot, code): res = "" for k in mot: res += code[k] return res def ecart(k, code): return abs(ord(k)-ord(code[k])) def plusLointaine(code): lointaine = 'a' for k in code: if ecart(k, code) > ecart(lointaine, code): lointaine = k return lointaine def dicoDecode(code): decode = {} for k in code: v = code[k] decode[v] = k return decode def q4(): code = initDico() ll = plusLointaine(code) em = ecart(ll, code) print("la lettre avec le plus d'écart :", ll) print("écart entre", ll, "et son code", code[ll], ":", em) mot = input("entrez un mot : ") secret = codeMot(mot, code) print(mot, "codé :", secret) decode = dicoDecode(code) print(secret, "décodé :", codeMot(secret, decode)) q4()