2013-11-07 5 views
1

я в настоящее времясинтаксис Python, если заявление

seq1 = "--MFA" 
seq2= "--MFU" 

for i in range(0, len(seq1)): 

    if seq1[i] or seq2[i] == '-': 

     print "hi" 
    else: 
     print "bye" 

Почему распечатать "привет" 5 раз (даже если seq1 [я] и seq1 [я] являются M, F, A/U). Сначала я думал, что это проблема с регулярным выражением, но даже избежание дефиса дало те же результаты.

+0

При возникновении сомнений используйте REPL (IDLE или в оболочке) и типа. ''-' или '2' >>> '-'''' - 'или' 2 '==' - '>>>' -'' Таким образом, вы можете догадаться, что он всегда возвращает левую часть, потому что она интерпретируется как Правда. – Nil

ответ

2
if seq1[i] or seq2[i] == '-': 

Это условие означает, что если seq1[i] истинно или seq2[i] = '-' сделать следующее. В этом случае seq1 [i] верен 5 раз. Затем он печатает «привет» 5 раз.

+0

oh ... haha ​​спасибо Я новичок кодер :) – user2812970

3

if seq1[i] or seq2[i] == '-':

Средства:

if (seq1[i]) or (seq2[i] == '-'):

Если seq[i] имеет значение True (т.е., если bool(seq1[i]) == True), то условный оператор будет мгновенно быть правдой, из-за or. С оператором or, если одна сторона равна True, тогда условные прогоны.

Обратите внимание, что bool(seq1[i]) будет всегда быть истинным, потому что строка с любой длиной считается True.

Следовательно, печатается 'hi'.

1

Есть целый ряд альтернатив, вы могли бы использовать здесь

if '-' in (seq1[i], seq2[i]): 

Является кратким, но смешно читать.

if seq1[i] == '-' or seq2[i] == '-': 

ощущению более естественного

уборщицы способу перебрать последовательности вместе использовать zip

for i, j in zip(seq1, seq2): 

    if i == '-' or j == '-': 
     print "hi" 
    else: 
     print "bye" 

Если вы циклически более последовательности вместе, хороший способ продлить сравнение следует использовать any

for item in zip(seq1, seq2, seq3, seq4, ...): 
    if any(i == '-' for i in item): 
     print "hi" 
    else: 
     print "bye" 
Смежные вопросы