{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Python для сбора и анализа данных\n", "\n", "*Алла Тамбовцева, НИУ ВШЭ*\n", "\n", "## Семинар 3: условные конструкции и цикл `while`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 1\n", "Напишите программу, которая просит пользователя ввести положительное число, и если пользователь вводит положительное число, выводит на экран сообщение \"Молодец!\", если нет – \"Это не положительное число.\".\n", "\n", "Считайте, что пользователь в любом случае вводит числа, а не какой-то текст." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Enter a number: 3\n", "Молодец!\n" ] } ], "source": [ "n = float(input(\"Enter a number: \"))\n", "if n > 0:\n", " print(\"Молодец!\")\n", "else:\n", " print(\"Это не положительное число\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "При желании можно написать более универсальный код, который будет на первом шаге проверять, ввел ли пользователь строку с числом. Можно сохранить `input()` в переменную и посмотреть на метод `.isnumeric()` для строк." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 2\n", "\n", "Пользователь вводит с клавиатуры два числа через пробел. Напишите код, который возвращает максимальное из двух введенных значений. \n", "\n", "**Пример:**\n", "\n", "Ввод: \n", "\n", " Введите два числа: 5.7 8\n", " \n", "Вывод: \n", "\n", " 8" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Enter two numbers: 6 8.5\n", "8.5\n" ] } ], "source": [ "# решение 1 – с if-else\n", "\n", "inp = input(\"Enter two numbers: \")\n", "strings = inp.split()\n", "numbers = [float(i) for i in strings]\n", "\n", "if numbers[0] > numbers[1]:\n", " print(numbers[0])\n", "else:\n", " print(numbers[1])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Enter two numbers: 8.5 6\n", "8.5\n" ] } ], "source": [ "# решение 2 – без if-else\n", "\n", "inp = input(\"Enter two numbers: \")\n", "strings = inp.split()\n", "numbers = [float(i) for i in strings]\n", "print(max(numbers))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 3\n", "\n", "Дан список `N` из целых чисел. Напишите код, который делает следующее: выводит каждый элемент списка на экран и для каждого элемента либо выводит комментарий \"Это четное число\", либо комментарии \"Это нечетное число\".\n", "\n", "*Подсказка:* оператор для нахождения остатка от деления – это `%`." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Это четное число\n", "Это четное число\n", "Это четное число\n", "Это нечетное число\n", "Это четное число\n", "Это нечетное число\n", "Это нечетное число\n" ] } ], "source": [ "N = [4, 6, 8, 9, 0, 1, 13]\n", "for k in N:\n", " if k % 2 == 0:\n", " print(\"Это четное число\")\n", " else:\n", " print(\"Это нечетное число\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 4\n", "\n", "У питона есть набор любимых чисел.\n", "\n", " favorites = [3, 7, 11, 23, 18, 48, 81]\n", "\n", "Напишите программу, которая просит пользователя ввести целое число, и если оно нравится питону, на экран будет выводиться сообщение: \"Мое любимое число!\", если нет ‒ \"Эх, ну почему?\"." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Enter a number: 23\n", "Мое любимое число\n" ] } ], "source": [ "favorites = [3, 7, 11, 23, 18, 48, 81]\n", "x = int(input(\"Enter a number: \"))\n", "if x in favorites:\n", " print(\"Мое любимое число\")\n", "else:\n", " print(\"Эх, ну почему?!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 5\n", "Напишите программу, которая запрашивает у пользователя пароль, и далее:\n", "\n", "* если пароль верный, выводит на экран сообщение \"Login success\".\n", "* если пароль неверный, выводит на экран сообщение \"Incorrect password, try again!\" до тех пор, пока пользователь не введет верный пароль." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Enter you password: hse\n", "Incorrect password. Try again!\n", "Enter you password: hse\n", "Incorrect password. Try again!\n", "Enter you password: hsepassword\n", "Login success\n" ] } ], "source": [ "# решение 1 – обычный while\n", "\n", "password = \"hsepassword\"\n", "attempt = input(\"Enter you password: \")\n", "\n", "while attempt != password:\n", " print(\"Incorrect password. Try again!\")\n", " attempt = input(\"Enter you password: \")\n", "print(\"Login success\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Enter you password: hse\n", "Incorrect password. Try again!\n", "Enter you password: hsepass\n", "Enter you password: hsepassword\n", "Login success\n" ] } ], "source": [ "# решение 2 – while True\n", "\n", "password = \"hsepassword\"\n", "\n", "while True:\n", " attempt = input(\"Enter you password: \")\n", " if attempt == password:\n", " print(\"Login success\")\n", " break\n", " else:\n", " print(\"Incorrect password. Try again!\")\n", " attempt = input(\"Enter you password: \")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Дополнение:** если бы мы изменили условие и поставили ограничение на число попыток, нам понадобился бы цикл `for`:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Enter you password: hse\n", "Incorrect password. Try again!\n", "Enter you password: hsep\n", "Incorrect password. Try again!\n", "Enter you password: hsepassword\n" ] } ], "source": [ "password = \"hsepassword\"\n", "attempt = input(\"Enter you password: \")\n", "\n", "# еще 2 попытки – всего 3 с attempt выше\n", "\n", "for i in range(0, 2):\n", " if attempt == password:\n", " print(\"Login success\")\n", " break\n", " else:\n", " print(\"Incorrect password. Try again!\")\n", " attempt = input(\"Enter you password: \")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Дополнение\n", "\n", "Как сочетать условия с *if-else* и списковые включения (генераторы списков)? Рассмотрим пример – создадим сначала новый список на основе старого через цикл `for` и метод `.append()`:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 0, 1, 1]\n" ] } ], "source": [ "L = [-1, 6, -8, 6, 2]\n", "\n", "# Bin: 1 для положительных чисел в L, 0 – иначе\n", "\n", "Bin = []\n", "for i in L:\n", " if i > 0:\n", " Bin.append(1)\n", " else:\n", " Bin.append(0)\n", "print(Bin)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Теперь то же самое со списковым включением: " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 0, 1, 1]\n" ] } ], "source": [ "# раскручиваем с конца: \n", "# значение, если условие верно\n", "# само условие\n", "# else и значение, если условие неверно\n", "# перебор с for по старому списку\n", "\n", "Bin2 = [1 if i > 0 else 0 for i in L] \n", "print(Bin2)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }