Python字符串下划线输出程序报错:下划线长度不匹配排查
Python字符串下划线输出程序错误排查
任务要求
编写Python程序,通过循环请求用户输入字符串,将每个字符串按示例格式带下划线输出,输入空字符串时结束程序。
用户编写的代码
string = str(input("Please enter a string: ")) char = "-"* len(string) while len(string) >0: print(string) print(char) string=str(input("Please enter a string: ")) if len(string) == 0: break
测试失败信息
- 测试用例
test_2_two_words:
FAIL: PythonEditorTest: test_2_two_words '------' != '-------' - ------ + ------- ? + : 第4行输出不正确,应为 ------- 实际输出行是 ------ 完整输出: python ------ attempt ------
- 测试用例
test_3_many_words:
FAIL: PythonEditorTest: test_3_many_words '----' != '----------' - ---- + ---------- : 第6行输出不正确,应为 ---------- 实际输出行是 ---- 完整输出: test ---- hiya ---- simsalabim ---- zorro ---- woo-hoo! ----
问题根源
代码的核心bug是下划线字符串char只在程序初始化时计算了一次,后续输入新字符串时,没有根据新字符串的长度重新生成对应长度的下划线。
比如第一次输入"python"(长度6),char被设为6个'-';之后输入长度为7的"attempt",代码依然输出之前生成的6个'-',导致下划线长度和当前字符串不匹配,这就是测试失败的直接原因。
另外,代码里的if len(string) == 0: break属于冗余逻辑——while循环的条件已经是len(string) > 0,当输入空字符串时,循环会自动终止,不需要额外判断跳出。
修复方案
只需要把下划线的生成逻辑放到循环内部,每次处理新字符串时重新计算下划线长度即可。修复后的代码如下:
string = input("Please enter a string: ") while len(string) > 0: print(string) print("-" * len(string)) # 每次循环根据当前字符串长度生成下划线 string = input("Please enter a string: ")
或者更简洁的写法:
while True: user_input = input("Please enter a string: ") if not user_input: break print(user_input) print("-" * len(user_input))
内容的提问来源于stack exchange,提问作者claudiu
相关产品推荐
相关产品推荐

