#!/usr/bin/env python # coding: utf-8 # # Python для сбора и анализа данных # # *Алла Тамбовцева, НИУ ВШЭ* # # ## Семинар 3: условные конструкции и цикл `while` # ### Задача 1 # Напишите программу, которая просит пользователя ввести положительное число, и если пользователь вводит положительное число, выводит на экран сообщение "Молодец!", если нет – "Это не положительное число.". # # Считайте, что пользователь в любом случае вводит числа, а не какой-то текст. # In[2]: n = float(input("Enter a number: ")) if n > 0: print("Молодец!") else: print("Это не положительное число") # При желании можно написать более универсальный код, который будет на первом шаге проверять, ввел ли пользователь строку с числом. Можно сохранить `input()` в переменную и посмотреть на метод `.isnumeric()` для строк. # ### Задача 2 # # Пользователь вводит с клавиатуры два числа через пробел. Напишите код, который возвращает максимальное из двух введенных значений. # # **Пример:** # # Ввод: # # Введите два числа: 5.7 8 # # Вывод: # # 8 # In[3]: # решение 1 – с if-else inp = input("Enter two numbers: ") strings = inp.split() numbers = [float(i) for i in strings] if numbers[0] > numbers[1]: print(numbers[0]) else: print(numbers[1]) # In[4]: # решение 2 – без if-else inp = input("Enter two numbers: ") strings = inp.split() numbers = [float(i) for i in strings] print(max(numbers)) # ### Задача 3 # # Дан список `N` из целых чисел. Напишите код, который делает следующее: выводит каждый элемент списка на экран и для каждого элемента либо выводит комментарий "Это четное число", либо комментарии "Это нечетное число". # # *Подсказка:* оператор для нахождения остатка от деления – это `%`. # In[5]: N = [4, 6, 8, 9, 0, 1, 13] for k in N: if k % 2 == 0: print("Это четное число") else: print("Это нечетное число") # ### Задача 4 # # У питона есть набор любимых чисел. # # favorites = [3, 7, 11, 23, 18, 48, 81] # # Напишите программу, которая просит пользователя ввести целое число, и если оно нравится питону, на экран будет выводиться сообщение: "Мое любимое число!", если нет ‒ "Эх, ну почему?". # In[6]: favorites = [3, 7, 11, 23, 18, 48, 81] x = int(input("Enter a number: ")) if x in favorites: print("Мое любимое число") else: print("Эх, ну почему?!") # ### Задача 5 # Напишите программу, которая запрашивает у пользователя пароль, и далее: # # * если пароль верный, выводит на экран сообщение "Login success". # * если пароль неверный, выводит на экран сообщение "Incorrect password, try again!" до тех пор, пока пользователь не введет верный пароль. # In[7]: # решение 1 – обычный while password = "hsepassword" attempt = input("Enter you password: ") while attempt != password: print("Incorrect password. Try again!") attempt = input("Enter you password: ") print("Login success") # In[8]: # решение 2 – while True password = "hsepassword" while True: attempt = input("Enter you password: ") if attempt == password: print("Login success") break else: print("Incorrect password. Try again!") attempt = input("Enter you password: ") # **Дополнение:** если бы мы изменили условие и поставили ограничение на число попыток, нам понадобился бы цикл `for`: # In[9]: password = "hsepassword" attempt = input("Enter you password: ") # еще 2 попытки – всего 3 с attempt выше for i in range(0, 2): if attempt == password: print("Login success") break else: print("Incorrect password. Try again!") attempt = input("Enter you password: ") # ### Дополнение # # Как сочетать условия с *if-else* и списковые включения (генераторы списков)? Рассмотрим пример – создадим сначала новый список на основе старого через цикл `for` и метод `.append()`: # In[10]: L = [-1, 6, -8, 6, 2] # Bin: 1 для положительных чисел в L, 0 – иначе Bin = [] for i in L: if i > 0: Bin.append(1) else: Bin.append(0) print(Bin) # Теперь то же самое со списковым включением: # In[11]: # раскручиваем с конца: # значение, если условие верно # само условие # else и значение, если условие неверно # перебор с for по старому списку Bin2 = [1 if i > 0 else 0 for i in L] print(Bin2)