#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
@AAAlex1235. @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":