Логическая переменная с истинным значением не входит в правильное условие «если (переменная)», а переходит в состояние «не (переменная)».

#python #boolean

Вопрос:

Я создал функцию, которая, когда возвращает значение True , помещает это значение True в переменную и помещает эту переменную в условие if, Она переходит в другое условие с elif not помощью, когда я попытался распечатать ее, Она печатает ее один раз как True и один раз как False, только с одной строкой печати.

Почему он меняет значения И как это исправить? Изменить: удалил последнюю часть вывода, потому что она получена из печати за пределами функции, где это происходит, теперь значения True и False поступают только из одной строки печати. «X» и отсортированный список не являются частью проблемы, только печать и условия if

Код:

 # letter_guessed = "s", old _letters_guessed = [] (empty list)

is_valid = check_valid_input(letter_guessed, old_letters_guessed) # is_valid = True
print(is_valid) 
if(is_valid): # skips this
    old_letters_guessed.append(letter_guessed)
    return True
elif not(is_valid): # enters this
    sorted_list = " -> ".join(old_letters_guessed)
    print("X")
    print(sorted_list)
    return False
 

Выход:

И Истина, и ложь исходят из одной и той же строки печати, другой печати нет

 True
False
 

Комментарии:

1. Отладка печати-это ужасная трата вашего времени. Вам было бы лучше узнать, как использовать отладчик, который мгновенно обнаружил бы вашу проблему.

2. Откуда взялся последний отпечаток? Если вы пропустили это, то, вероятно, пропустили и какой-то другой отпечаток.

3. Во-первых, обратите внимание, что перед «X» напечатаны два логических значения , но до этого в вашем коде была только одна инструкция print print("X") , и самая близкая из print(is_valid) них . Ясно, is_valid что есть False . Между гипотезой о том, что if/else нарушен в python, и гипотезой is_valid , имеющей значение, которое превосходит ваши ожидания, последнее имеет место каждый раз.

4. Чтобы добавить к моему последнему комментарию, я почти уверен, что вы напечатали в check_valid_input, что было правдой, но на самом деле к моменту завершения оно возвращает значение False. Вторая печать на самом деле является печатью(is_valid), которую мы видим в коде, что является ложным.

Ответ №1:

Чтобы проследить за некоторыми комментариями. Ваша функция check_valid_input, похоже, также выводит логическое значение. Это единственное объяснение того, почему выводятся два логических значения. В приведенном вами примере значение is_valid равно False.

 letter_guessed = "s", 

old_letters_guessed = [] 

is_valid =  False
print(is_valid) 
def f():
    if(is_valid): # skips this
        old_letters_guessed.append(letter_guessed)
        return True
    else: # enters this
        sorted_list = " -> ".join(old_letters_guessed)
        print("X")
        print(sorted_list)
        return False

f()
 

Это работает, как и ожидалось.