Проблемы с итерацией по списку строк

#python

#python

Вопрос:

Мой код на python компилируется неправильно. Вот вопрос: верните количество наборов в предоставленном наборе.

 Parameters:
    cards (list(str)) a list of twelve cards as 4-bit integers in
    base 3 as strings, such as ["1022", "1122", ..., "1020"].
Returns:
    (int) The number of sets in the hand.
Raises:
    ValueError: if the list does not contain a valid Set hand, meaning
        - there are not exactly 12 cards,
        - the cards are not all unique,
        - one or more cards does not have exactly 4 digits, or
        - one or more cards has a character other than 0, 1, or 2.
  

Вот мой код:

 def count_sets(cards):
 num_sets = len(cards)
    for i in range(num_sets):
        for j in range(num_sets):
            cards_test = cards[i]
            for m in range(len(cards_test)):
                if num_sets != 12:
                    raise ValueError("there are not exactly 12 cards,")
                elif i != j:
                    if cards_test == cards[j]:
                        raise ValueError("the cards are not all unique,")
                elif len(cards_test) != 4:
                    raise ValueError("one or more cards does not have exactly 4 digits, or")
                elif cards_test[m] != 0 or cards_test[m] != 1 or cards_test[m] != 2: #----the problem is here
                    raise ValueError("one or more cards has a character other than 0, 1, or 2.")
                else:
                    return num_sets
    
print(count_sets(["1111", "2222", "1212", "1222", "1112", "0011", "0022", "2211", "1010", "0000", "1221", "0220"]))
  

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

1. В чем ваша ошибка?

2. Какие шаги вы предприняли, чтобы попытаться отладить свой код? Какие сообщения об ошибках? В каких строках? Почему существует вложенный for цикл?

3. Он вернет это значение ошибки повышения («одна или несколько карт имеют символ, отличный от 0, 1 или 2».) Ошибка значения: одна или несколько карт имеют символ, отличный от 0, 1 или 2 «. Но мне нужно, чтобы не возвращать ValueError

4. Проблема в строке с комментарием #----the problem is here @AAAlex123

5. @acme_2020 ваши условия cards_test[m] != 0 or cards_test[m] != 1 or cards_test[m] != 2 неверны, вы создаете исключение, когда проверяемое число отличается от 0 или 1 или 2, поэтому оно будет возникать каждый раз

Ответ №1:

Эта строка неверна:

 elif cards_test[m] != 0 or cards_test[m] != 1 or cards_test[m] != 2:
  

Это должно быть:

 elif cards_test[m] != 0 and cards_test[m] != 1 and cards_test[m] != 2:
  

значение if cards_test[m] не равно 0, и это не 1, и это не 2, тогда возникает ошибка.

Лучший способ написать это следующим образом:

 elif not cards_test[m] in "012":