【发布时间】:2015-04-07 10:15:06
【问题描述】:
我已尝试在此处调整给定脚本之一:
How to solve the "Mastermind" guessing game?
当我试图获得以下结果时:
数字 = 4
变量 = 10
times_until = 100
...我没有任何问题。但是当我尝试将“变量”增加到 12 个程序时,在稍微进步后停止。
我还有另一个问题,如果我将 'times_until' 更改为 500 程序会给我如下错误:
Traceback (most recent call last):
File "/Users/ivalaostiapytriel/Dropbox/MastermindSolver.py", line 72, in <module>
rungame(hidden_code, strategy_allrand)
File "/Users/ivalaostiapytriel/Dropbox/MastermindSolver.py", line 58, in rungame
restart_game()
File "/Users/ivalaostiapytriel/Dropbox/MastermindSolver.py", line 37, in restart_game
rungame(hidden_code, strategy_allrand)
File "/Users/ivalaostiapytriel/Dropbox/MastermindSolver.py", line 58, in rungame
restart_game()
...
...
restart_game()
File "/Users/ivalaostiapytriel/Dropbox/MastermindSolver.py", line 37, in restart_game
rungame(hidden_code, strategy_allrand)
File "/Users/ivalaostiapytriel/Dropbox/MastermindSolver.py", line 50, in rungame
print ("That's it. After %d tries, I won." % (i+1,))
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/idlelib/PyShell.py", line 1347, in write
return self.shell.write(s, self.tags)
RuntimeError: maximum recursion depth exceeded while calling a Python object
>>>
请注意,我对 python 并不了解——即使是一点点——。刚刚在大学里听过一次关于它的讲座,但没有任何其他经验。只需要将它调整为一个项目并从中检索一些结果。
这是我在下面改编的代码。如果有人提到我做错了什么导致这些错误,我会很高兴。
import random
#from itertools import izip, imap
try:
# Python 2
from itertools import izip
from itertools import imap
except ImportError:
# Python 3
izip = zip
imap = map
digits = 4
variables = 10
times_until = 500
maxtries = 25
times_done = 0
average_cal = 0
fmt = '%0' + str(digits) + 'd'
searchspace = tuple([tuple(map(int,fmt % i)) for i in range(0,variables**digits)])
def compare(a, b, imap=imap, sum=sum, izip=izip, min=min):
count1 = [0] * variables
count2 = [0] * variables
strikes = 0
for dig1, dig2 in izip(a,b):
if dig1 == dig2:
strikes += 1
count1[dig1] += 1
count2[dig2] += 1
balls = sum(imap(min, count1, count2)) - strikes
return (strikes, balls)
def restart_game():
hidden_code = random.choice(searchspace)
rungame(hidden_code, strategy_allrand)
def rungame(target, strategy, verbose=True):#, maxtries=):
possibles = list(searchspace)
for i in range(maxtries):
g = strategy(i, possibles)
#if verbose:
#print ("Out of %7d possibilities. I'll guess %r" % (len(possibles), g),)
score = compare(g, target)
#if verbose:
#print (' ---> ', score)
if score[0] == digits:
if verbose:
print ("That's it. After %d tries, I won." % (i+1,))
global times_done
times_done += 1
global average_cal
average_cal += (i+1)
if times_done <= times_until:
restart_game()
else:
print ("That's it. Average %f " % (average_cal/times_until,))
break
possibles = [n for n in possibles if compare(g, n) == score]
return i+1
def strategy_allrand(i, possibles):
return random.choice(possibles)
if __name__ == '__main__':
hidden_code = random.choice(searchspace)
rungame(hidden_code, strategy_allrand)
【问题讨论】:
-
格式化您的源代码。目前的形式很难阅读。
标签: python python-2.7 python-3.x