{ "cells": [ { "cell_type": "markdown", "id": "015764a8", "metadata": {}, "source": [ "# Exercice 1 (programmation Python niveau Lycée)" ] }, { "cell_type": "markdown", "id": "4495369d", "metadata": {}, "source": [ "## Enoncé" ] }, { "cell_type": "markdown", "id": "146e5b2f", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "fd8ff48a", "metadata": {}, "source": [ "*Résumé en français* : 2 paramètres entiers vous sont donnés, par exemple 1 et 9, le premier étant toujours inférieur au second (mais ils peuvent être négatifs). Vous devez trouver combien de nombres sont entre les 2 sachant qu’ils ne doivent pas contenir de ‘5’." ] }, { "cell_type": "markdown", "id": "9ac2bf4e", "metadata": {}, "source": [ "## Version classique" ] }, { "cell_type": "code", "execution_count": 1, "id": "fc13fc6e", "metadata": {}, "outputs": [], "source": [ "def dont_give_me_five(debut, fin):\n", " compteur = 0\n", " for v in range(debut, fin+1):\n", " if '5' not in str(v):\n", " compteur += 1\n", " return compteur" ] }, { "cell_type": "code", "execution_count": 2, "id": "187968b6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "12" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dont_give_me_five(4, 17)" ] }, { "cell_type": "markdown", "id": "ba4344f7", "metadata": {}, "source": [ "Cette version a le mérite d’être simple à comprendre. On initialise un **compteur** à zéro et on parcourt la liste complète des nombres entre **debut** et **fin** (avec un +1 pour inclure la valeur **fin**).\n", "Pour savoir si 5 est ou n’est pas dans le nombre, on transforme le nombre **v** en chaine de caractères (**str**) et on teste si le caractère ‘5’ n’est pas dans cette chaine. C’est beaucoup plus facile que de le faire avec des formules mathématiques !\n", "Si c’est vrai que ‘5’ n’est pas dans la chaine, le compteur augmente de 1." ] }, { "cell_type": "markdown", "id": "787f1b84", "metadata": {}, "source": [ "## Autre version" ] }, { "cell_type": "markdown", "id": "500b028d", "metadata": {}, "source": [ "Remarquons qu'en Python `True` vaut 1 et `False`vaut 0, ce qui permet d'effectuer des calculs :" ] }, { "cell_type": "code", "execution_count": 3, "id": "4e4ae07d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "True + True" ] }, { "cell_type": "code", "execution_count": 4, "id": "45bac08f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "True + False" ] }, { "cell_type": "markdown", "id": "dc779736", "metadata": {}, "source": [ "D’où cette seconde version :" ] }, { "cell_type": "code", "execution_count": 7, "id": "0d2380ce", "metadata": {}, "outputs": [], "source": [ "def dont_give_me_five(debut, fin):\n", " return sum(['5' not in str(i) for i in range(debut, fin + 1)])" ] }, { "cell_type": "code", "execution_count": 8, "id": "f3b74c2f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "8" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dont_give_me_five(1, 9)" ] }, { "cell_type": "markdown", "id": "a196e367", "metadata": {}, "source": [ "`'5' not in str(i)` donnera `True`ou `False` suivant que le caractère `5` est ou n'est pas dans le nombre. Remarquon pour finie l'on peut même faire la somme sans écrire les crochets :" ] }, { "cell_type": "code", "execution_count": 9, "id": "394eab47", "metadata": {}, "outputs": [], "source": [ "def dont_give_me_five(debut, fin):\n", " return sum('5' not in str(i) for i in range(debut, fin + 1))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.6" } }, "nbformat": 4, "nbformat_minor": 5 }