Ошибка при совершении случайных ошибок в Python - PullRequest
1 голос
/ 26 февраля 2012
import random
import time
loop = [1,2,3,4,5,6,7,8,9,10]
queenstrength = 100
queendamagenum = 1,20
print "The queens health is currently: ",queenstrength

while queenstrength > 0:
    queendamage = random.randint((queendamagenum))
    print""
    print "queen damage:", queendamage
    queenstrength = queenstrength - queendamage
    print queenstrength
    time.sleep(1)

print""
print"finished"

Я пытаюсь использовать этот код в своей игре, но получаю сообщение об ошибке:

**Traceback (most recent call last):
  File "Untitled.py", line 9, in <module>
    queendamage = random.randint((queendamagenum))
TypeError: randint() takes exactly 3 arguments (2 given)**

что означает 3 аргумента (2 дано)?Я думал, что нужно только мин и макс?

1 Ответ

8 голосов
/ 26 февраля 2012

randint принимает мин и макс, например:

>>> import random
>>> random.randint(0,10)
1

но вы передаете кортеж:

>>> random.randint((0, 10))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: randint() takes exactly 3 arguments (2 given)

Вы можете использовать распаковку аргументов ( оператор *), чтобы превратить ваш кортеж в серию аргументов для randint, если вам нравится:

>>> queendamagenum = 1, 20
>>> random.randint(*queendamagenum)
8

Что касается того факта, что в сообщении об ошибке указано «3 аргумента (2 дано)», то это потому, что randint на самом деле является методом, живущим в экземпляре random.Random, а не функцией. методы автоматически получают переданный им аргумент (традиционно называемый «я»), которым является сам экземпляр. Таким образом, вы должны перевести «3 аргумента (2 дано)» в «2 аргумента, не относящихся к себе (1 дано)», и вы передали ему только 1 кортеж, так что это имеет смысл.

...