You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从用户输入提取字典值?解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 07:05:10