TD 2

Programmation pour l’IA

Réécrire les fonctions suivantes (on ne donne que le corps de la fonction) sans boucle (on autorise la compréhension de liste, map, etc.) pour qu’elle retourne le même résultat.

  1. l = []
    for i in range(32):
        l.append(i*i)
    return l
  2. d = {}
    for l in "abcdef":
        d[l] = l.upper()
    return d
  3. l = []
    for i in range(32):
        # on suppose f définie ailleurs dans le code
        l.append((f(i), f(i*i))) 
    s = 0
    for (x,y) in l:
        if x < y:
            s+=x
        else:
            s+=y
    return s
  4. s=""
    l = [3, 2, 5, 0, 4]
    for i,v in enumerate(l):
        if v != 0:
            if i == 0:
                s+=str(v)
            else:
                s+=f"{v}x^{i}"
    return s
  5. s=""
    l = [["A", "B", "C"],
         ["1", "2", "1"],
         ["2", "2", "1"],
         ["3", "2", "3"]]
    s+="<table>\n"
    for r in l:
        s+="<tr>"
        for c in r:
            s += "<td>"+c+"</td>"
        s+="</tr>\n"
    s+="</table>"
    return s
  6. l = [[1, 2, 1],
         [2, 2, 1],
         [3, 2, 3]]
    q = l.copy()
    for i in range(3):
        for j in range(3):
            q[i][j] = l[i][j]
    return q

Qu’affichent les programmes suivants ?

  1. l = [1,2,3]
    q = l
    q[0] = 0
    print(q)
    print(l)
  2. l = [1,2,3]
    q = l.copy()
    q[0] = 0
    print(q)
    print(l)
  3. x = [1,2,3]
    l = [x,x,x]
    q = l.copy()
    q[0][0] = 0
    print(q)
    print(l)
    q[0] = [0,0,0]
    print(q)
    print(l)
  4. import copy
    
    x = [1,2,3]
    l = [x,x,x]
    q = copy.deepcopy(l)
    q[0][0] = 0
    print(q)
    print(l)
  5. d = {"green" : "#0f0", "red" : "#f00", "blue" : "#00f"}
    for x in d:
        print(x)
    d["yellow"] = "#ff0"
    print(d["orange"])
  1. Définir une classe Polygone avec un attribut sommets qui est une liste de paires de int (qu’on supposera donné dans l’ordre nécessaire pour tracer le polygone), un constructeur qui prend une liste de sommet en argument et deux méthodes sommet et perimetre qui renvoient le nombre de sommets du polygone et le périmètre du polygone.

  2. Définir une classe héritée Rectangle et réimplémentez les méthodes. On représentera un carré par deux sommets seulement (sommets opposés par une diagonale).

Écrire un programme qui prend une liste de fichiers en argument de ligne de commande (sys.argv) et les affiche les uns à la suite des autres. Si l’option -n est passé dans la ligne de commande, on doit afficher les numéros de lignes. Si un autre argument (commençant par -) est donné, on terminera le programme en levant l’exception ValueError.