如何实现Python输入循环读取列表项并动态更新用户提示
嘿,我明白你的问题啦——你现在的第二个循环一直固定用itemName0,所以没法动态显示对应的项目名称对吧?其实核心问题出在你用globals()生成单独变量的方式,这种做法不仅容易出错,维护起来也麻烦。咱们换个更Pythonic的思路来解决:
推荐方案:用列表存储数据(更清晰易维护)
与其生成itemName0、itemName1这类零散变量,不如直接用列表来存储所有项目名称和值,这样索引天然对应,循环的时候直接取对应位置的名字就行:
# 先获取项目数量(假设用户输入的是有效数字) itemNum = int(input("Enter number of items: ")) # 收集所有项目名称到列表 item_names = [] for _ in range(itemNum): name = input("Enter item name: ") item_names.append(name) # 对应收集每个项目的值,动态调用列表里的名称 item_values = [] for name in item_names: value = float(input(f"Enter value for {name}: ")) item_values.append(value)
这样运行后,完全符合你想要的效果:
Enter number of items: 3
Enter item name: Pants
Enter item name: Shirts
Enter item name: socks
Enter value for Pants:
Enter value for Shirts:
Enter value for socks:
而且后续要访问数据也方便,比如item_names[0]就是第一个项目名,item_values[0]就是对应的值,成对儿的不会混乱。
如果一定要保留原变量命名方式(不推荐)
要是你坚持要生成itemName0、itemValue0这类单独变量,那第二个循环里得动态获取对应下标的itemName变量,修改成这样:
# 项目名称(itemName0、itemName1等) for x in range(itemNum): globals()['itemName%s' % x] = input("Enter item name: ") # 项目值(itemValue0、itemValue1等) for x in range(itemNum): # 动态获取对应x的itemName变量 current_item_name = globals()['itemName%s' % x] globals()['itemValue%s' % x] = float(input(f"Enter value for {current_item_name}: "))
不过还是强烈推荐用列表的方式——这种动态生成变量的写法会污染全局命名空间,调试和维护都很头疼,Python里用容器(列表、字典)来管理批量数据才是更规范的做法。
内容的提问来源于stack exchange,提问作者jDog
相关产品推荐
相关产品推荐

