Python функция не подтверждает мой ввод - PullRequest
0 голосов
/ 18 июня 2020

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

То, как у меня это есть, что угодно ниже 26 - холодно, а выше - горячо. Проблема в том, что все выше 10 возвращается, так как жарко. Не понимаю, почему я делаю не так. Любая помощь / совет приветствуются.

temperature = input("What is the temperature? ")

if temperature == "26":
    print("The weather is average")
elif temperature <= "26":
    print("The weather is hot")
elif temperature >= "26":
    print("It's a cold day")

else:
    print("Invalid")

Результат

What is the temperature? 17
The weather is hot

Ответы [ 5 ]

0 голосов
/ 18 июня 2020

Ваши знаки > и < перевернуты. Лучше всего преобразовать числа в целые числа / числа с плавающей запятой:

temperature = int(input("What is the temperature? "))

if temperature == 26:
    print("The weather is average")
elif temperature > 26:
    print("The weather is hot")
elif temperature < 26:
    print("It's a cold day")

else:
    print("Invalid")

Кстати, с if temperature == 26:,

= in elif temperature => "26": и elif temperature <= "26": никогда не будут б / у.

0 голосов
/ 18 июня 2020

Программа работает согласно записанному логу c. Лог c неверен. Вы хотели вывести «холодный», если температура меньше 26. Но в коде вы написали

elif temperature >= "26":
    print("It's a cold day")

, что означает печать «холодный», если температура больше или равна 26, а также вам необходимо сравнивать целые числа (не строки).

Ниже приведен код

temperature = int(input("What is the temperature? "))

if temperature == 26:
    print("The weather is average")
elif temperature > 26:
    print("The weather is hot")
elif temperature < 26:
    print("It's a cold day")
else:
    print("Invalid")
0 голосов
/ 18 июня 2020

Ваши два теста поменяны местами (у вас ниже 26 горячих и выше холодных)

0 голосов
/ 18 июня 2020

Есть несколько проблем с кодом в его нынешнем виде:

  1. Неверные операторы равенства.

Я бы также предложил не использовать = с обоими операторы < и > просто для лучшей согласованности. Тем более, когда есть отдельная проверка регистра специально для ==.

Проблема сравнения температуры в виде строки состоит в том, что значения сравниваются лексикографически. Несколько примеров для объяснения проблемы:

"14" is less than "67"

Это верно, но проблема связана с разной длиной строки температуры

"3" is more than "26" lexicographically -> Погода жаркая

"100" is less than "26" lexicographically -> Холодный день

Лучше убедиться, что мы конвертируем температуру и сравниваем их как целые числа.

Алфавиты, отличные от числа, не обрабатываются. Я использую isdecimal(), чтобы проверить это. ( подробности см. В этом ответе )
temperature = input("What is the temperature? ")

if not temperature.isdecimal():
    print("Temperature entered '{}' is not an int!".format(temperature))
else:
    temperature = int(temperature)
    if temperature == 26:
        print("The weather is average")
    elif temperature > 26:
        print("The weather is hot")
    elif temperature <= 26:
        print("It's a cold day")

    else:
        print("Invalid")

Результат

What is the temperature? 17
It's a cold day

What is the temperature? 26
The weather is average

What is the temperature? 3
It's a cold day

What is the temperature? 100
The weather is hot

What is the temperature? dsf86
Temperature entered 'dsf86' is not an int!

What is the temperature? 34.23
Temperature entered '34.23' is not an int!
0 голосов
/ 18 июня 2020

Попробуйте это так:

temperature = int(input("What is the temperature? "))

if temperature == 26:
    print("The weather is average")
elif temperature > 26:
    print("The weather is hot")
elif temperature < 26:
    print("It's a cold day")

else:
    print("Invalid")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...