Ajout des fichiers.

This commit is contained in:
Klafyvel 2017-12-05 14:54:44 +01:00
commit 891dc6ae34
4 changed files with 266 additions and 0 deletions

121
.gitignore vendored Normal file
View file

@ -0,0 +1,121 @@
# Created by https://www.gitignore.io/api/vim,python
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
### Vim ###
# swap
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]
# session
Session.vim
# temporary
.netrwhist
*~
# auto-generated tag files
tags
# End of https://www.gitignore.io/api/vim,python

1
README.md Normal file
View file

@ -0,0 +1 @@
#TD de SDA : découverte de Python

89
lsystem.py Normal file
View file

@ -0,0 +1,89 @@
import matplotlib.pyplot as plt
import numpy as np
import random as rd
## Question 1
def genere(regles, L0, n):
L = L0
for i in range(n):
new_res = ""
for j in L:
new_res += regles.get(j, j)
L = new_res
return L
## Question 2
class Tortue:
def __init__(self, angle, i=1):
""" Initialise la tortue en (0,0) avec un angle de `angle`."""
plt.figure(i)
plt.axis('equal')
self.angle = angle
self.pos = (0,0)
self.stack = []
def avance(self, r):
""" Avance la torue de `r` unités. """
x,y = self.pos
self.pos = (
x + r*np.cos(self.angle),
y + r*np.sin(self.angle)
)
plt.plot([x, self.pos[0]], [y, self.pos[1]], 'r')
def tourne(self, a):
""" Tourne la tortue d'un angle a. """
self.angle += a
def push(self):
""" Mémorise l'état courrant. """
self.stack.append((self.pos, self.angle))
def pop(self):
""" Retourne au précédent état mémorisé. """
self.pos, self.angle = self.stack.pop(-1)
def trace(self, s, alpha):
""" Trace la chaîne de caractères s. """
plt.autoscale()
for c in s:
if c == '+':
self.tourne(alpha)
elif c == '-':
self.tourne(-alpha)
elif c == '[':
self.push()
elif c == ']':
self.pop()
else:
self.avance(1)
## Question 5
def genere2(regles, L0, n):
L = L0
for i in range(n):
new_res = ""
for j in L:
regle = regles.get(j, [j])
new_res += regle[rd.randint(0,len(regle)-1)]
L = new_res
return L
## Question 5
def genere3(regles, L0, n):
L = L0
for i in range(n):
new_res = ""
for j in L:
regle = regles.get(j, [(1,j)])
poids_total = sum(map(lambda x:x[0], regle))
tirage = rd.uniform(0,poids_total-1)
k = 0
while tirage > 0:
tirage -= regle[k][0]
k += 1
new_res += regle[k-1][1]
L = new_res
return L

55
test.py Normal file
View file

@ -0,0 +1,55 @@
import numpy as np
import matplotlib.pyplot as plt
import lsystem as ls
L1 = ls.genere({"A": "AB+A+BA", "B": "BB"}, "ABB", 1)
print("L1 = " + L1)
assert(L1 == "AB+A+BABBBB")
L2 = ls.genere({"A": "AB+A+BA", "B": "BB"}, "ABB", 2)
assert(L2 == "AB+A+BABB+AB+A+BA+BBAB+A+BABBBBBBBB")
plt.close('all')
t = ls.Tortue(0)
for i in range(4):
t.avance(20)
t.tourne(np.pi/2)
plt.show()
plt.close('all')
t = ls.Tortue(0)
s = ls.genere({"A":"A-B+A+B-A", "B":"BB"},"ABB", 5)
t.trace(s,2*np.pi/3)
plt.show()
plt.close('all')
t = ls.Tortue(0)
s = ls.genere({"A":"A-A++A-A", "B":"BB"},"A++A++A", 4)
t.trace(s,np.pi/3)
plt.show()
plt.close('all')
t = ls.Tortue(0)
s = ls.genere({"A":"A[+A]A[-A]A"},"A", 3)
t.trace(s,22*np.pi/180)
plt.show()
plt.close('all')
t = ls.Tortue(0)
s = ls.genere({"A":"B[+A][-A]BA", "B":"BB"},"A", 4)
t.trace(s,25*np.pi/180)
plt.show()
plt.close('all')
t = ls.Tortue(0)
s = ls.genere({"A":"A+b-AA+A+AA+Ab+AA-B+AA-A-AA-Ab-AAA", "b":"bbb"},"A", 2)
t.trace(s,np.pi/2)
plt.show()
plt.close('all')
for i in range(5):
t = ls.Tortue(0, i)
s = ls.genere3({"A":[(2,"A[+A]A[-A]A"), (1,"A[+A]A"), (1,"A[-A]A")]},"A", 5)
t.trace(s,np.pi/6)
plt.show()