2016-05-06 8 views
2

У меня нет идеи, если заголовок использует правильные термины, но я ищу, чтобы получить код и попытаться уменьшить длину кода, поэтому мне будет легче вводить в оценке. Вот и пример того, как это выглядело бы, если бы я делал это долгое время.Если заявление в Python (вложенные булевы операторы)

Valid = True 
while Valid: 
    Column = int(input("Insert Column: ")) 
    Row = int(input("Insert Row: ")) 
    if Row < 0 or Row > 9 or Column < 0 or Column > 9: 
    Valid = False 

Однако я пытался сделать что меньше делать что-то вдоль линий:

"If (Row or Column) < 0 or (Row or Column) > 0: 
    valid = False" 

Может кто-нибудь объяснить, почему это не кажется работу и может кто-то пожалуйста, показать, как они будут реши это. Я только пытаюсь уменьшить мои утверждения if, поскольку на протяжении всей оценки я буду использовать большое количество из них.

Update: - Может ли это быть также помещены в Try - Поймать, чтобы он не врезаться программы при входе в нулевое значение или значение Нет

Thanks

ответ

3

Вы можете полностью удалить инструкцию if.

Valid = True 
while Valid: 
    try: 
    Column = int(input("Insert Column: ")) 
    Row = int(input("Insert Row: ")) 
    Valid = Row in range(10) and Column in range(10) 
    except Exception as e: 
    print(e) 
    Valid = False 
+1

Хотя это работает, я бы посоветовал использовать сопоставленное сравнение '0 <= row <10' вместо 'row in range (10)', так как он лучше работает на Python 2 или если вы пытаетесь использовать ту же конструкцию с поплавками. – user2357112

+2

Переключение смысла теста и безоговорочной настройки 'Valid' - хороший ход. – user2357112

+0

Не приведет ли это к истинному значению для действительного снова? – itssmegoku

2

Оператор or короткий -circuiting сравнения, которое возвращает самое раннее значение правды, или последнее значение, если ни одно из них не является правдивым. В (Row or Column) < 0 оценивается первый Row or Column. Если отличное от нуля, этот раздел возвращает . В противном случае он вернет Column. Затем он сравнивает это единственное значение с 0. То же самое касается и другого сравнения, которое, как я полагаю, имеет опечатку и должно было быть (Row or Column) > 9 (а не > 0).

Вы также можете попробовать следующее (не исчерпывающий список):

if not 0<=row<=9 or not 0<=column<=9 
if row not in range(10) or column not in range(10) 
if not all(0<=x<=9 for x in (row,column)) 

Выберите тот, который имеет наибольший смысл в контексте вашей программы.

+1

Почему это даже downvoted? – Bahrom

+0

@Bahrom - ¯ \\ _ (ツ) _/¯ – TigerhawkT3

+0

Как бы вы тогда адаптировали это для инструкции Try-Catch – itssmegoku

0

Вы могли бы попробовать это, но это создает массив из 10 элементов [0..9] ..

Valid = True 
rangeValue = range(10) 
while Valid: 
    Column = int(input("Insert Column: ")) 
    Row = int(input("Insert Row: ")) 
    Valid = Row in rangeValue and Column in rangeValue 
+0

'range()' не является исчерпывающим с обоих концов. – TigerhawkT3

+0

Ты прав;)! Я исправил ответ! благодаря –

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