请求协助排查Python While循环测试用例问题(测试用例1、2卡壳)
问题分析
先看你的代码逻辑里的几个关键问题,这应该是导致测试用例卡住的核心原因:
- 实时打印统计值而非最终汇总:你每次输入非空单词后都会立刻打印当前的大写开头单词数,这不符合常规的统计需求——用户应该是希望在结束输入(按回车)后,一次性得到所有输入的统计结果。
- 缺少总单词数统计:你的代码只跟踪了大写开头的单词数,但初始提示里提到了“0 words were entered”,说明需要统计总共输入了多少个单词,才能在结束时输出完整的统计信息。
- 字符串格式冗余:打印
"'0 words were entered'"时多了一层单引号,显得不规范,而且这个提示应该根据总单词数动态变化,而不是固定写死0。
修复后的代码
def upper_1(): count_cap = 0 total_words = 0 # 新增:统计总输入单词数 while True: word = input('Enter word or press Enter/Return key: ') if word == '': # 结束输入时统一输出统计结果 print(f"{total_words} words were entered") print(f'Words with first letter in upper case = {count_cap}') break else: total_words += 1 # 每输入一个非空单词,总计数+1 if word[0].isupper(): count_cap += 1
代码修改说明
- 新增
total_words变量,用来统计用户输入的所有非空单词数量,结束时能准确输出总单词数。 - 把所有打印操作移到**输入结束(word为空)**的分支里,只会在用户结束输入时一次性展示最终统计结果,避免实时打印的干扰。
- 用f-string替代字符串拼接,让输出格式更简洁易读,同时去掉了原代码里多余的单引号。
- 变量名改成符合Python PEP8规范的小写加下划线格式(
count_cap而非countCap),提升代码可读性。
这样修改后,测试用例应该就能正常通过了——比如输入多个单词后按回车,会正确显示总单词数和大写开头的数量;空输入时也会显示0个单词和0个大写开头的单词。
内容的提问来源于stack exchange,提问作者Richie Singh
相关产品推荐
相关产品推荐

