Différences entre les versions de « ERG::Code-2020-1 »
(8 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 4 : | Ligne 4 : | ||
==Pages des étudiant.e.s== | ==Pages des étudiant.e.s== | ||
− | [[ | + | [[Celia Sallet]] |
[[Eloïse Tabouret]] | [[Eloïse Tabouret]] | ||
Ligne 29 : | Ligne 29 : | ||
[[Julie Fosse]] | [[Julie Fosse]] | ||
− | |||
− | |||
==Travail de fin du premier quadri== | ==Travail de fin du premier quadri== | ||
Ligne 80 : | Ligne 78 : | ||
==Notes de cours== | ==Notes de cours== | ||
+ | ===Cours du 19 mars 2021=== | ||
+ | <syntaxhighlight lang="python"> | ||
+ | import random | ||
+ | formules = { | ||
+ | 'salutations':{ | ||
+ | 'coolossement':["bonjour vous","coucouuu","bjr","aaaaaah"], | ||
+ | 'serieusement':["salutations","bien le bonjour"] | ||
+ | } | ||
+ | } | ||
+ | |||
+ | print(random.choice(formules['salutations']['coolossement'])) | ||
+ | </syntaxhighlight> | ||
+ | ===Cours du 15 mars 2021=== | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | |||
+ | #un programme qui récupère une recette sur unjourunerecette | ||
+ | |||
+ | import mechanize | ||
+ | |||
+ | import lxml.html | ||
+ | |||
+ | import cssselect | ||
+ | #import ssl | ||
+ | |||
+ | |||
+ | #initialisation d'un objet "navigateur" avec la librairie mechanize | ||
+ | navigateur = mechanize.Browser() | ||
+ | |||
+ | navigateur.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] | ||
+ | |||
+ | navigateur.set_handle_robots(False) | ||
+ | #fin de la configuration de mechanize | ||
+ | ''' | ||
+ | try: | ||
+ | _create_unverified_https_context = ssl._create_unverified_context | ||
+ | except AttributeError: | ||
+ | # Legacy Python that doesn't verify HTTPS certificates by default | ||
+ | pass | ||
+ | else: | ||
+ | # Handle target environment that doesn't support HTTPS verification | ||
+ | ssl._create_default_https_context = _create_unverified_https_context | ||
+ | ''' | ||
+ | |||
+ | data = navigateur.open('https://www.unjourunerecette.fr/', timeout=10.0) | ||
+ | #convertir la source en arbre html | ||
+ | source = data.read() | ||
+ | html = lxml.html.fromstring(source) | ||
+ | |||
+ | #convertir mon sélecteur css en objet cssselect | ||
+ | selecteurs = cssselect.parse('#preparation li span') | ||
+ | #[premier selecteur] | ||
+ | #selecteurs[0] | ||
+ | |||
+ | #convertir mon objet cssselect en objet xpath | ||
+ | chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteurs[0], translate_pseudo_elements=True) | ||
+ | |||
+ | #on va appliquer le chemin xpath sur la source html | ||
+ | resultats = html.xpath(chemin_xpath) | ||
+ | |||
+ | for etape in resultats: | ||
+ | print(etape.text_content()) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Cours du 1er mars 2021: scraping=== | ||
+ | <syntaxhighlight lang="python"> | ||
+ | #un programme qui récupère la recette sur https://www.unjourunerecette.fr/ | ||
+ | |||
+ | # sélecteur css pour atteindre les étapes de la recette: ol#preparation li span | ||
+ | |||
+ | import mechanize | ||
+ | import lxml.html as lh | ||
+ | import cssselect | ||
+ | import ssl | ||
+ | |||
+ | |||
+ | #initialisation d'un objet "navigateur" avec la librairie mechanize | ||
+ | br = mechanize.Browser() | ||
+ | br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] | ||
+ | br.set_handle_robots(False) | ||
+ | #fin de la configuration de mechanize | ||
+ | |||
+ | try: | ||
+ | _create_unverified_https_context = ssl._create_unverified_context | ||
+ | except AttributeError: | ||
+ | # Legacy Python that doesn't verify HTTPS certificates by default | ||
+ | pass | ||
+ | else: | ||
+ | # Handle target environment that doesn't support HTTPS verification | ||
+ | ssl._create_default_https_context = _create_unverified_https_context | ||
+ | |||
+ | |||
+ | data = br.open('https://www.unjourunerecette.fr/', timeout=10.0) | ||
+ | |||
+ | |||
+ | |||
+ | src = data.read() | ||
+ | |||
+ | arbre_html = lh.fromstring(src) | ||
+ | |||
+ | selecteurs = cssselect.parse('ol#preparation li span') | ||
+ | #[objet cssselect ol#preparation li span] | ||
+ | |||
+ | #selecteurs[0] | ||
+ | |||
+ | chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteurs[0], translate_pseudo_elements=True) | ||
+ | resultats = arbre_html.xpath(chemin_xpath) | ||
+ | |||
+ | for resultat in resultats: | ||
+ | print("nouvelle etape:" + resultat.text_content()) | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Cours du 22 février 2021: tweet.py=== | ||
+ | <syntaxhighlight lang="python"> | ||
+ | |||
+ | import tweepy | ||
+ | |||
+ | #remplacer par api key et api secret key | ||
+ | auth = tweepy.OAuthHandler('api key', 'api key secret key') | ||
+ | |||
+ | auth.set_access_token('access token ', 'access token secret') | ||
+ | api = tweepy.API(auth) | ||
+ | |||
+ | |||
+ | api.update_status(status='tu veux un camembert?') | ||
+ | </syntaxhighlight> | ||
+ | <syntaxhighlight lang="python"> | ||
+ | |||
+ | import tweepy | ||
+ | |||
+ | #remplacer par api key et api secret key | ||
+ | auth = tweepy.OAuthHandler('4GWCPBwzbHEwVUkbIUfjWzbQE', 'oJib6t7ry3Wdsqq3tRlHd6GeLrpih7yiSXLeXGxXwQYhsUChEM') | ||
+ | |||
+ | auth.set_access_token('1225142904978538496-SgCCvfhoYgGyTZzoPfywqflSr3WmGA', 'cUGhOV5FKOSahn76CCfMO3bzoZb6DSSPZ84UMMrTqBaWn') | ||
+ | api = tweepy.API(auth) | ||
+ | |||
+ | |||
+ | tweets = tweepy.Cursor(api.search, q='fromage', tweet_mode='extended').items(10) | ||
+ | |||
+ | for tweet in tweets: | ||
+ | #print(tweet) | ||
+ | print(tweet.full_text) | ||
+ | </syntaxhighlight> | ||
+ | |||
===Cours du 15 février 2021 : writing bot, introduction=== | ===Cours du 15 février 2021 : writing bot, introduction=== | ||
À propos de robots qui génèrent du texte. | À propos de robots qui génèrent du texte. |
Version actuelle datée du 7 novembre 2021 à 18:41
Introduction
Ce cours est destiné aux étudiant.e.s de BAC2. Cette année, nous nous concentrons sur le rapport du numérique au texte et du texte au numérique. Le code générateur de poésie, le code en tant que poésie, le code secret, le code caché. Nous serons amenés à créer des poésies algorithmiques, des générateurs de textes, des machines à plagier, des bots twitter. À travers différentes expérimentations menées en atelier, nous aborderons plusieurs langages de programmation, concepts informatiques et exemples dans les champs de l'art, du design, de l'histoire de l'informatique.
Pages des étudiant.e.s
Travail de fin du premier quadri
Jusqu'ici,
- nous sommes parti de l'écriture d'un poème collectif en binaire, traduit par la suite en ascii
- nous avons vu ensemble des éléments de programation en langage python, d'abord de manière plus générique avec l'écriture de scénarios d'interactions dans le terminal, puis plus spécifiques à la manipulation de texte
- vous avez écrit des énoncés et des programmes qui manipulent le poème original. Ces énoncés sont:
- un programme qui remplace tous les i par des points d'exclamation
- changer les consonnes en voyelles de manière aléatoire
- un programme qui demande à l'utilisateur le numero d'une ligne, puis qui mélange tous les mots de cette ligne
- rapporter le nombre de voyelles dans une ligne specifiée par l'utilisateur
- Demander à l'utilisateur de choisir un lettre et ainsi répertorier tout les mots commnçant par celle-ci.
- Un programme qui supprime tous les "e"
- Un programme qui demande le numero de la ligne que l'utilisateur n'a pas aimé et la supprime
- Un programme qui supprime toutes les voyelles
- un programme qui génère de nouveaux vers à la structure syntaxique correcte à chaque fois qu'il s'exécute
Et les différents programmes se trouvent ci-dessous, dans les notes des cours.
- ces programmes ont généré de nouveaux poèmes (et peuvent pour certains en générer d'autres à chaque exécution).
- à partir de ces différents éléments; code binaire, texte, énoncés, programmes et poème générés, je vous ai demandé de réaliser une publication en ligne, en html et css sur le serveur du cours. Ce dernier point constitue le "rendu" du premier quadri. Il s'agit bien de sélectionner ce que vous voulez publier, de travailler la mise en forme et les différentes pages en html et en css. L'ajout d'éléments "algorithmiques" tels qu'un code qui au moment où on consulte la page fait des requêtes ou transforme les données n'est pas interdit mais pas non plus nécessaire. Il y a moyen de faire quelque chose de bien "juste par le graphisme" et le contenu que vous sélectionnez.
Notes de cours
Cours du 19 mars 2021
import random
formules = {
'salutations':{
'coolossement':["bonjour vous","coucouuu","bjr","aaaaaah"],
'serieusement':["salutations","bien le bonjour"]
}
}
print(random.choice(formules['salutations']['coolossement']))
Cours du 15 mars 2021
#un programme qui récupère une recette sur unjourunerecette
import mechanize
import lxml.html
import cssselect
#import ssl
#initialisation d'un objet "navigateur" avec la librairie mechanize
navigateur = mechanize.Browser()
navigateur.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
navigateur.set_handle_robots(False)
#fin de la configuration de mechanize
'''
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else:
# Handle target environment that doesn't support HTTPS verification
ssl._create_default_https_context = _create_unverified_https_context
'''
data = navigateur.open('https://www.unjourunerecette.fr/', timeout=10.0)
#convertir la source en arbre html
source = data.read()
html = lxml.html.fromstring(source)
#convertir mon sélecteur css en objet cssselect
selecteurs = cssselect.parse('#preparation li span')
#[premier selecteur]
#selecteurs[0]
#convertir mon objet cssselect en objet xpath
chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteurs[0], translate_pseudo_elements=True)
#on va appliquer le chemin xpath sur la source html
resultats = html.xpath(chemin_xpath)
for etape in resultats:
print(etape.text_content())
Cours du 1er mars 2021: scraping
#un programme qui récupère la recette sur https://www.unjourunerecette.fr/
# sélecteur css pour atteindre les étapes de la recette: ol#preparation li span
import mechanize
import lxml.html as lh
import cssselect
import ssl
#initialisation d'un objet "navigateur" avec la librairie mechanize
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
br.set_handle_robots(False)
#fin de la configuration de mechanize
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else:
# Handle target environment that doesn't support HTTPS verification
ssl._create_default_https_context = _create_unverified_https_context
data = br.open('https://www.unjourunerecette.fr/', timeout=10.0)
src = data.read()
arbre_html = lh.fromstring(src)
selecteurs = cssselect.parse('ol#preparation li span')
#[objet cssselect ol#preparation li span]
#selecteurs[0]
chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteurs[0], translate_pseudo_elements=True)
resultats = arbre_html.xpath(chemin_xpath)
for resultat in resultats:
print("nouvelle etape:" + resultat.text_content())
Cours du 22 février 2021: tweet.py
import tweepy
#remplacer par api key et api secret key
auth = tweepy.OAuthHandler('api key', 'api key secret key')
auth.set_access_token('access token ', 'access token secret')
api = tweepy.API(auth)
api.update_status(status='tu veux un camembert?')
import tweepy
#remplacer par api key et api secret key
auth = tweepy.OAuthHandler('4GWCPBwzbHEwVUkbIUfjWzbQE', 'oJib6t7ry3Wdsqq3tRlHd6GeLrpih7yiSXLeXGxXwQYhsUChEM')
auth.set_access_token('1225142904978538496-SgCCvfhoYgGyTZzoPfywqflSr3WmGA', 'cUGhOV5FKOSahn76CCfMO3bzoZb6DSSPZ84UMMrTqBaWn')
api = tweepy.API(auth)
tweets = tweepy.Cursor(api.search, q='fromage', tweet_mode='extended').items(10)
for tweet in tweets:
#print(tweet)
print(tweet.full_text)
Cours du 15 février 2021 : writing bot, introduction
À propos de robots qui génèrent du texte.
Imaginer un robot qui intervient en postant du texte sur un ou plusieurs réseaux sociaux; mastodon, youtube, instagram, facebook, twitter, etc. Écrire une description de ce robot et la poster sur le wiki. La description doit répondre aux questions suivantes: - quelle(s) source(s) pour le texte - quels types de traitements sont utilisés pour générer le texte (penser aux traitements développés pendant le premier quadri) - qu'est-ce qui déclenche le post? - quel canal est utilisé pour le post?
@everyword, Allison Parrish: https://twitter.com/everyword
@nicetipsbot, Thricedotted: https://twitter.com/nice_tips_bot
@tinycarebot, Jonny Sun: https://twitter.com/tinycarebot
@infinite_scream, Nora Reed: https://twitter.com/infinite_scream
Darius Kazemi: http://tinysubversions.com/projects/
@predartbot, Maria Roszkowska et Nicolas Maigret: http://artbot.space/
Des bots qui n'écrivent pas mais qui agissent sur le web
https://wwwwwwwwwwwwwwwwwwwwww.bitnik.org/r/
Projets de l'année passée
https://twitter.com/poete_nrv/
https://twitter.com/baladecampagne
Cours du 7 décembre 2020
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>Ma petite page web</h1>
<!-- ceci est un commentaire -->
<section>
<h2>Article principal</h2>
<h3>Un sous-sous-titre</h3>
<img src="images/01-01thelanmowerman.jpg">
<p>Omnis enim deserunt sit et iusto perferendis. Magni enim recusandae saepe quis esse. Minus consequatur vitae et autem.</p>
<p>Omnis enim deserunt sit et iusto perferendis. Magni enim recusandae saepe quis esse. Minus consequatur vitae et autem.</p>
<p>Omnis enim deserunt sit et iusto perferendis. Magni enim recusandae saepe quis esse. Minus consequatur vitae et autem.</p>
<pre>
Omnis
enim
deserunt
sit
</pre>
</section>
<section>
<h2>Articles secondaires</h2>
<article>
<h3><a href="article.html">Article 1</a></h3>
<p>Omnis enim deserunt sit et iusto perferendis. Magni enim recusandae saepe quis esse. <a href="http://wikipedia.be">Minus consequatur</a> vitae et autem.</p>
</article>
<article>
<h3>Article 2</h3>
<p>Omnis enim deserunt sit et iusto perferendis. Magni enim recusandae saepe quis esse. Minus consequatur vitae et autem.</p>
</article>
</section>
<section>
<h2>Liens externes</h2>
<div>
<h4>Les liens des copains</h4>
<ul>
<li>Le site de Dudule</li>
<li>Le site de Machin</li>
<li>Le site de Gérard</li>
</ul>
</div>
<div>
<h4>Les liens des pas copains</h4>
</div>
</section>
</body>
</html>
Cours du 30 novembre 2020
# -*- coding: utf-8 -*-
import random
noms = ['soupe','pistou','alcool','Chien','casse','savon','deboires','MESSAGE','ALERTE','plafond','GQSK','s','chemin','pieton','mauX','a=our','soir']
ponctuation = [',','!']
nompropre = [ 'Italie','Jul' ]
articles = ['la','le']
pronomspersonnel = ["Je","J'"]
pronoms = ['moi','que','ses','quoi']
verbe = ["aime","est","vais","danser","calisse","veux","fusse","glissait","sortez","avais","ai reve","fuit","dit","tour","tombe","taaJAIjAaSK$"]
qualificatif = ['pistou','couvert',]
vers1 = random.choice(articles) + " " + random.choice(noms) + " " + random.choice(qualificatif)+ " " + random.choice(verbe) + " " + random.choice(ponctuation)
vers2 = random.choice(pronomspersonnel) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms) + " " + random.choice(qualificatif) + " " + random.choice(ponctuation)
vers3 = random.choice(articles) + " " + random.choice(noms) + " " + random.choice(qualificatif) + " " + random.choice(verbe)
vers4 = random.choice(pronomspersonnel) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms) + " " + random.choice(ponctuation)
vers5 = random.choice(verbe) + " " + random.choice(pronomspersonnel) + " " + random.choice(articles) + " " + random.choice(noms)
vers6 = random.choice(verbe) + " " + random.choice(pronomspersonnel) + " " + random.choice(articles) + " " + random.choice(noms) + " " + random.choice(qualificatif)
vers7 = random.choice(nompropre) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms)
vers8 = random.choice(nompropre) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms) + " " + random.choice(ponctuation)
vers9 = random.choice(nompropre) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms) + " " + random.choice(qualificatif)
vers10 = random.choice(nompropre) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms) + " " + random.choice(qualificatif) + " " + random.choice(ponctuation)
vers11 = random.choice(pronoms) + " " + random.choice(pronomspersonnel) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms)+ " " + random.choice(qualificatif) + " " + random.choice(ponctuation)
vers11 = random.choice(pronoms) + " " + random.choice(pronomspersonnel) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms)+ " " + random.choice(qualificatif)
vers12 = random.choice(pronoms) + " " + random.choice(pronomspersonnel) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms)
vers13 = random.choice(pronoms) + " " + random.choice(pronomspersonnel) + " " + random.choice(verbe) + " " + random.choice(articles) + " " + random.choice(noms) + " " + random.choice(ponctuation)
structures = [ vers1 , vers2 , vers3 , vers4 , vers5 , vers6 , vers7 , vers8 , vers9 , vers10 , vers11 , vers12 , vers13 ]
rendu = random.choice(structures)
print(rendu)
Cours du 23 novembre 2020
# -*- coding: utf-8 -*-
import time
#un programme qui demande à l'utilisateur le numero de la ligne qu'il n'aime pas, puis la supprime
with open('poyeme.txt') as fichier:
poyeme = fichier.read()
lignes = poyeme.splitlines()
print(lignes)
#1 demande quelle ligne
print ("Dites moi le numéro de la ligne que vous n'aimez pas ?")
numero = input ()
numero = int(numero)
lignes = poyeme.splitlines()
print (lignes [numero - 1])
ligne = lignes [numero - 1]
time.sleep(2)
print ("D'accord, je vais remédier à cela")
time.sleep(2)
#2 Remplacement de la ligne par du vide
poyeme = poyeme.replace(ligne + "\n","")
print(poyeme)
#Un programme qui supprime tous les "e"
with open('text.txt','r') as file:
text = file.read()
text = text.lower()
#text.replace("e","")
voldemort = 'e'
prophetie = ''
for bla in text :
if bla == voldemort:
prophetie = prophetie + "la lettre dont on ne prononce le son"
else :
prophetie = prophetie + bla
print(prophetie)
#un programme qui demande à l'utilisateur une lettre puis répértorie tout les mots commençant par celle-ci
with open("poyeme.txt" , 'r') as file :
poyeme = file.read()
print ('Choisis une lettre !')
lettres1 = input ()
listemots = poyeme.split()
for mot in listemots:
if mot[0] == lettres1:
print(mot)
#Un programme qui supprime toutes les voyelles
with open("poesie.txt" , 'r') as file :
poyeme = file.read()
voyelles = [ 'a', 'e', 'i', 'o', 'u' ]
for lettre in voyelles :
poyeme = poyeme.replace(lettre, '')
print(poyeme)
Cours du 16 novembre 2020
Le poème converti en texte:
J'aime la soupe pistou Le J c'est le s L'alcool!est!mort Je vais danser En Italie Calisse moi la Chien de la casse Je veux te voir tout nu youpi Quoi que je fusse,savon glissait. MESSAGE D'ALERTE, SORTEZ COUVERT! Dans ses deboires L'a=our d'un soir J'ai reve que J'avais un!GQSK. Mon plafond fuit, mauX dit,taudis Le chemin tour .Le pieton tombe Je taaJAIjAaSK$
with open('src.txt', 'r') as fichier:
poyeme = fichier.read()
#print(poyeme)
lignes = poyeme.splitlines()
print(lignes)
print(lignes[1])
import random
#changer les consonnes en voyelles de manière aléatoire
with open('src.txt', 'r') as fichier:
poyeme = fichier.read()
#1 on définit ce que sont les voyelles
voyelles = ['a', 'e', 'i', 'o', 'u']
poyeme_modifie = ''
#2 on parcourt chaque lettre du poème
for lettre in poyeme:
print(lettre)
#3 pour chaque lettre, on vérifie si elle est présente dans le tableau voyelles
if lettre not in voyelles:
#4 si elle n'est pas présente, alors on la remplace par une lettre au hasard du tableau voyelles
poyeme_modifie = poyeme_modifie + random.choice(voyelles)
else:
poyeme_modifie = poyeme_modifie + lettre
print(poyeme_modifie)
import random
#changer les consonnes en voyelles de manière aléatoire
with open('src.txt', 'r') as fichier:
poyeme = fichier.read()
poyeme = poyeme.lower()
#1 on définit ce que sont les voyelles
voyelles = ['a', 'e', 'i', 'o', 'u', 'y']
#2 on définit ce que sont les consonnes
consonnes = ['z','r','t','p','q','s','d','f','g','h','k','l','j', 'm','w','x','c','v','b','n']
#3 on parcourt le tableau de consonnes
for consonne in consonnes:
#4 pour chaque consonne, on la remplace dans le poyeme par une voyelle au hasard
poyeme = poyeme.replace(consonne, random.choice(voyelles))
print(poyeme)
#un programme qui demande à l'utilisateur le numero d'une ligne, puis qui mélange tous les mots de cette ligne
import time
import random
with open("poesie.txt" , 'r') as file :
poyeme = file.read()
print ('Donnez un numéro de ligne')
numero = input ()
numero = int(numero)
lignes = poyeme.splitlines()
print (lignes [numero - 1])
ligne = lignes [numero - 1]
print ('mélangeons tout ça')
mots = ligne.split()
random.shuffle(mots)
resultat = " ".join(mots)
print(resultat)
#Un programme qui rapporte le nombre de voyelle dans une ligne spécifiée par l'utilisateur
with open("poyeme.txt" , 'r') as file :
poyeme = file.read()
print ('Choisis un numéro de ligne!')
numero = input ()
numero = int(numero)
lignes = poyeme.splitlines()
ligne = lignes [numero - 1]
print (lignes [numero - 1])
compteur = 0
for lettre in ligne:
if lettre in voyelles:
compteur = compteur+1
print(compteur)
Cours du 19 octobre 2020
# -*- coding: utf-8 -*-
#un script qui épelle un prénom dans un sens puis dans un autre puis qui affiche les deux premières lettres puis la deuxième et la troisième lettre
import time
print("Qui est-ce?")
name = input()
#name = raw_input()
nameLength = len(name)
# 0 1 2
#['T'|'O'|'M']
#print(name[1])
for compteur in range(0, nameLength):
print("Donnez-moi un " + name[compteur])
time.sleep(1)
for compteur in range(nameLength-1, -1, -1):
print("Donnez-moi un " + name[compteur])
time.sleep(1)
print(name[0:1])
print(name[1:2])
print(name+"!")
Cours du 12 octobre 2020
age.py
# -*- coding: utf-8 -*-
print("Quel âge as-tu?")
age = input()
age = int(age)
#age = raw_input()
print("Le double de ton age c'est " + str(age * 2))
# < > <= >= == !=
if age < 10:
print("Oh ben t'es tout petit")
print("Mais c'est pas grave")
elif age < 20:
print("Oh ben t'es tout jeune")
elif age < 30:
print("Oh ben t'es presque tout vieux")
else:
print("Oh ben t'es presque mort")
chats.py
# -*- coding: utf-8 -*-
import time
print("Combien de petits chats?")
nbChats = input()
nbChats = int(nbChats)
for compteur in range(1, nbChats + 1):
print(str(compteur) + " petits chats")
time.sleep(1)
print("C'est fini")
Cours du 28 septembre 2020
Exercice : poésie binaire
Chaque étudiant.e écrit sur un pad commun au moins deux vers de 4 pieds en binaire en utilisant le tableau de conversion ASCII suivant:
Du code Morse à l'ASCII
Voir: slides 01: texte et code
1. INTERNATIONAL MORSE CODE, HAND SENDING - https://archive.org/details/gov.archives.arc.36813 Department of Defense. Department of the Army. Office of the Chief Signal Officer. (09/18/1947 - 02/28/1964)
- Le code morse, inventé par Samuel F. B. Morse en 1832.
- Directions pour tracer les lettres
- Les confusions possibles si l'opérateur fait une erreur de rythme
2. TM 11-459 International Morse Code (Instruction) - 1959 - https://archive.org/details/Tm11-4591957/page/n3
- Le télégraphe "a contribué plutôt à lier inextricablement la technologie et la place de l'humain" (K. Hayles - Lire et penser en milieux numériques p. 223)
3. Direct service guide for telegraphic cipher - 1939 - https://archive.org/details/directservicegui00sldu/page/20
- Premier objectif: la compression (pour des raisons économiques)
- 2e objectif: la discrétion
- 3e objectif: le controle des erreurs
4. Bentley's second phrase code - 1929 - https://archive.org/details/bentleyssecondph00bent/page/778
- Les codes ne sont plus liés au langage naturel
5. Idem
- Ici, un "tableau de mutilation" qui permet de corriger un code mal transmis (qui contient une erreur d'une lettre)
6. Teleprinter n°7 - Creed & Company - 1930
- Frederick G. Creed, inventeur du téléscripteur (vers 1910), ancien télégraphiste, canadien
7. Un exemple de téléscripteur - 1932, Londres
8. Code baudot - 1888
- Un encodage des caractères sur 5 chiffres, 5 bits
- Utilisé (dans des versions ultérieures) sur les premiers téléscripteurs
- Nécessité de définir une vitesse de modulation, "baudrate" en anglais, qui définit le nombre de symboles envoyés en 1 seconde -> la question du début et de la fin!
- Donald Murray adapte le code baudot en 1902 et attribue aux lettres les plus utilisées de l'alphabet les positions impliquant le moins de trous
- En 1924, adaptation du code baudot-Murray par l'organisme International Telegraph Union en International Telegraph Alphabet No. 2 (ITA2)
9. ASCII - American Standard Code for Information Interchange - 1963 - pré 1971
- sur 7 bits
Déroulement du cours
Le cours ne nécessite aucun prérequis si ce n'est une capacité d'attention pendant les séances. Cette attention implique qu'à certains moments, par exemple lors des moments de discussions ou de présentations, il sera demandé aux étudiant.e.s de fermer leur ordinateur, que l'usage des smartphones est interdit et que les étudiant.e.s doivent arriver à l'heure au cours (9h, le lundi matin).
Comme il s'agit d'un cours technique, les travaux se feront majoritairement en classe et il n'est pas absolument nécessaire de travailler en dehors du cours, à part pour documenter les travaux ou préparer leurs présentations (les cotations).
Le cours fonctionne en évaluation continue, ce qui signifie que chaque exercice réalisé en atelier aura une note attribuée. Pour réussir le cours, il faut essentiellement être présent.e.
À cette évaluation continue s'ajoute deux notes en décembre et en mai qui correspondent aux moments de cotations. Il est demandé pour ces cotations de présenter une sélection des travaux réalisés jusque là.
La difficulté technique, bien que présente, ne doit pas constituer une barrière pour assister au cours. Il ne sera pas demandé aux étudiant.e.s d'être performant.e.s mais plutôt de ne pas se braquer et d'accepter d'être inefficaces durant des périodes qui semblent parfois longues (voire trouver du plaisir dans ces périodes de recherches). L'entraide et le partage sont encouragés. Tout sera fait pour éviter des comportements de mise à distance du savoir entre celles et ceux "qui savent" et les "newbies".
Chaque étudiant.e a accès à ce wiki, qui servira durant toute l'année à documenter les travaux. La création des comptes pour le wiki se fait au début du deuxième cours (au moment de l'inscription au cours).