seminaire-ci/main.py

122 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Ce script est utilisé en guise d'appui pour le séminaire Crans d'introduction
à l'intégration continue.
Le dépôt est présent sur https://gitlab.crans.org/ynerant/seminaire-ci.git
Plus d'informations sur les séminaires : https://www.crans.org/fr/seminaire/
"""
from random import choice
import sys
def main(): # pragma: nocover
"""
Fonction principale, qui va attendre les instructions de l'utilisateur.
"""
print("Bienvenue dans le chatbot du séminaire de l'intégration continue !")
print("Veuillez taper une commande. Tapez \"aide\" pour afficher l'aide.")
while True:
command = input("> ")
args = command.split(" ")
print(commande(args[0], *args[1:]))
def commande(name: str, *args):
"""
Exécute la commande `name` avec les arguments donnés.
"""
return globals()[name](*args)
def aide():
"""
Affiche l'aide
"""
return "aide\t\tAffiche l'aide\n" \
"seminaire\tLance le séminaire\n" \
"blague\t\tRaconte une blague\n" \
"calcul\t\tVérifie une opération arithmétique. " \
"Par exemple, check(1, 2, 3, '+') renvoie True\n" \
"tri\t\tTrie une liste d'entiers.\n" \
"stop\t\tQuitte le programme"
def seminaire():
"""
Affiche les slides du séminaire.
"""
return "\x4c\x61\x69\x73\x73\x65\x20\x74\x6f\x6d\x62\x65" \
"\x72\x2c\x20\x74\x6f\x6e\x20\x74\x72\x75\x63\x20" \
"\x65\x73\x74\x20\x74\x72\x6f\x70\x20\x62\x65\x75" \
"\x67\x75\xe9\x2c\x20\x74\x75\x20\x64\x65\x76\x72" \
"\x61\x69\x73\x20\x70\x61\x73\x73\x65\x72\x20\x64" \
"\x75\x20\x74\x65\x6d\x70\x73\x20\xe0\x20\xe9\x63" \
"\x72\x69\x72\x65\x20\x64\x65\x73\x20\x74\x65\x73" \
"\x74\x73\x20\x65\x74\x20\x66\x61\x69\x72\x65\x20" \
"\x64\xe9\x66\x69\x6c\x65\x72\x20\x74\x65\x73\x20" \
"\x73\x6c\x69\x64\x65\x73"
def blague():
"""
Renvoie une blague aléatoire.
"""
return choice(
["Je vais vous raconter une blague sur UDP, mais vous "
"ne l'aurez peut-être pas.",
"Connaissez-vous la différence entre la théorie "
"et la pratique ? Il n'y en a pas, en théorie."])
def calcul(left: int, right: int, res: int, operation='+'):
"""
Vérifie si left operation b == c, où a, b et c sont des entiers.
L'opération peut être +, -, *, /, &, |, ^, % ou l'un de ses alias anglais.
"""
left = int(left)
right = int(right)
res = int(res)
if operation in ['+', 'add', 'sum']:
result = left + right
elif operation in ['-', 'sub']:
result = left - right
elif operation in ['*', 'mul', 'prod']:
result = left * right
elif operation in ['/', 'div']:
result = left / right
elif operation in ['&', 'and']:
result = left & right
elif operation in ['|', 'or']:
result = left | right
elif operation in ['^', 'xor']:
result = left ^ right
else:
result = left % right
return res == result
def tri(*args):
"""
Trie les éléments donnés en argument.
"""
return sorted(int(number) for number in args)
def stop(exit_code: int = 0):
"""
Stoppe le programme avec le code d'erreur donné.
"""
print("Fin du programme, merci !")
sys.exit(exit_code)
if __name__ == '__main__': # pragma: nocover
main()