Как закончить цикл, когда условие выполнено? - PullRequest
0 голосов
/ 10 апреля 2019

Согласно моему предыдущему вопросу здесь , мой сегодняшний вопрос связан с ним. У меня постоянно обновляется глобальная переменная, и я передаю эту переменную в функцию. Эта функция состоит из цикла и условных операторов. Я хочу, чтобы цикл завершился, когда условие выполнено, но оно продолжает цикл.

Вот мой код.

class LetterAScreen:
    def identity(self): 
        global where
        lol=Identifier()
        lol.fn_compare()
        print where

    def verifier(self):
        global where
        verify=where
        if verify != 1:
            while (count>0):
                print ("try again")
                run=LetterAScreen()
                run.identity()
                run.verifier
                print ("try again")
                count += 1
        else:
            print ("correct")

«Правильно» - это когда переменная превращается в единицу. В противном случае это не правильно, и пользователь должен повторить попытку. Выходной результат в конечном итоге выглядит следующим образом.

#incorrect inputs
19
try again
try again
19
try again
try again
19
try again
try again
19
try again
try again
19
try again
try again
#correct inputs but loop doesn't end
1
try again
try again
1
try again
try again
1
try again
try again
1
try again
try again

Важной частью класса Identifier является только переменная обновления. Я считаю, что проблема в том классе, которым я поделился. Я действительно не знаю, как это работает. Я надеюсь, что вы могли бы помочь мне.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

во-первых, вам, вероятно, не нужно создавать новый экземпляр внутри метода «verifyier» (методы уже вызываются при создании экземпляра, вы можете получить доступ к экземпляру с помощью переменной «self»). Так что вместо

run=LetterAScreen()
run.identity()

запись

self.identity()

также вместо использования сложного «глобального» подхода Вы можете создать переменную экземпляра, такую ​​как self.verify, и изменить ее внутри «identifier»

class LetterAScreen:
    def __init__(self):
        self.verify = 0

также бесконечный цикл, обычно создаваемый так

while True:

Всегда будьте осторожны, используя «global» сложно, и в большинстве случаев вы можете делать все простым и понятным способом, поэтому я рекомендую вам удалить все глобальные переменные из этого скрипта, вы можете возвращать параметры из функций, использовать изменяемые объекты и т. Д. .

0 голосов
/ 10 апреля 2019

Здесь нужно отметить несколько вещей:

  • Почему вы создаете новый объект LetterAScreen в цикле?
  • Будьте осторожны при использовании глобальной переменной, обычно тамЕсть и другие способы решения этой проблемы.

Я не знаю, что делает класс Identifier, но думаю, функция fn_compare этого класса изменит переменную where?Кроме того, создание нового Identifier при каждом вызове функции identity кажется чем-то, что вы должны изменить.

При этом метод verifier необходимо скорректировать следующим образом:

def verifier(self):
    global where
    count = 1
    while (count>0 and where != 1):
        print ("try again")
        self.identity()
        count += 1
    print ("correct")

Не следует присваивать глобальную переменную where локальной, это вызовет проблемы, поскольку локальная переменная не будет обновляться в цикле.Вы можете сравнить с этой глобальной переменной where напрямую.Также я удалил переменную run, вы выполняете в экземпляре класса LetterAScreen, чтобы вы могли вызвать метод identity для объекта self (аналогично this в JS).

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