Вспомните `input` с циклом while, если указан неправильный ответ - PullRequest
0 голосов
/ 03 января 2019

Python не возвращается в замкнутый цикл, когда я использую continue, из-за ошибки, которую я не могу уловить.

Следующий цикл должен запросить у пользователя два общих имени, которые я настроил: George и David. Я хочу, чтобы он был настроен, поэтому Анаконда спрашивает у пользователя его имя. Если они вводят George, он говорит Hi George. Если они вводят David, там написано Hi David.

Если пользователь вводит любое другое имя, он вызывает цикл, чтобы повторить попытку. Я все еще начинающий в Python, и мои знания о контроле потока здесь показывают.

Я знаю, что continue работает только с условным while. Мой код был написан так, что: иначе, когда имя не George или David, триггер continue, который должен идти в замкнутый цикл (если имя не David или George, попросите имя снова).

name = ''
if name != 'David' and name != 'George':
    print('What is your name?')
    name  = input()
    if name == 'David':
        print('Hi David')
    elif name == 'George':
        print('Hi George')
    else:
        while name != 'George' or 'David' :
            continue

Ответы [ 2 ]

0 голосов
/ 03 января 2019
while True:
    print('what is your name?')
    name  = input()
    if name == 'David':
        print('hi david')
        break
    elif name == 'George':
        print('hi george')
        break

Вам не нужно continue в этом коде. continue обычно используется для пропуска интенсивных шагов, которые не требуют дальнейшего выполнения при соблюдении определенных условий.
Например:

while True:
    x = float(input('Enter a number: '))
    if x > 1023: 
        print (f'{x} is too large to compute') 
        #OverflowError: (34, 'Result too large')
        continue
    print (2**x) #Max: 2**1023
    break
0 голосов
/ 03 января 2019

Вы перепутали while и if.Есть несколько способов решить эту проблему:

name = ''
while True:
    print('What is your name?')
    name = input()
    if name == 'David':
        print('Hi David')
        break
    if name == 'George':
        print('Hi George')
        break

Или

name = ''
while name != 'David' and name != 'George':
    print('What is your name?')
    name = input()
if name == 'David':
    print('Hi David')
elif name == 'George':
    print('Hi George')

Или даже лучше, вы можете использовать in, чтобы проверить, является ли name элементом в set всех принятых имен.Для вызова print вам не нужно явно писать David и George снова, но вы можете использовать новую переменную name:

name = ''
while name not in {'David', 'George'}:
    print('What is your name?')
    name = input()
print('Hi {}'.format(name))
...