python - Why is my method returning None? -
i have following method call:
ncols = 3 npegs = 4 first_guess = [] print("calling first guess method") first_guess = firstguess(ncols, npegs, first_guess) print("after method call: " + str(first_guess)) firstguess method:
def firstguess(ncols, npegs, first_guess): """used setting first guess of game""" print("in firstguess method") c in range(1, ncols + 1): if len(first_guess) == npegs: print("about return first guess: " + str(first_guess)) return first_guess else: first_guess.append(c) print("out of loop, first_guess len " + str(len(first_guess)) + ", " + str(first_guess)) if len(first_guess) <= npegs: #there less color options pegs firstguess(ncols, npegs, first_guess) this seems returning none reason cannot figure out.
here output:
calling first guess method in firstguess method out of loop, first_guess len 3, [1, 2, 3] in firstguess method return first guess: [1, 2, 3, 1] after method call: none traceback (most recent call last): file "mastermind.py", line 323, in <module> sys.exit(main()) file "mastermind.py", line 318, in main playonce() file "mastermind.py", line 160, in playonce first_guess = first_guess + str(g[0][i]) typeerror: 'nonetype' object not subscriptable why returning none instead of [1, 2, 3, 1]?
the problem you're hitting recursive call doesn't return result.
so, prints "out of loop…", makes recursive call. recursive call returns something… but outer call ignores , falls off end, means none.
just add return before call firstguess:
print("out of loop, first_guess len " + str(len(first_guess)) + ", " + str(first_guess)) if len(first_guess) <= npegs: #there less color options pegs return firstguess(ncols, npegs, first_guess) this still leaves path don't return (if "out of loop", , len(first_guess) > npegs)… but don't have logic useful there. may want add kind of assert or raise if believe never happen.
Comments
Post a Comment