python - Str object has no attribute "add" -
can me fix this:
import random import operator operator import add, sub, mul random import randint score = 0 name = input("what name? ") in range(10): n1 = randint(1,10) n2 = randint(1,10) ops =[["+", operator.add],["-", operator.sub],["*", operator.mul]] randomop = random.choice(list(ops)) operator = randomop[0] op = randomop[1] prod = op(int(n1), int(n2)) ask = ("what is",int(n1),operator,int(n2),"?") ans = input(ask) if ans == ("%d" % (prod)): print ("that's right -- done") score = score + 1 else: print ("no, answer %d. " % (prod)) print (name, "i asked 10 questions. got %d of them right." % (score)) print ("quiz finished")
you assigned string operator
name:
operator = randomop[0]
you masking operator
module. don't re-use names that, because next iteration of for
loop operator.add
tries add
attribute on string (so 1 of '+'
, '-'
or '*'
, whatever first iteration picked random choice).
you imported 3 functions directly:
import operator operator import add, sub, mul
so simple solution use 3 names instead of referencing functions on module:
ops = (("+", add), ("-", sub), ("*", mul))
where used tuples instead of lists (since altering ops
sequence in code error). move assignment out of for
loop well; there little point in recreating each iteration.
Comments
Post a Comment