如何在Python中用f-string展示用户输入列表?解决语法报错及实现疑问
问题解决:f-string错误及购物列表展示修正
错误原因分析
- f-string语法错误:最后几行print语句的格式字符串里有多余的
{符号。f-string仅需用{}包裹变量/表达式,固定文本直接书写即可,不需要额外加{。 - 变量使用错误:
item是循环最后一次输入的内容(最终是空字符串),不是整个购物列表。要访问用户输入的列表项,得用grocery_list;同时item[0][0]逻辑错误,item是单个字符串,并非二维列表,正确的列表项访问方式是grocery_list[索引]。 - 其他逻辑问题:
except块里的print()在break之后,永远不会执行;打印分隔线的循环逻辑错误,会导致每输出一个=就打印一次统计文本;没处理用户直接按回车的空列表情况。
修正后的代码
grocery_list = [] while True: try: item = input("Enter an item for your grocery list. Press <ENTER> when done: ") if len(item) == 0: break grocery_list.append(item) except EOFError: break num_of_items = len(grocery_list) print(num_of_items) print('Welcome to the Grocery List Program.') print() # 打印分隔线 print('=' * 45) print(f'You have {num_of_items} items on your grocery list.') print('=' * 45) print() # 遍历购物列表并展示 if num_of_items > 0: for idx, item in enumerate(grocery_list, 1): print(f' ---- {item:>22} [{idx}]') else: print('Your grocery list is empty.')
关键修改说明
- 调整输入逻辑:先判断输入是否为空,再添加到列表,避免空字符串混入,
num_of_items直接等于列表长度即可。 - 简化分隔线打印:用
'=' * 45替代循环打印,简洁高效。 - 正确遍历列表:用
enumerate获取列表项的索引和内容,统一展示格式,同时处理空列表的情况。 - 修复f-string语法:移除多余的
{符号,确保格式字符串符合语法要求。
内容的提问来源于stack exchange,提问作者Natawee
相关产品推荐
相关产品推荐

