2014-01-20 6 views
0
variable1 = 0 
while variable1 != "1" or variable1 != "2" or variable1 != "3": 
    variable1 = input ("Enter variable1: ") 
print("Succes") 

Мой код никогда не выходит из цикла в то время как даже если переменная назначается 1 или 2 или 3. Могу ли я что-то пропустил или делать что-то не так? Я никогда не читал никаких документов о Python, которые сказали, или инструкции не будут работать во время циклов. Согласно исчислению высказываний это должно быть правильно, потому что True или False или False = TrueИспользование или в цикле While (Python)

Я знаю, что я не использовал целые числа.

Заранее благодарен!

+2

, что это '! = В' там делает? <зловещее пение> Убейте 'to'! Убейте 'to'! Убейте 'to'! inspectorG4dget

+0

Что происходит, когда variable1 = 'al; dfjakl; fkja; lkajdfj'? – Joe

+0

'variable1!= to "1" - синтаксическая ошибка. Почему «там»? – Izkata

ответ

4

Условие вашего цикла while ВСЕГДА будет истинным. Для того, чтобы он был ложным, variable1 должен равняться "1", "2" и "3", что невозможно для одной строки.

>>> variable1 == "1" 
>>> 
>>> variable1 != "1" 
False 
>>> variable1 != "2" 
True 
>>> variable1 != "3" 
True 
>>> False or True or True 
True # So the loop will continue execution 

вы хотите, чтобы ваш цикл в то время, чтобы выйти, если variable1 равен "1", "2" или "3"?

while not (variable1 == "1" or variable1 == "2" or variable1 == "3"): 

Если variable1 равен либо "1", "2" или "3", то это полезно представить, как будет решен условие:

while not (True or False or False): 

while not (True): 

while False: # Exit 
+0

Как мне поменяться вокруг, чтобы он работал? Спасибо за ваш ответ! – Zimano

+0

@ Zimano смотреть редактирование. – jayelm

0

Вместо 'или', вы должны использовать 'и'. Вы хотите продолжать запрашивать ввод, пока вход не является «1», и это не «2», и это не «3».

+0

Я не программист на Python (пока). Хотя мой ответ логически обоснован, решение, предлагаемое @xndrme, более элегантно. – Darren

4

Состояние вашего времени петли будет всегда вычисляться True, потому что variable1 всегда будут не равно "1" или не равна "2".

Вместо этого, вы хотите использовать not in здесь:

variable1 = 0 
while variable1 not in ("1", "2", "3"): 
    varible1 = input("Enter variable1: ") 
print("Succes") 

Однако, судя по вашей структуре кода, я думаю, что вы хотите variable1 быть целым числом, а не строка.

Если да, то вы можете использовать это на Python 3.x:

variable1 = 0 
while variable1 not in (1, 2, 3): 
    varible1 = int(input("Enter variable1: ")) 
print("Succes") 

или, если вы на Python 2.x, вы можете использовать это:

variable1 = 0 
while variable1 not in (1, 2, 3): 
    varible1 = int(raw_input("Enter variable1: ")) 
print "Succes" 
+0

Лучше использовать набор вместо кортежа, чтобы оптимизировать время поиска – inspectorG4dget

+0

Я запускаю его и никогда не останавливаюсь, не должен быть '(1,2,3)' –

+0

@xndrme - Судя по его синтаксису 'print' как как и тот факт, что он сравнивается со строками для начала, я предполагаю, что OP находится на Python 3.x. Если это так, 'input' вернет строковый объект. – iCodez

1
  1. Вам необходимо обновить переменную в цикле while
  2. Если вы используете input, то вам нужно сравнить как int

variable1 = 0 
while variable1 not in {1,2,3}: 
    variable1 = input("Enter variable1: ") 

print("Succes") 
+0

Будет лучше использовать набор вместо списка, чтобы оптимизировать время поиска – inspectorG4dget

+0

+1 Да, у вас есть точка, я обновлю ответ. –

Смежные вопросы