import random data = [str(x) for x in range(10)] random.shuffle(data) # shuffle 会直接修改列表本身,所以不用赋值 if data[0] == '0': # 如果首尾为0,那么取后四位 answer = data[-4:] else: # 首尾不为0,取前4位 answer = data[:4]
由于要检查的数据通过 input 输入,所以为了保持类型一致,我们都使用字符串来表示。
运行效果如下图所示:
接下来,让玩家连续进行10次尝试,每次输入一个4位数:
for i in range(1, 11): whileTrue: guess = input(f'进行第{i}次尝试,请输入一个4位数:') if len(guess) == 4: break print('请输入4位数。')
运行效果如下图所示:
接下来,首先检查位置和数字都正常的情况:
defmatch_num_and_position(guess, answer): A = 0 for guess_num, answer_num in zip(guess, answer): # 逐位检查攻击方和防守方的答案数字 if guess_num == answer_num: A += 1 else: guess_left_num.append(guess_num) answer_left_num.append(answer_num) return guess_left_num, answer_left_num
这里,使用zip来同时迭代guess和answer,从而实现逐位一一对应检查。
下面再来处理数字对,但位置不对的情况:
defmatch_num(guess, answer): B = 0 for num in guess: if num in answer: B += 1 answer.remove(num) # .remove 是一个原地操作,不需要赋值 return B