题目:
猜秘密三位数(人、机互相猜)小游戏
问题描述:
你和计算机都各自选定一个秘密的三位数,然后互相猜对方的数字。用几个A表示对方猜的三位数中有几个数是完全正确的。用几个B表示对方猜的三位数中有几个数正确但是位置不对。看是计算机还是你先猜到对方的数字。
注:不考虑有重复的三位数,例如:335等。
比如:
你选定的秘密三位数:123
对方猜: 247
回答: 0 A 1 B (1B是因为2在我的秘密三位数里,但是它的位置不对。)
请猜一个三位数:123
你猜: 123
回答: 1 A 0 B (A因为2是完全正确的。)
Python代码如下:
import random
n1 = int(input('你选定的秘密三位数:'))
n2 = random.randint(100, 1000)
def f(n):
L=[]
L.append(n // 100)
L.append(n % 100 // 10)
L.append(n % 10)
return L
L1 = f(n1)
L2 = f(n2)
def compare(S1, S2): #函数:比较两个不等列表的相对个数
i = t = A = B = 0 #function: calculate the relative number of two unequal list
while i < len(S1):
t = 0
while t < len(S2):
if S1[i] == S2[t] and i == t:
A += 1
elif S1[i] == S2[t] and i != t:
B += 1
t += 1
i += 1
print('回答:', A, 'A', B, 'B')
return 0
def f1(L1): #函数:计算机猜 // function: computer guess
b = random.randint(100, 1000)
print('对方猜:', b)
L4 = f(b)
if n1 == b:
print('你回答:3 A 0 B(答对了)')
return 0
compare(L1, L4)
f2(L2)
def f2(L2): #我猜 // I guess
a = int(input('请猜一个三位数:'))
while a >= 1000 or a < 100:
print('Datas error!')
a = int(input('请重新猜一个三位数:'))
print('我猜:', a)
L3 = f(a)
if n2 == a:
print('对方回答:3 A 0 B(答对了)')
return 0
compare(L2, L3)
f1(L1)
while n1 >= 1000 or n1 < 100:
print('Datas error!')
n1 = int(input('请重新选定一个秘密三位数:'))
else:
f1(L1) #开始 // start