Zybooks入门课Simon Says挑战:代码得分计算结果错误求助
问题分析与修复
你的代码核心问题是使用了嵌套循环,这完全不符合“逐个位置对比字符,不匹配则立即终止”的需求。嵌套循环会导致每次遍历simon_pattern的一个字符时,都完整遍历一遍user_pattern的所有字符,最终计数逻辑完全混乱。
错误代码的问题点
以测试用例simon_pattern='RRGBRYYBGY'、user_pattern='RRGBBRYBGY'为例:
- 外层循环第一个字符是
R,内层循环会遍历user_pattern的所有字符,把所有R都计入分数,这已经偏离了“对应位置匹配”的要求; - 后续循环的逻辑也完全错位,最终导致实际得分与预期不符。
修复后的代码
我们需要逐个对比两个字符串对应位置的字符,匹配则加分,不匹配立即终止循环。以下是两种可行的实现方式:
方式1:使用索引遍历
user_score = 0 simon_pattern = input() user_pattern = input() # 遍历两个字符串中较短的长度,避免索引越界 for i in range(min(len(simon_pattern), len(user_pattern))): if simon_pattern[i] == user_pattern[i]: user_score += 1 else: break # 不匹配时直接终止循环 print('User score:', user_score)
方式2:使用zip()函数配对字符
zip()会自动将两个字符串对应位置的字符配对,直到其中一个字符串遍历完毕:
user_score = 0 simon_pattern = input() user_pattern = input() for simon_char, user_char in zip(simon_pattern, user_pattern): if simon_char == user_char: user_score += 1 else: break print('User score:', user_score)
验证测试用例
对于你提供的测试输入:
simon_pattern='RRGBRYYBGY',user_pattern='RRGBBRYBGY'- 前4个字符
RRGB完全匹配,第5个字符R(simon)与B(user)不匹配,循环终止,最终得分为4,符合预期。
内容的提问来源于stack exchange,提问作者SwanSong
相关产品推荐
相关产品推荐

