Python实现两字符串列表比对 生成匹配结果列表并统计正误
字符串列表元素比对功能实现
核心实现规则
- 逐位置对比玩家猜测列表与随机生成的食物列表,同位置值完全匹配标记
O,否则标记X,所有标记结果存入correct_guess_list - 分两类统计匹配结果:
- 值和位置完全匹配的食物总数
- 值存在于随机列表、但位置不匹配的食物总数(重复元素按实际出现次数计数,已匹配完全的元素不重复统计)
完整可运行代码
import random from collections import defaultdict # 已实现的基础功能:定义可选食物、生成随机列表、接收校验玩家输入 food_list = ["salad", "steak", "noodles", "rice", "pasta", "chicken", "fish", "soup"] random_food_list = random.choices(food_list, k=4) player_guess_list = [] print("可选食物列表:", food_list) for i in range(4): while True: guess = input(f"请输入第{i+1}个猜测食物:").strip() if guess in food_list: player_guess_list.append(guess) break print("输入不合法,请从给定可选列表中选择食物") # 补充实现:位置比对与结果统计 correct_guess_list = [] correct_position = 0 matched_random_idx = set() matched_guess_idx = set() # 第一步:逐位置比对标记O/X,统计完全匹配数量 for idx in range(4): if player_guess_list[idx] == random_food_list[idx]: correct_guess_list.append("O") correct_position += 1 matched_random_idx.add(idx) matched_guess_idx.add(idx) else: correct_guess_list.append("X") # 第二步:排除已完全匹配的元素,统计值对位置错的数量 random_remain = defaultdict(int) guess_remain = defaultdict(int) for idx in range(4): if idx not in matched_random_idx: random_remain[random_food_list[idx]] += 1 if idx not in matched_guess_idx: guess_remain[player_guess_list[idx]] += 1 wrong_position = 0 for food in guess_remain: wrong_position += min(guess_remain[food], random_remain.get(food, 0)) # 输出最终结果 print(f"比对标记列表:{correct_guess_list}") print(f"Correct food in correct place: {correct_position}") print(f"Correct food in wrong place: {wrong_position}")
示例验证
当随机列表为["salad", "rice", "salad", "rice"]、玩家输入为["salad", "salad", "rice", "rice"](原示例输入存在笔误)时,运行结果为:
- 比对标记列表:
['O', 'X', 'X', 'O'] - 位置值全匹配数量:2
- 值对位置错数量:2
和预期输出完全一致。
内容的提问来源于stack exchange,提问作者Kurumi3
相关产品推荐
相关产品推荐

