Допишите функцию которая принимает 3 числа сравнивает между собой и возвращает наименьшее
Перейти к содержимому

Допишите функцию которая принимает 3 числа сравнивает между собой и возвращает наименьшее

  • автор:

Условия (if, else, elif) и операторы сравнения

На прошлом занятии мы научились выводить данные с помощью функции print() . Например, чтобы вывести число 5 на экран нужно написать в интерпретаторе print(5) , и он сделает свое дело.

Но что, если нужно что-то ввести в программу из внешнего мира? Например, если наш самописный калькулятор умеет складывать 2 числа и выводить ответ, то как ввести эти самые 2 числа? На помощь придет функция input() . Попробуем написать вышеописанный калькулятор.

Функции input() можно передать в качестве аргумента строку, которую увидит пользователь перед вводом.

>>> a = input('Введите число a: ') Введите число a: 56 >>> b = input('Введите число b: ') Введите число b: 23 >>> print(a + b) 5623 

Как видно из примера, что-то пошло не так. Вместо заветных 46 после сложения 12 и 34 мы получили 1234. Все дело в типах данных. Функция input() всегда считывает данные в виде строки. Так и в примере она считала 12 и 34 как 2 строки и просто «слепила» их вместе. Мы же хотим складывать числа. Чтобы все работало хорошо, нужно выполнить преобразование типов данных.

В данном случае можно сделать вот так:

>>> a = int(input('Введите число a: ')) Введите число a: 56 >>> b = (input('Введите число b: ')) Введите число b: 23 >>> print(a + b) 79 

То, чего мы и хотели.

Преобразовывать можно не только строку в целое число, но и наоборот. Вот несколько допустимых преобразований:

>>> # Преобразование числа в строку >>> a = 34 >>> b = str(a) >>> print('Преобразованное число:', b, ', его тип:', type(b)) Преобразованное число: 34 , его тип: class 'str'> 
>>> # Преобразование строки в число с плавающей точкой >>> a = '45.34' >>> b = float(a) >>> print(a, type(a)) 45.34 class 'str'> >>> print(b, type(b)) 45.34 float'> >>> b**2 2055.7156000000004 
>>> # Преобразовать строку с НЕ числом в число не получится >>> a = 'python' >>> b = int(a) Traceback (most recent call last): File "", line 1, in module> b = int(a) ValueError: invalid literal for int() with base 10: 'python' 

В примерах мы используем функцию type() . Как должно быть понятно из её названия, она выясняет тип переменной. Возвращает она что-то страшное вида . Сейчас не стоит вникать почему так. Нам важно, что преобразование прошло правильно и получился тип str .

Как вы уже поняли, чтобы преобразовать что-то во что-то, надо взять и вызвать функцию, совпадающую по имени с названием типа данных. В нашем примере это str() , int() и float() .

Почему нужно конвертировать строки в числа

Возможно, решая очередную задачу, вы случайно не переведете строки в числа, а программа все равно будет работать. Например, у вас будет такая программа, вычисляющая, какое из 2 введенных чисел больше:

>>> a = input('Введите целое число:') Введите целое число:12 >>> b = input('Введите целое число:') Введите целое число:45 >>> if a > b: . print('Большее число:', a) . else: . print('Большее число:', b) Большее число: 45 

Вы удовлетворитесь ответом и пойдете домой. Но потом выяснится, что если ввести другие 2 числа, то все сломается:

>>> a = input('Введите целое число:') Введите целое число:4 >>> b = input('Введите целое число:') Введите целое число:30 >>> if a > b: . print('Большее число:', a) . else: . print('Большее число:', b) Большее число: 4 

Значит, не все так просто…

Чтобы разобраться в вопросе, нужно знать как сравниваются строки.

Компьютер умеет работать только с одним типом данных — числами. Мы же помимо чисел используем кучу разных типов данных: числа, строки, списки, словари, кортежи (последние 3 будут обсуждаться дальше в курсе). Оказывается, что и они все хранятся и обрабатываются компьютером в виде чисел. Разберемся со строчками.

Когда люди задумались, как можно обрабатывать строки, им прошла в голову простая идея — а давайте создадим единую таблицу, в которой каждому символу поставим в соответствие число. Так появилась таблица ASCII (American standard code for information interchange).

Когда люди стали пользоваться компютером не только в Америке (точнее говоря, не только в англоговорящих странах), то встал вопрос о том, что в таблице не хватает места. Так появились другие таблицы кодировок:

Python версии 3 использует Unicode — кодировку, которая на данный момент включает в себя знаки почти всех письменных языков мира. Emoji в ней, кстати, тоже есть ��������‍����

При сравнении строк, Python переводит все символы строки в числа и производит сравнение чисел.

Если перевести “числовые” строки из примеров выше в списки чисел, то получится:

  • ’12’ = [49, 50]
  • ’45’ = [52, 53]
  • ‘4’ = [52]
  • ’30’ = [51, 48]

Когда же мы пишем ‘4’ < '30' , то Python снова сравнивает числа обоих строк по очереди, но на этот раз получается иначе: 52 < 51 - False и ответ получается '4' >’30’ , что абсолютно верно с точки зрения сравнения строк, но абсолютный бред с точки зрения сравнения чисел.

Python сравнивает числа по очереди. Если он уже на первом числе может ответить на вопрос “кто больше”, он прекращает сравнение и выдает ответ. Если же строки имеют одинаковую первую букву, то сравниваться они будут по второй и так далее. Такое сравнение называется лексикографическим

Поэтому, если вы работаете с числами, то всегда работайте с ними как с числами, а не как со строками.

Условия

Все рассматриваемые нами ранее программы имели линейную структуру — программа просто выполняла инструкции одну за другой сверху вниз. При этом никаких способов повлиять на ход выполнения у нас не было (разве что только на уровне выводимых на экран параметров). Также важно то, что наши предыдущие программы обязаны были выполнить все инструкции сверху вниз, в противном случае они бы завершались ошибкой.

Теперь предположим, что мы хотим определить абсолютное значение любого числа. Наша программа должна будет напечатать сам x в случае, если он неотрицателен и -x в противном случае. Линейной структурой программы здесь не обойтись*, поэтому нам на помощь приходит инструкция if (если). Вот как это работает в питоне:

>>> # Ввод данных с преобразованием типа >>> x = int(input()) >>> >>> if x > 0: . print(x) >>> else: . print(-x) 

На самом деле в python есть функция abs() , с помощью которой можно взять модуль числа. Но в качестве примера использования конструкции if и так хорошо.

Разберем этот кусочек кода. После слова if указывается проверяемое условие (x > 0) , завершающееся двоеточием (это важно). После этого идет блок (последовательность) инструкций, который будет выполнен, если условие истинно. В нашем примере это вывод на экран величины x . Затем идет слово else (иначе), также завершающееся двоеточием (и это важно), и блок инструкций, который будет выполнен, если проверяемое условие неверно. В данном случае будет выведено значение -x .

Обратите особенное внимание на отступы во фрагменте кода выше. Дело в том, что в питоне, для того, чтобы определить, какой именно код выполнить в результате того или иного условия используется как знак двоеточия (в строке с самим условием), так и отступы от левого края строки.

Небольшая ремарка относительно табуляции. Мы используем 4 пробела! В современных текстовых редакторах при нажатии на tab автоматически вставляется 4 пробела. Не надо жать 4 раза кнопку space как вот тут. Никакой войны, никаких табов. Просто 4 пробела.

Во многих других языках вместо отступов используются конструкции, явно указывающие на начало (begin или открывающаяся фигурная скобка в Си) и конец инструкций, связанных с условием (end или закрывающаяся фигурная скобка в Си). Отступы же выполняют примерно ту же роль, но и заодно делают код более читаемым, позволяя читающему быстро понять, какой именно код относится к условию.

Таким образом, условные конструкции в питоне имеют следующий общий вид:

if Условие: блок инструкций, в случае если условие истинно else: блок инструкций, в случае если условие не выполняется 

Вторая часть условной конструкции (та, что с else) может и отсутствовать, например так:

>>> x = int(input()) >>> >>> if x  0: . x = -x . >>> print(x) 

Эта программа тоже выведет абсолютное значение x, как и та, что была ранее.

Операторы сравнения

Все операторы сравнения в питоне достаточно интуитивны. Вот список основных:

> — больше. Условие истинно, если то, что слева от знака больше того, что справа.
< - меньше. Условие истинно, если то, что слева от знака меньше того, что справа.
>= — больше либо равно.
== — в точности равно.
!= — не равно.

Вложенные условные инструкции

Условия могут быть вложены одно в другое, чтобы реализовывать еще более сложную логику, например:

>>> a = int(input()) >>> b = int(input()) >>> >>> if a > 0: . if b > 0: . print("a, b > 0") . else: . print("a > 0, b < 0") . else: . if b > 0: . print("a, b < 0") . else: . print("a < 0, b >0") . 

Главное, не забывать отступы и двоеточия.

Тип данных bool

Операторы сравнения возвращают значения специального логического типа bool. Значения логического типа могут принимать одно из двух значений: True (истина) или False (ложь) .

Если преобразовать логическое True к типу int , то получится 1 , а преобразование False даст 0 . При обратном преобразовании число 0 преобразуется в False , а любое ненулевое число в True . При преобразовании str в bool пустая строка преобразовывается в False , а любая непустая строка в True .

Рассмотрим несколько примеров:

>>> # Сравнение строки >>> name = input('Введите своё имя:') >>> if name != '': >>> print('Привет,', name) >>> else: >>> print('Вы не ввели своё имя!') 
>>> # Преобразование bool к int >>> print(int(True)) 1 >>> print(int(False)) 0 

Обратите внимание, ключевые слова True или False пишутся с большой буквы. Если написать их с маленькой, то python подумает, что это переменная, попытается её найти и сломается, когда не найдет 🙁 . А если вы вздумаете называть свои переменные false или true , то сдать зачет по курсу вам не светит 🙂 . Учитесь сразу хорошему стилю программирования.

>>> # Преобразование bool к int >>> print(int(true)) Traceback (most recent call last): File "", line 1, in module> print(int(true)) NameError: name 'true' is not defined 

Логические операторы

Если мы хотим проверить два или более условий за раз, мы можем воспользоваться операторами and , or или not . Вот как они работают:

and (логическое И) возвращает истину ( True ) только в случае если оба условия по отдельности верны (тоже возвращают True )
or (логическое ИЛИ) вернет истину в случае, если хотя бы одно из условий верно.
not (логическое НЕТ) возьмет результат условия и “обратит” его. То есть, если результат условия True , то not примененный к этому условию вернет False и наоборот.

Давайте посмотрим как это работает на примере. Код ниже проверяет, что хотя бы одно число из двух нацело делится на 10 (кончается на 0) и если так, то печатает YES, а если нет, то печатает NO:

>>> a = int(input()) >>> b = int(input()) >>> >>> if a % 10 == 0 or b % 10 == 0: . print('YES') . else: . print('NO') . 

Пусть теперь мы хотим проверить, что числа a и b должны быть еще и обязательно больше нуля:

>>> a = int(input()) >>> b = int(input()) >>> >>> if (a % 10 == 0 and a > 0) or (b % 10 == 0 and b > 0): . print('YES') . else: . print('NO') . 

Как видите, мы можем не только использовать and и or в одном if , но и группировать условия скобками для того, чтобы явно обозначить приоритет вычисления условий.

Посмотрим пример с not . Пусть мы хотим проверить, что число a — положительное, а число b — неотрицательное. Это можно проверить вот таким условием:

>>> if a > 0 and not (b  0): . pass . 

Оператор pass очень полезен, когда нужно ничего не делать. Если его не поставить, то будет синтаксическая ошибка. А так, код считается правильным!

Кстати, not (b < 0) можно было бы и заменить на b >= 0 и код бы работал точно так же.

Конструкция elif

Иногда писать конструкции if-else долго и утомительно, особенно если приходится проверять много условий разом. В этом случае на помощь придет elif (сокращение от else if). По сути elif позволяет существенно упростить конструкцию ниже:

>>> if a > 0: . pass . else: . if b > 0: . pass . 

И сделать ее вот такой:

>>> if a > 0: . pass . elif b > 0: . pass . 

Обратите внимание, мы избавились от одного уровня вложенности. То есть, сам код стал более читаемым, но при этом нисколько не проиграл в функциональности. Разумеется, конструкции типа if-elif могут завершиться и блоком else , например так:

>>> if a > 0: . pass . elif b > 0: . pass . elif c > 0: . pass . else: . pass . 

Задача: знак числа

В математике есть функция sgn, показывающая знак числа. Она определяется так: если число больше 0, то функция возвращает 1. Если число меньше нуля, то функция возвращает -1. Если число равно 0, то функция возвращает 0. Реализуйте данную функцию — для введенного числа выведите число, определяющее его знак. Используйте операторы сравнения и конструкцию if-elif-else .

>>> x = int(input()) >>> >>> if x > 0: . print(1) . elif x  0: . print(-1) . else: . print(0) . 

Задача: високосный год

Дано натуральное число. Требуется определить, является ли год с данным номером високосным. Если год является високосным, то выведите YES, иначе выведите NO. Напомним, что в соответствии с григорианским календарем, год является високосным, если его номер кратен 4, но не кратен 100, а также если он кратен 400.

>>> year = int(input()) >>> if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): . print('YES') . else: . print('NO') . 

Ссылки по теме

  • http://pythontutor.ru/lessons/ifelse/
  • http://pythonicway.com/python-conditionals

Домашнее задание

Вам надо написать на питоне 6 программ, каждая из которых будет спрашивать у пользователя 3 числа (a, b, c) и печатать на экран удовлетворяют ли введенные числа перечисленным свойствам:

  1. a и b в сумме дают c
  2. a умножить на b равно c
  3. a даёт остаток c при делении на b
  4. c является решением линейного уравнения ax + b = 0
  5. a разделить на b равно c
  6. a в степени b равно c

Оформите каждую программу в виде отдельного файла с расширением .py .

Допишите функцию, которая принимает 3 числа, сравнивает между собой и возвращает количество совпадающих чисел

Допишите функцию, которая принимает 3 числа, сравнивает между собой и возвращает количество совпадающих чисел. Соответственно, программа может возвращать одно из трех чисел: 3 — если совпадают все, 2 — если совпадают 2 числа, 0 — если все числа различны.

Примечание:
К каждой задаче прилагается свое интерактивное окно. На данном этапе требуется только дописать функцию. Код пишется под комментарием «#Вставьте свой код ниже» и не должен выходить за пределы функции, т.е. до строчки «return». Когда напишете свой код, нажмите кнопку «Run», чтобы запустить проверку. В окне результата будут перечислены номера проверок и их результат. Если в окне результата выскакивает ошибка или значение «КО», значит задание решено с ошибкой. В случае успеха все проверки должны выдавать результат «ОК».
Все выражения, написанные заранее, изменять запрещается.

# Функция find_equal принимает 3 числа var_1, var_2 и var_3
# Необходимо произвести их сравнение
# Количество повторяющихся чисел необходимо присвоить переменной count

def find_equal(var_1, var_2, var_3):
#Вставьте свой код ниже

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Допишите функцию, которая принимает 2 числа, сравнивает между собой и возвращает наименьшее
всем привет, помогите пожалуйста с задачкой. сейчас прохожу курс основы python. Сама вообще не.

Напишите функцию, которая принимает массив чисел и возвращает разницу между наибольшим и наименьшим числом.
Напишите функцию getDifference, которая принимает массив чисел numbers и возвращает разницу между.

Реализовать функцию, которая принимает массив и возвращает количество простых чисел в нем
Ребят , есть задачи , а в частности нужно с помощью функций и деления по остатку (%) написать.

Реализуйте функцию getDaysBetweenDates которая принимает на вход две даты и возвращает количество полных дней между ними
Реализуйте функцию getDaysBetweenDates которая принимает на вход две даты и возвращает количество.

3850 / 2138 / 566
Регистрация: 02.09.2015
Сообщений: 5,425

def find_equal(var_1, var_2, var_3): return 4 - len({var_1, var_2, var_3})

Вирусоборец

13178 / 6988 / 1471
Регистрация: 06.09.2009
Сообщений: 25,890

Arsegg, если все числа различны, то возвращать 0

Добавлено через 6 минут

1 2 3 4 5 6 7 8 9 10 11
def find_equal(var_1, var_2, var_3): if var_1 == var_2: count = 2 if var_1 == var_3: count += 1 else: if var_1 == var_3 or var_2 == var_3: count = 2 else: count = 0 return count

Допишите функцию, которая принимает 2 числа, сравнивает между собой и возвращает наименьшее

всем привет, помогите пожалуйста с задачкой. сейчас прохожу курс основы python. Сама вообще не программист, но пытаюсь разобраться. Вроде программу написала, с задачей справляется, но после проверки тестовой системы нашего курса выдает, что неверно. мой код после #

def find_min(var_1, var_2):
#Вставьте свой код ниже
var_1 = input()
var_2 = input()
if var_1 < var_2:
print(var_1)
elif var_1 > var_2:
print(var_2)
return min

задание:
Допишите функцию, которая принимает 2 числа, сравнивает между собой и возвращает наименьшее.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Допишите функцию, которая принимает 3 числа, сравнивает между собой и возвращает количество совпадающих чисел
Допишите функцию, которая принимает 3 числа, сравнивает между собой и возвращает количество.

Напишите программу, которая сравнивает два числа между собой
Пример: Введите 2 целых числа: 12 21 12 меньше 21

Написать функцию, которая сравнивает 2 целых числа и возвращает результат
Добрый день, помогите пожалуйста написать программу: Написать функцию, которая сравнивает 2 целых.

Напишите функцию, которая сравнивает 2 числа и возвращает результат в виде одного из знаков: >,
Напишите функцию, которая сравнивает 2 числа и возвращает результат в виде одного из знаков: >,<,=.

Написать функцию, которая сравнивает два целых числа и возвращает результат сравнения
Кто знает как решить данную задачу на С++? Написать функцию, которая сравнивает два целых числа и.

2421 / 1463 / 633
Регистрация: 01.11.2021
Сообщений: 2,266

Функция принимает два числа, но вводить их не нужно внутри нее. И надо возвращать значение, а не печатать внутри функции.

1 2 3 4 5 6 7 8 9 10 11 12
def find_min(var_1, var_2): # Вставьте свой код ниже if var_1  var_2: min = var_1 else: min = var_2 return min var_1 = int(input()) var_2 = int(input()) result = find_min(var_1, var_2)

Регистрация: 02.02.2022
Сообщений: 1
Возможно этот пример поможет разрбраттся:

def find_min(var_1, var_2): if var_1 > var_2: print(var_2) return var_2 if var_2 > var_1: print(var_1) return var_1 find_min(20,10)

Вирусоборец

13178 / 6988 / 1471
Регистрация: 06.09.2009
Сообщений: 25,890

1 2 3 4 5 6 7 8 9
def find_min(var_1, var_2): if var_1  var_2: return var_1 else: return var_2 v1 = float(input()) v2 = float(input()) print(find_min(v1, v2))

Регистрация: 02.02.2022
Сообщений: 5

спасибо за ответ, но получается по условиям задания, моя программа должна заканчиваться до команды return min

Регистрация: 26.11.2021
Сообщений: 39

1 2 3 4 5 6 7
def find_min(var_1, var_2): return min(var_1, var_2) v1 = float(input()) v2 = float(input()) print(find_min(v1, v2))

Эксперт Python

5415 / 3839 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1

1 2 3 4 5 6 7
>>> def find_min(x, y): return x if x  y else y >>> print(find_min(2,3)) 2 >>> print(find_min(3,2)) 2 >>>

ЦитатаСообщение от sasacool Посмотреть сообщение

Напишите функцию, которая сравнивает два числа и возвращает результат сравнения в виде одного из знаков: >, < или =. PYTHON

LegendaryGhost

За правилами створення складних документів створіть текстовий документ твори Лесі Українки (біографія, основні твори), обсяг: 5-10 сторінок. Застосуйт … е до абзаців, що містять назви творів, стиль Заголовок 2. За допомогою колонтитулів створіть нумерацію сторінок. На початку документа створіть автоматичний зміст.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *