#猜数字程序
#其中und为用户输入的数字,rnd为预设的“正确答案”
#返回值为xAyB的形式
#如果数字正确且位置正确,A的值加1
#如果数字正确,位置不对,B的值加1
#其中,如果某个数字A加1,说明猜对一个数字,这个位置不再参与判断
#例如:用户输入8585,正确答案3585,后面3个数组585是对的
#则后面的3个位置不再参与对比,正确的数字应该是3,用户输入的是8,B的值加1
#结果应该是3A0B,而不是3A1B
import random
s = []
ans = []
text = [] #存储输入的多行,换行符间隔
und = '' #存储单行输入
d1 = {'A':0,'B':0}
# 下面方法用于生成长度为4的随机数
def gen_rnd():
for i in range(0,4):
x = random.randint(0,9)
ans.append(str(x))
print("正确答案(你看不见我):"+"".join(ans))
return ans
#随机生成一个4位随机数列表,作为答案
rnd = list(gen_rnd())
print(rnd)
def guess_num(und,rnd):
#初始化字典和列表,以便存储当前处理的值
d1 = {'A':0,'B':0}
s = []
rnd2 = rnd.copy()
und2 = und.copy()
for i in range(0,len(und)):
if und2[i] == rnd[i]:
d1['A'] += 1
rnd2[i] = None
und2[i] = None
for j in range(0,len(und2)):
if (und2[j] is not None) and (und2[j] in rnd2):
d1['B'] += 1
for k,v in d1.items():
t= str(v)+k
s.append(t)
show_time = "".join(s)
return show_time
#开始猜数字
print("")
print("开始猜数字:")
while True:
und = list(input())
if und == '':
break
#print(und)
rt = guess_num(und,rnd)
print(rt)
print("下一个数字,回车退出:")
---------------------------------------------------------------------------------------------------
测试输出:
正确答案(你看不见我):6390 ['6', '3', '9', '0'] 开始猜数字: 3685 0A2B 下一个数字,回车退出: