2012-10-15 3 views
1

Я простую функцию python, которая принимает два входа и выводит некоторый текст.Простая функция Python

Здесь,

def weather(): 
    israining_str=input("Is it raining (1 or 0) ? ") 
    israining = bool(israining_str) 

    temp_str=input("What is the temp ? ") 
    temp = float(temp_str) 

    if israining==True and temp<18: 
     return "Umbrella & Sweater" 
    elif israining==True and temp>=18: 
     return "Umbrella" 
    elif israining==False and temp<18: 
     return "Sweater" 
    else: 
     return "Cap" 

Тестовые данные -

>>> 
Is it raining ? 0 
What is the temp ? 43 
Umbrella 
>>> ================================ RESTART ================================ 
>>> 
Is it raining ? 1 
What is the temp ? 43 
Umbrella 
>>> 

Если дождь ложна это саван дают Sweater или Cap. Но мой код дает истинное значение даже israining_str == 0 или israining_str == 1

Где я делаю неправильно?

+0

питона версии? –

+0

Комментарий, тестирование непосредственно для значений bool по сравнению с True или False не очень хороший стиль, поскольку вы можете написать «if israining:». с эквивалентным значением «если bool (israining) == True:» - но будет короче и яснее. (также вы должны написать «если не учить:» в третьей ветке) –

+0

@AshwiniChaudhary 3.x – ChamingaD

ответ

7

Вот ваша проблема:

>>> bool("0") 
True 

Любая непустая строка Правда, когда преобразуется в логическое значение. Вы можете сделать bool(int(israining_str)), чтобы конвертировать в int, а затем bool, что даст вам номер ноль, если человек вводит строку "0".

2

Вы используете python 3.x? Если это так, input возвращает строку. bool(youstring) вернет True, если строка не пуста.

+0

ya 3.x. благодаря :) – ChamingaD

1

Согласно документации питона:

BOOL (х)

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

Вы передаете непустую строку этой функции, а непустая строка - True.

Вы можете написать что-то вроде этого:

t = int(israining_str) 

# here you can check if user's input is 0 or 1 and ask user again if it is not 

israining = False 
if t: 
    israining = True 
Смежные вопросы