CS50P PSET3 Grocery问题:代码为何无法通过check50检测?
CS50P Grocery List 检测不通过问题修复
问题根源
你的代码统计商品数量的逻辑是正确的,但输出顺序不符合题目要求。题目期望最终输出按字母升序排列,而你直接遍历字典的键:
- 在Python 3.7之前,字典是无序结构;
- 即使是3.7+的插入顺序字典,也和题目要求的字母排序逻辑不符。
看check50的失败用例:输入tortilla和sweet potato,题目期望先输出1 SWEET POTATO(字母"S"在"T"前),但你的代码按插入顺序先输出了1 TORTILLA,导致检测不通过。
修复代码
修改EOF异常处理部分的循环,对字典的键进行字母升序排序后再输出:
# Syntax of dict = {'key': value} mydict = {} # Infinite loop with break while True: try: item = input().upper() # Search if item matches a key inside the dict if item in mydict: mydict[item] = mydict[item] + 1 else: mydict[item] = 1 except EOFError: # 按字母升序遍历字典键 for item in sorted(mydict): print(mydict[item], item) break
说明
sorted(mydict)会默认按字符串的字母顺序对字典的键进行排序,返回一个有序列表;- 遍历这个有序列表输出,就能保证结果和check50的预期顺序一致,通过所有检测用例。
内容的提问来源于stack exchange,提问作者Sakib Arifin
相关产品推荐
相关产品推荐

