Ошибка Python при поиске наибольшего числа

Я пытаюсь решить проблему techgig с поиском наибольшего из трех чисел. проблема в следующем

You just need to take three number as input from stdin and you need to find greatest of them.

Input Format

You will be taking three numbers as an input from stdin one on each line respectively.

Constraints

-100000 <= N <= 100000

Output Format

You need to print the greatest of the three numbers to the stdout.

Sample TestCase 1

Input

902
100
666

я сделал это

''' Read input from STDIN. Print your output to STDOUT '''
#Use input() to read input from STDIN and use print to write your output to STDOUT
import sys
def main():

    s=sys.stdin.read()
    s=s.split("\n")
    a=int(s[0])
    b=int(s[1])
    c=int(s[2])
    temp=0
    e=[a,b,c]
    for i in e:
        if i > temp:
            temp=i
    print(temp)

    '''if (a>b) and (a>c):
        temp = a
    elif (b>a) and (b>c):
        temp = b
    else:
        temp = c
    print(temp)'''


main()

Он имеет предопределенный ввод 902, 100, 666. Мой код показывает вывод 902, и ожидаемый также показывает 902, но его отображение не удалось, почему? В приведенном выше коде, прокомментированном или не прокомментированном, оба показа не удались.

Что произойдет, если эти три числа равны -1, -2, -3?

mkrieger1 30.05.2019 18:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
202
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

temp инициализируется как 0, но ввод допускает отрицательные числа. Однако 0 будет считаться большим, чем любой отрицательный ввод. Это означает, что ваш алгоритм не сработает для тестовых случаев с отрицательным входом.

Инициализируйте temp до значения меньше минимально допустимого ввода:

temp = -100001 # One less than the minimum

Carcigenicate это для общего случая, но здесь все входные данные положительные, тогда почему код не удался?

brian grey 30.05.2019 18:54

@briangrey В остальном ваш алгоритм выглядит нормально. Я думаю, что это не работает для случаев, отличных от того, что вы упомянули. Вероятно, у него есть скрытые тестовые случаи, в которых он не работает. Внесите изменения и повторите попытку.

Carcigenicate 30.05.2019 18:55

Carcigenicate Итак, я взял temp -1000001, но тоже не получается, тогда какая должна быть temp или какая-то другая ошибка?

brian grey 30.05.2019 18:59

Carcigenicate Я взял значение temp a, т.е. первое значение, затем оно не должно выдавать ошибку, но также выдает ошибку

brian grey 30.05.2019 19:03

@briangrey Лучшее, что я могу сказать, это то, что их проверка нарушена (что не является чем-то неслыханным), или есть нишевый угловой случай, в котором она не работает. Какая ссылка на инструкцию? Я по-прежнему считаю, что ваш код выглядит нормально после того, как вы внесете изменения, которые я рекомендовал; по крайней мере хорошо по спецификациям, которые вы здесь указали.

Carcigenicate 30.05.2019 19:04

Carcigenicate там особняк для вывода вывода на STDOUT, так что это такое, это вызывает ошибку?

brian grey 30.05.2019 19:05

@briangrey print печатает на стандартный вывод, если вы не укажете иное. Может попробовать print(temp, end = ""); хотя это было бы глупо, если бы они не терпели новые строки.

Carcigenicate 30.05.2019 19:06

Carcigenicate Эта проблема есть на сайте techgig. Можете ли вы попробовать зарегистрировать, а затем Практика-Python-Greatest из 3 с проблемой Python. Веб-сайт techgig.com/practice/question/greatest-of-3-with-python/…

brian grey 30.05.2019 19:08

@briangrey Их сайт, к сожалению, не работает на мобильных устройствах; он просто отправляет меня на главную страницу.

Carcigenicate 30.05.2019 19:14

@briangrey Убедитесь, что вы установили его на Python 3, так как по умолчанию используется Python 2. Если у вас установлено значение 2, он будет печатать кортежи с тем, что у вас есть сейчас.

Carcigenicate 30.05.2019 19:19

Carcigenicate NOW показывает успешное выполнение с print(temp, end = " "); НО я открыл ту же проблему в другом браузере с другим логином, и он показывает ошибку !!! Кстати, вы можете попробовать войти в систему по ссылке выше, а затем перейти к Практика-Python-Greatest из 3 с проблемой Python.

brian grey 30.05.2019 19:21

@briangrey Я нашел тренировочный вопрос. Однако редактор не работает на мобильных устройствах. Я не могу ввести в него.

Carcigenicate 30.05.2019 19:22

Carcigenicate print(temp, end = ""); работает везде с разными браузерами и разными логинами. Но не могли бы вы сказать мне, почему он не работал с 'print (temp)' и работает с 'print (temp, end = ""); '

brian grey 30.05.2019 19:25

@briangrey print по умолчанию вставляет новую строку в конце. end = "" говорит ничего не добавлять в конце. Это действительно глупо со стороны сайта, запрещать новые строки и не сообщать вам об этом в спецификации.

Carcigenicate 30.05.2019 19:26

Carcigenicate Ха-ха, спасибо!!.

brian grey 30.05.2019 19:28
Ответ принят как подходящий

Я могу ошибаться, но в выводе говорится, что нужно печатать с использованием стандартного вывода: вам нужно напечатать наибольшее из трех чисел в стандартный вывод. Печать в python такая же, как sys.stdout.write(str(99) + '\n'). Попробуйте использовать стандартный вывод для печати результата.

sys.stdout.write(str(temp))
print по умолчанию печатает sys.stdout, если файл не указан: docs.python.org/3/library/functions.html#print Единственная разница здесь в том, что я не верю, что это вставляет новую строку, но это можно сделать с помощью print, передав аргумент end.
Carcigenicate 30.05.2019 19:21

ваш ответ или ответ Carcigenicate, т.е. 'print (temp, end = " "); оба работают, спасибо.

brian grey 30.05.2019 19:33

На самом деле они ищут вывод, как уже упоминалось, и хотя логика вашего кода верна, но вывод даст новую строку, которая будет считаться неправильной. Чтобы исправить это, мы используем оператор печати (end = "") поэтому правильный код становится

code screen shot

Надеюсь, это поможет, продолжайте кодировать.

Другие вопросы по теме