Цикл while отвечает только на второе условие

#python

#python

Вопрос:

Мой цикл while заканчивается только тогда, когда он соответствует второму условию, первое игнорируется, я понятия не имею, что я делаю не так

 while (response !=0) or (cont != 5):
    response = os.system("ping -c 2 "   hostname)
    cont=cont 1
    print cont
    print response
  

Комментарии:

1. Ваш цикл будет продолжаться до тех пор, пока выполняется любое условие. Если вы хотите, чтобы он заканчивался, как только одно условие не выполняется, используйте and вместо or .

2. Пожалуйста, используйте subprocess.check_output или аналогичную функцию для вызова сценария оболочки вместо os.system . Таким образом, у вас будет лучший контроль над выводом. Смотрите: docs.python.org/2/library /…

3. Проблема заключалась в использовании оператора or вместо and , спасибо!

4. @LaurentLAPORTE Я посмотрю на это, спасибо!

Ответ №1:

С subprocess.call :

 import subprocess

for count in range(5);
    response = subprocess.call(["ping", "-c", "2", hostname])
    if not response:
        break
  

Предпочитаю итерацию с range или xrange .

Ответ №2:

Измените свой or на and . Когда он проверяет первое условие, и если оно равно false, а второе условие равно true, все условие будет истинным. Это означает, что либо первое условие истинно, либо второе условие истинно.

 While ( false or true ) will be while ( true )
  

Чтобы проверить оба условия, которые вы должны использовать and . Он проверяет, что оба условия должны быть true для выражения true .

 while ( false and true ) will be while ( false )

while (response !=0) and (cont != 5):
    response = os.system("ping -c 2 "   hostname)
    cont=cont 1
    print cont
    print response