Моя попытка: статус не регистрируется как ошибка, когда он должен быть в python - PullRequest
0 голосов
/ 25 мая 2020

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

Моя общая инструкция try работает и возвращает ответы, которые я ищу, когда мои аргументы являются правильными значениями, однако, когда они должны быть переданы моему заявлению except, вместо этого я получаю 'False'. Я уверен, что это легко исправить, и из-за отсутствия знаний в целом мне сложно понять, с чего начать поиск ответов.

#Function designed to give a 'true' if you should bring and umbrella and 'false' is not
#'true' if its sunny and chance of rain > .5, cloudy and chance of rain > .2, rainy
#'false' if else
def take_umbrella(weather, rain_chance):
  try:
    weather == 'sunny' or 'cloudy' or 'rainy'
    rain_chance <= 1.0
    return (weather == 'sunny' and rain_chance >= .5) or (weather == 'cloudy' and rain_chance >=.2) or (weather == 'rainy' and rain_chance <= 1)

 #I am stuck on why my print statement with the incorrect argument paremeters isn't 
 #triggering the except statement, instead it produces 'false'
 #p.s after many attemps, I'm not sure what to put after except either
  except weather != ('sunny' or 'cloudy' or 'rainy') and rain_chance > 1:
    return "{} must either be sunny, cloudy, or rainy AND {} must be an float equal to or less then 1".format(weather, rain_chance)

print(take_umbrella('overcast',2))

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Думаю, вам нужен оператор if-else вместо блока try / except:

def take_umbrella(weather, rain_chance):
    if rain_chance <= 1.0 and weather in ['sunny', 'cloudy', 'rainy']:
        return True
    else:
        return "{} must either be sunny, cloudy, or rainy AND {} must be an float equal to or less then 1".format(weather, rain_chance)

print(take_umbrella('overcast', 2))

Этот код будет делать то, что вы хотите. Блоки try / except используются по-другому. Это простой пример, просто продемонстрируйте его использование:

x = "abc123"
for i in x:
    try:
        print(int(i))
    except ValueError:
        print(f"Failed to convert '{i}' into an integer!")

Вывод:

Failed to convert 'a' into an integer!
Failed to convert 'b' into an integer!
Failed to convert 'c' into an integer!
1
2
3

Без блока try / except, захватывающего ValueError, который возникает при попытке выполнить int("a") программа полностью завершилась бы аварийным завершением, прежде чем она смогла бы перебрать всю строку.

0 голосов
/ 25 мая 2020

Я думаю, вам не нужно использовать оператор except, лучше заменить его оператором if:

def take_umbrella(weather, rain_chance):
    if weather != ('sunny' or 'cloudy' or 'rainy') and rain_chance > 1:
        return "{} must either be sunny, cloudy, or rainy AND {} must be an float equal to or less then 1".format(weather, rain_chance)
    else: # not necessary
        return (weather == 'sunny' and rain_chance >= .5) or (weather == 'cloudy' and rain_chance >=.2) or (weather == 'rainy' and rain_chance <= 1)



Кроме того, я не думаю, что эти строки полезно в том смысле, что вы написали - будет только значение типа bool, которое вы нигде не используете:

weather == 'sunny' or 'cloudy' or 'rainy'
rain_chance <= 1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...