#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()
Это работает, как и ожидалось.