Как проверить, есть ли равное число, а затем вывести наибольшее число - PullRequest
0 голосов
/ 15 января 2019

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

Я сделал это:

def max_number(num1, num2, num3):
  if len(max(num1, num2, num3)) > 1:
    return "It's  a tie"
  return max(num1, num2, num3)

Но, как я выяснил, len не работает с int , и я также знаю, что могу попробовать все возможности, используя elif , но это будет сложнее, если у меня будет больше параметров. Есть ли способ, которым я могу решить это?

Спасибо

Ответы [ 6 ]

0 голосов
/ 15 января 2019

Вы можете использовать метод list.count для подсчета количества вхождений максимального значения:

def max_number(*numbers):
    m = max(numbers)
    if numbers.count(m) > 1:
        return "It's a tie"
    return max(numbers)
0 голосов
/ 15 января 2019

Еще один метод:

def max_number(num1, num2, num3):
    sorted_list = sorted([num1, num2, num3])
    if sorted_list[1] == sorted_list[2]:
        return "It's a tie"
    else:
        return sorted_list[2]
0 голосов
/ 15 января 2019

Вы можете использовать heapq.nlargest для получения двух самых больших из указанных чисел, и если они равны, это считается ничьей:

from heapq import nlargest
from operator import eq

def max_number(*numbers):
    if eq(*nlargest(numbers, 2)):
        return "It's a tie"
    return max(numbers)
0 голосов
/ 15 января 2019

Вы можете передать числа конструктору set и проверить, имеет ли набор длину числа чисел:

def max_number(*numbers):
    if len(set(numbers)) == len(numbers):
        return max(numbers)
    return "It's a tie"
0 голосов
/ 15 января 2019

Простое решение:

def max_number(num1, num2, num3):
  m = max(num1, num2, num3)
  return m if [num1, num2, num3].count(m) == 1 else "It's  a tie"
0 голосов
/ 15 января 2019

Используйте понимание списка, затем len для списка:

def max_number(*nums):
  m = max(nums)
  if len([i for i in nums if i == m]) > 1:
    return "It's  a tie"
  return max(nums)
...