Хотя цикл не прерывается от вложенного оператора if до тех пор, пока действие не будет повторено дважды - PullRequest
0 голосов
/ 25 апреля 2018

Я все еще изучаю веревки с моим программированием и столкнулся с проблемой, которую не могу решить после поиска ответов

У меня есть цикл while, который проверяет, не является ли словарь пустым, или пользователь ввел определенный символ (escape-символ).

Программа работает, как и ожидалось, если пользователь вводит escape-символ в первом приглашении, но, кажется, работает неправильно, если они сначала вводят что-то другое, а затем пробуют это.

Кто-нибудь может помочь?

hand = {'p':1, 'y':1, 't':1, 'h':1, 'o':1, 'n':1}

def play_hand(hand):
    print hand
    word = raw_input('Enter word, or a "." to indicate that you are finished: ')
    while any(hand) is True or word not in '.':
        if word == '.':
            break
        elif (word == 'toy' or word == 'python') and (word != '.'):
            print '"'+ word +'"', 'earned', 'points.'
            play_hand(hand)
        else:
            print 'Invalid word, Please try again.'
            return word, play_hand(hand)
    else:
        print 'Ending'
        return

1 Ответ

0 голосов
/ 25 апреля 2018

Итак, как было предложено, я реструктурировал код и удалил рекурсию из внутренних операторов IF ELSE. Это добилось цели! Спасибо за помощь.

Вот образец сверху, сделанный таким же образом. Теперь вы можете ввести правильное слово, а также выйти, используя escape-символ.

hand = {'p':1, 'y':1, 't':1, 'h':1, 'o':1, 'n':1}

def play_hand(hand):
    while any(hand) is True:
        print hand
        word = raw_input('Enter word, or a "." to indicate that you are finished: ')
        if word == '.':
            print 'Goodbye!'
            break
        else:
            if not (word == 'toy'):
                print 'Invalid word, Please try again.'
            else:
                print '"'+ word +'"', 'earned', 'points.'
                hand = {'p':1, 'h':1, 'n':1}
...