如何从用户输入提取字典值?解决Python AttributeError问题
问题解决:订单小计累加的错误修正
错误原因分析
你遇到的AttributeError: 'str' object has no attribute 'myDict',是因为**order是用户输入的字符串类型**,你错误地尝试通过order.myDict.values()去获取价格——正确的方式是用字典的键取值语法,通过myDict[order]来获取对应商品的价格。
除此之外,你的代码还有其他逻辑和拼写问题,比如startswith/endswith的链式调用错误、循环逻辑混乱、starswith拼写错误,下面是修正后的完整代码:
修正后的代码
import pandas as pd myDict = { "Wakanda Burger": 4.99, "Tony Fries": 2.99, "Hulk Shake": 4.55 } # 转换为DataFrame的代码保留 df = pd.DataFrame([myDict]) print(df) def user_order(): subTotal = 0 while True: # 获取用户订单,先校验商品是否存在 order = input("Hi, Welcome to Marvel Eateries. What would you like?: ") while order not in myDict: order = input('Item not found. Try again: ') # 累加对应商品的价格 subTotal += myDict[order] print(f"Perfect, {order} has been added to your order. Current subtotal: {subTotal:.2f}") # 询问是否继续下单 anyElse = input("Anything else? (yes/no): ").strip().lower() # 处理用户输入,支持n/no/y/yes等变体 if anyElse in ['n', 'no']: print(f"Splendid, your total is {subTotal:.2f}.") break elif anyElse not in ['y', 'yes']: print("Invalid input, assuming you want to continue.") return subTotal # 调用函数 user_order()
关键修正点说明
- 价格累加逻辑:将
subTotal = subTotal + order.myDict.values()改为subTotal += myDict[order],直接通过字典键获取对应价格并累加 - 循环逻辑重构:用一个外层
while True循环处理整个下单流程,避免嵌套循环导致的逻辑混乱 - 输入处理优化:将用户输入转为小写并去除空格,支持
n/no/y/yes等多种输入形式,提升交互友好性 - 拼写错误修正:把
starswith改为正确的startswith - 实时小计反馈:每次添加商品后显示当前小计,让用户更清晰订单状态
内容的提问来源于stack exchange,提问作者Ray953
相关产品推荐
相关产品推荐

