2016-08-14 7 views
-1

Может ли кто-нибудь объяснить это сообщение об ошибке мне?AttributeError: объект 'tuple' не имеет атрибута 'copy'

# make a copy or hand is destroyed by your test 
remaining = hand.copy() 

Результат:

AttributeError: 'tuple' object has no attribute 'copy' 

Я могу это сделать:

remaining = copy.copy(hand) 

который возвращает это:

(None, {hand...}) 

Что скидывает то, что я пытаюсь выполнить, потому что функция возвращается False, когда она ches Нет возвращаемого значения.

Это функция, которая создает руку:

def deal_hand(n): 
""" 
Returns a random hand containing n lowercase letters. 
At least n/3 the letters in the hand should be VOWELS. 

Hands are represented as dictionaries. The keys are 
letters and the values are the number of times the 
particular letter is repeated in that hand. 

n: int >= 0 
returns: dictionary (string -> int) 
""" 
hand={} 
num_vowels = n/3 

for i in range(num_vowels): 
    x = VOWELS[random.randrange(0,len(VOWELS))] 
    hand[x] = hand.get(x, 0) + 1 

for i in range(num_vowels, n):  
    x = CONSONANTS[random.randrange(0,len(CONSONANTS))] 
    hand[x] = hand.get(x, 0) + 1 

return hand 

EDIT: Я также изменил руку по пути и создал кортеж из него вместо словаря. Благодаря!

+0

Сообщение об ошибке связано с тем, что кортежи не имеют метода 'copy'. Почему вы пытаетесь вызвать 'copy' на кортеже? – BrenBarn

+0

Потому что я хочу запускать тесты под рукой, а не уничтожать его. – Chris

+0

Было бы лучше, если бы у нас было больше контекста для вашей ситуации. Понятно, что вы пытаетесь вызвать copy() на кортеже, что неверно, поскольку кортежи не имеют метода под названием 'copy'. Мы не знаем, почему вы пытаетесь это сделать. –

ответ

1

Ошибка очень ясная: у вас есть кортеж, на котором вы пытаетесь позвонить copy.

Похоже, что объект, который у вас есть в hand, не предназначен для вашего объекта, а вместо кортежа.

+0

Можете ли вы удалить свой ответ, чтобы я мог удалить свой вопрос? Благодаря! – Chris

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