Le cyberblog du coyote

 

Extra

Editorial

Ce blog a pour objectif principal d'augmenter la culture informatique de mes élèves. Il a aussi pour ambition de refléter l'actualité technologique dans ce domaine.

jeudi 15 mai 2014

Algorithmes de Exo7Math


Voir la série de 6 épisodes sur YouTube

mardi 22 avril 2014

Débuter avec Python au lycée

Débuter avec Python au lycée de Kamel Naroun est mis à disposition selon les termes de la licence Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique 3.0 Unported

mardi 21 mai 2013

Introduction to NumPy and Matplotlib

mardi 5 mars 2013

Check iO

Check iO est un jeu (en anglais) où vous incarnez un Android qui doit arranger certains programmes pour régler des problèmes sur sa planète. Avant chaque exercice, il y a donc une petite histoire, puis on bascule assez vite sur un éditeur de code en ligne qui permet de lancer du script Python.
En plus des tâches proposées par le site, on peut aussi proposer vos propres missions. Ainsi, tous les joueurs gagnent des points et se retrouvent dans un classement. Un bon moyen aussi de mesurer son niveau et d'apprendre quelques trucs en lisant les solutions proposées par d'autres joueurs.

vendredi 20 mai 2011

Quelles règles les programmeurs débutants devraient-ils toujours respecter ?

Quelles règles les programmeurs débutants devraient-ils toujours respecter ?
Un développeur expérimenté livre ses 7 règles d'or


A ses débuts, le programmeur inexpérimenté a tendance à fixer son attention sur la fonctionnalité à produire, quelque soit la quantité de ligne de code, les procédures et les fonctions utilisées pour produire le résultat final. Et ceci sans comprendre (parfois) ce qu'il fait vraiment ou les spécificités du langage.
Paul Vick, un développeur reconnu et spécialisé dans les bases de données et les langages, a travaillé sur plusieurs produits Microsoft dont SQL Server, Visual Basic ou le runtime .NET. Dans un billet de blog, il s'est inspiré des « sept règles pour les écrivains débutants » pour en proposer une version aux jeunes développeurs et leur éviter de faire trop d'erreurs. Les voici.

Règle numéro 1, le programmeur débutant ne doit pas écrire de longues procédures. Une procédure ne devrait pas avoir plus de dix ou douze lignes de code.

Deux, chaque procédure doit avoir un objectif clair. Un bon programme doit avoir des procédures claires, sans cumul.

Trois, les programmeurs débutants ne doivent pas utiliser les fonctions fantaisistes du langage. Pour Paul Vick, il est mal pour un débutant d'utiliser autre chose que des déclarations de variables, les appels de procédures, des opérateurs (arithmétiques, comparaisons, etc.) et les fonctions de contrôle de flux. Selon lui, l'utilisation des fonctions simples oblige à réfléchir à ce que l'on écrit.

Règle numéro 4, ne jamais utiliser les fonctionnalités du langage dont vous n'êtes pas sûr(e) du résultat ou du rôle. Une règle d'or indépassable pour Paul Vick, qui estime que si elle n'est pas respectée par un débutant, il devrait purement et simplement changer de métier.

Règle numéro 5, les débutants doivent à tout prix éviter le copier/coller. Sauf, évidemment, s'ils veulent copier le code d'un programme qu'ils ont écrit.

Six, le débutant doit éviter l'abstrait, et toujours opter pour le concret.

Et enfin la règle numéro 7 : appliquer les six règles ci-dessus chaque jour pendant au moins six mois.

La pratique de la programmation en suivant ces 7 règles d'or peut s'avérer très gênant reconnaît Paul Vick. Mais pour lui, c'est un excellent moyen d'apprendre un langage de programmation.

Sources : Developpez.com, Blog de Paul Vick

dimanche 12 décembre 2010

Arabesques

En cherchant à dessiner une spirale, un de mes élèves a obtenu... Vous saurez quoi en essayant le programme Python ci-dessous.

from turtle import *

reset()
speed('fastest')
angle = 0.1
depl = 0.1
while True :
    angle += 0.5
    depl += 0.005
    forward(depl)
    left(angle)

vendredi 15 mai 2009

Initiation au traitement d'image avec Numpy

A la fin de ce tutoriel vous saurez récupérer les données brutes d'une image, les mettre en forme afin de les traiter et de reconstruire l'image résultat. Tout cela sera fait avec l'aide des librairies PIL et NumPy. Côté traitement d'images, nous traiterons la segmentation à deux seuils, la dilatation et l'érosion.

mercredi 6 mai 2009

Codes sources

Tout bon ingénieur vous le dira : plutôt que de réinventer la roue, regardons d'abord si quelqu'un n'a pas déjà fait quelque chose qui ressemble à notre projet. PythonFrance.com met à disposition des codes sources en Python proposés par des internautes. Il y en a pour tous les goûts.

dimanche 3 mai 2009

Plus Court Solveur de Sudoku

Voici un programme en Python de 173 caractères seulement qui serait le plus court solveur de sudoku connu actuellement :

def r(a): i=a.find('0') if i<0:print a [m in[(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3)or a[j]for j in range(81)]or r(a[:i]+m+a[i+1:])for m in`14**7*9`]r(raw_input())

Ce programme est extrêmement compact et condensé, voire cryptique. Ce n’est pas la meilleure façon de programmer, mais ça révèle souvent la puissance cachée de certains langages. Ce programme est décrit en anglais et en détail ici, mais voici son principe en gros et en français:

def r(a): ... r(raw_input()) // définit la fonction “r” qui résout le sudoku, puis on l’appelle en passant en paramètre ce que l’utilisateur a entré au clavier. Ca doit être une chaine de 81 caractères contenant ligne par ligne les chiffres de 1 à 9 donnés, et des 0 aux emplacements vides.

i=a.find('0') if i<0:print a // au début de la fonction, on cherche le premier emplacement vide. Si on ne le trouve pas, on imprime le sudoku résolu
la partie principale de la fonction utilise deux concepts puissants de Python:

  • la “lazy evaluation” qui fait que l’expression “a or b” est équivalente à “if not(a):b”
  • la “compréhension de liste” qui permet de créer une liste en écrivant une boucle à l’intérieur de [crochets]. Par exemple “l = [x**2 for x in range(10)]” crée la liste des carrés des 10 premiers nombres entiers
ainsi cette expression [(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3)or a[j]for j in range(81)] fournit la “liste d’exclusion” contenant les chiffres qui ne peuvent pas figurer dans le trou à la position i. On l’obtient en parcourant toutes les celllules et en ajoutant à la liste la valeur des cases a[j] situées sur la même ligne, la même colonne ou dans le même bloc que i. Le grand test compliqué détermine ces conditions en utilisant les opérateurs modulo (%), ou binaire (|) et ou exclusif (^).

Finalement, le [m in [...] or r(a[:i]+m+a[i+1:])for m in`14**7*9`] remplit successivement la grille avec les chiffres possibles en utilisant la ‘lazy evaluation’ une fois de plus : ce n’est que si le chiffre m n’est pas dans la liste d’exclusion qu’on execute la partie droite du or, laquelle appelle récursivement la fonction r en lui passant la grille en paramètre la grille a[:i]+m+a[i+1:]. Ici , l’opérateur + sert à concaténer des listes : d’abord les i-èmes premières cases, puis le chiffre m proposé pour la case vide, puis les cases à partir de la i+1 ème.

Ce programme utilise donc une approche “force brute” loin d’être optimale en temps de calcul : on essaie les chiffres possibles dans chaque case vide jusqu’à ce que ça marche.

Reste à découvrir une astuce de geek que je ne connaissais pas : 14**7*9 vaut 948721536, un nombre qui contient les chiffres 123456789, dans le désordre, mais ça va aussi pour notre application. Les backquotes ´…´ servent à former une chaine, comme d’ailleurs la fonction str(). L’avantage de ´14**7*9´sur “123456789″ ? ben c’est évident : il faut deux bytes de moins …

Source : Dr Goulu

samedi 25 avril 2009

Apprenez d'abord Python (2)

Pour compléter la conférence d'hier, voici l'article Apprenez d'abord Python qu'Eric Le Bigot a écrit dans la revue Linux Magazine No 40. Un numéro à se procurer absolument, si c'est encore possible.