For-l oop с условием else выполняется, даже если условие истинно - PullRequest
1 голос
/ 13 января 2020

Начинающий вопрос! Условие else выполняется, хотя оператор for равен True и печатает текстовое сообщение, в котором говорится, что он не нашел ключ. Поскольку оператор True также дает мне необходимую информацию, проблема в том, что он работает else, хотя for равен True.

input_namn = input("Ange ett namn: ")               
for key in rooms_with:                          
    if input_namn in rooms_with[key]:
        print (input_namn + "\ndelar rum med \n" + key)
else: 
    print ("\nPersonen du angav är inte en del av föreningen\n")

Что я сделал не так?

1 Ответ

2 голосов
/ 14 января 2020

Ваш отступ неверен в предложении else.

Поскольку он находится на том же уровне, что и for l oop, else принадлежит for l oop, а не оператор if.

Просто отступ предложение else на том же уровне, что и if, как показано ниже:

input_namn = input("Ange ett namn: ")
for key in rooms_with:
    if input_namn in rooms_with[key]:
        print (input_namn + "\ndelar rum med \n" + key)
    else: # This is indented correctly
        print ("\nPersonen du angav är inte en del av föreningen\n")

Что происходит, когда else принадлежит for l oop?

Python Документация говорит:

* Операторы 1028 * L oop могут содержать предложение else; он выполняется, когда l oop завершается из-за исчерпания итерируемого (с for) или когда условие становится ложным (с while), но не тогда, когда l oop завершается оператором break .

Как правило, в конце блока l oop выполняется блок else, за исключением случаев, когда циклы были остановлены оператором break.

И так как в вашем l oop не было оператора break, ваша ветвь else была выполнена.

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