如何对比字符串数字:判断字符存在但位置不同(聚焦第二个elif语句)
问题描述
我正在尝试对比两个字符串中的数字:guess_str是输入值转换后的字符串,num_str是随机生成数字转换后的字符串。
示例:
guess_str: 100num_str: 201
需要实现两者的对比,当输入100作为guess_str时,能识别出输入的“1”存在于num_str中但位置不同。
我仅关注代码中的第二个elif语句。
原代码
import random # 原代码缺失该导入,补充以保证运行 num = random.randint(100,999) attempts = 1 max_attempts = 10 print(main()) # 原代码未定义main函数,此处存在逻辑问题 print(num) while attempts <= max_attempts: guess = int(input(f"Guess#{attempts}:\n> ")) if guess == num: print("Hooray!! That is the correct number!") answer = input("Enter yes or no: ") if answer.lower() == "yes": main() elif answer.lower() == "no": print("Ok have a great day!") break else: guess_str = str(guess) num_str = str(num) for i, val in enumerate(str(num)): if guess_str[i] == val: print("Fermi".format(i)) elif any(x in num_str for x in guess_str): print("Pico") elif guess_str != num_str: print("Bagels") break #adds attempt to game else: attempts += 1
问题分析与修复
原代码的第二个elif逻辑存在缺陷:any(x in num_str for x in guess_str)仅判断任意数字存在于目标字符串,但未排除已经匹配位置的数字(即已触发Fermi的情况),且循环逻辑会导致重复输出。
要实现“数字存在但位置不同”的判断,核心修改如下:
修复后的核心对比逻辑
else: guess_str = str(guess) num_str = str(num) fermi_count = 0 pico_count = 0 # 逐个字符对比,统计Fermi和Pico数量 for i in range(3): if guess_str[i] == num_str[i]: fermi_count += 1 # 仅当数字存在但位置不匹配时,统计Pico elif guess_str[i] in num_str: pico_count += 1 # 组装输出结果 output = [] if fermi_count > 0: output.append(f"{fermi_count} Fermi") if pico_count > 0: output.append(f"{pico_count} Pico") if not output: print("Bagels") else: print(" ".join(output)) attempts += 1 # 将次数递增移至循环外,修正原代码逻辑错误
关键修改点
- 针对第二个
elif:新增位置判断,仅在数字存在且位置不匹配时统计为Pico,避免和Fermi的情况重复 - 调整
attempts += 1的位置,原代码放在循环内会导致每次字符对比都递增次数,逻辑完全错误 - 增加计数逻辑,避免重复打印(比如示例中
guess_str=100、num_str=201时,会输出1 Pico)
内容的提问来源于stack exchange,提问作者LEAPFTW
相关产品推荐
相关产品推荐

