Семантическая ошибка при использовании if / else для создания абекедарских рядов - PullRequest
0 голосов
/ 19 февраля 2011

Моя программа должна выводить: Джек, Кэк, Лэк, Мак, Нэк, Оуак, Пак и Кряк.

suffix="ack"
prefix="JKLMNOPQ"

for i in prefix:
    if prefix=="Q" or "O":
        suffix="uack"
    else:
        suffix="ack"
    print i + suffix

Но вместо этого он выводит Juack, Kuack, Luack, Muack Nuack Ouack Puack Кря

Ответы [ 3 ]

5 голосов
/ 19 февраля 2011
  1. Вы сравниваете prefix (строка, содержащая несколько букв) - вместо текущего символа, i - с отдельными буквами.Они никогда не равны.Я бы предложил лучшие имена (что сделало бы ошибку очевидной): prefixes = "JK..." и for prefix in prefixes:.
  2. Вы приводите "O" к логическому значению, используя его без оператора сравнения в логическойили же.Если prefix=="Q" равно false, оно преобразует "O" в логическое значение - и непустые строки считаются истинными.Или используйте prefix == "Q" or prefix == "O" или prefix in ("Q", "O") (который лучше масштабируется для большего количества альтернатив).Вы не поверите, насколько распространена эта ошибка ... да, в ней используются несколько ключевых слов, заимствованных из английского, но это не английский
1 голос
/ 19 февраля 2011

prefix == "Q" or "O" совершенно неверно.Префикс

  1. всегда будет "JKLMNOPQ" и никогда не будет равен "Q".Я думаю, что вы хотели проверить i, а не prefix
  2. . == связывается ближе, чем or, поэтому он оценивается как (prefix == "Q") or "O"."O" всегда верно, поэтому суффикс всегда будет "uack" `

Если вы исправите это, это должно сработать.

Я думаю, это должно быть if i=="Q" or i=="O".

1 голос
/ 19 февраля 2011

Вы должны сравнивать с i вместо prefix в цикле.if prefix == 'Q' or 'O' всегда будет True, даже если вы сравниваете с i, поскольку 'O' не FalseЭто должно быть if i == 'Q' or i == 'O'.

...