2013-10-03 3 views
1
again = True 

while(again == True): 

    yn = input("Do you want to do it again? (y or n)").lower() 

    if(yn == 'y' or 'yes'): 
     again == True 
    elif(yn == 'n' or 'no): 
     again == False 

Как мне заставить этот код работать? Когда я бегу, он всегда будет правдой .. =/Если внутри петли

+1

Обратите внимание, что на второй по последнюю строку вам не хватает цитаты. 'elif (yn == 'n' или 'no'):' –

ответ

6

Давайте начнем с самого начала:

while(again == True):

  1. Вам не нужно круглые скобки здесь

  2. Вам не нужен == True бит. again достаточно, поскольку оно будет иметь логическое значение True.

if(yn == 'y' or 'yes'):

  1. Еще раз, скобка не нужны.

  2. Эта строка кода переведена как if (yn == 'y') or ('yes'):.Это всегда будет верно, как 'yes' считается True (не пустая строка)

  3. В питоне, что вам нужно сделать if yn == 'y' or yn == 'yes':

  4. Или вы можете сделать if yn in ('y', 'yes')

again == True

  1. == предназначено для сравнения. = предназначено для выполнения заданий

  2. Это происходит в вашем блоке else.

+1

' yn.startswith («y») '- хороший подход для да/нет ... – kindall

1

В последние 4 строки вашей программы вы не присваивающих again иметь значение верно, вы проверяете, если again равен True/False ,

== полностью отличается от =.

0

Вы принимаете оператора равенства == с оператором присваивания =. Также утверждение yn == 'y' or 'yes' является ошибкой, так как правая сторона является непустой строкой, которая оценивается в True в булевом контексте.

Объявление переменной просто для обработки завершения цикла не является питоническим. Я хотел бы переписать код полностью быть:

while True: 
    yn = input("Do you want to do it again? (y or n)").lower() 
    if yn in ('n','no'): 
     break 
-1

ваш, если еще Постулаты должны быть

если ххх: снова = True Элиф YYY: снова = False

разница Примечание между = и ==.

1

Это не будет работать:

if (yn == 'y' or 'yes'): 
    # ... 
elif(yn == 'n' or 'no): 

Правильный путь:

if yn in ('y' or 'yes'): 
    # ... 
elif yn in ('n' or 'no): 

Кроме того, в условиях присвоения ошибаемся, используйте один =. Они должны выглядеть следующим образом:

again = True 
# ... 
again = False 
+0

Хорошо, теперь это работает, но когда я ввожу что-то другое, кроме него, оно повторится. Как я могу реагировать только на да? – user2840982

+0

@ user2840982 затем добавьте другое условие в 'else:', чтобы рассмотреть этот случай, например, попросить пользователя ввести правильный ввод. Или сделайте так, как предлагает @JasonSundram, и замените всю строку 'elif' на' else: ' –

0

если (уп == «у» или «да»): # ----

Значение выше утверждение всегда справедливо независимо от VALU из «упа», потому что правая сторона "Или" всегда верно в вашем случае. поэтому он никогда не выполнит еще часть. Чтобы избежать этого, вам нужно сравнить значение «yn» с каждой возможностью. Один из простых способов заключается в том, что

if(yn == 'y' or yn == 'yes'): 
    again == True 
elif(yn == 'n' or yn == 'no): 
    again == False 
Смежные вопросы