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

Python报错:can't multiply sequence by non-int of type 'float'问题求助

解决Python咖啡订单程序中的"can't multiply sequence by non-int of type 'float'"错误

我是Python新手,受该问题困扰已一周。运行咖啡订单程序时出现报错:can't multiply sequence by non-int of type 'float',卡在计算总价的部分,恳请帮忙解决。

原代码

price = {
    "Espresso": 5.80,
    "Americano": 6.90,
}

currency = "$"

print ("welcome coffee machine!\t")
name = input ("can i get your name?\n")

print ("what do you like to order mr/ms " + name + "\n"  )


menu = ("Espresso, Americano")

print (menu)
menu = (input())


quantity = input("How many " + menu + " would you like?\n")
quantity = str(input())

#im stuck at here! T_T 
if menu == "Espresso" :
    price = 5.80
    total = quantity * price
    quantity.append(quantity)
    price.append(price)
    print(total)

elif menu == "Americano":
    price = 6.90
    total = quantity * price
    quantity.append(quantity)
    price.append(price)
    print(total)

else:
     menu()

#invoice receipt

print("Thank you for order " + name + ", please wait your " + menu + " at counter\n")

错误原因分析

  • 数量类型错误:你把quantity转成了字符串(str(input())),字符串和浮点数(价格)相乘会触发报错——Python仅允许字符串和整数相乘(作用是重复字符串),和浮点数相乘无意义,所以报错。
  • 重复获取输入:连续两次调用input()获取数量,第一次的输入被直接覆盖,完全没必要。
  • 错误调用列表方法:append()是列表的方法,但quantity是字符串,不能调用这个方法;且逻辑上也不需要把数量添加到自身,属于错误写法。
  • 浪费字典资源:一开始定义了price字典存储饮品价格,但后面又直接给price赋值单个浮点数,完全可以直接用字典取值。
  • else分支错误:menu是字符串,不是函数,调用menu()会触发新的报错。

修正后的代码

price = {
    "Espresso": 5.80,
    "Americano": 6.90,
}

currency = "$"

print("welcome coffee machine!")
name = input("can i get your name?\n")

print(f"what do you like to order mr/ms {name}\n")

# 更清晰地展示菜单
menu_options = ["Espresso", "Americano"]
print("Available drinks:", ", ".join(menu_options))
menu = input("Please enter your choice: ").strip()

# 获取数量并转为整数,添加输入验证避免无效值
while True:
    try:
        quantity = int(input(f"How many {menu} would you like?\n"))
        if quantity > 0:
            break
        else:
            print("Please enter a positive number.")
    except ValueError:
        print("Invalid input, please enter a number.")

# 计算并输出总价
if menu in price:
    total = quantity * price[menu]
    print(f"Total price: {currency}{total:.2f}")
else:
    print(f"Sorry, {menu} is not on our menu.")

# 结账提示
print(f"Thank you for your order {name}, please wait for your {menu} at the counter.\n")

主要修正点

  1. 将quantity转为整数类型,确保可以和浮点数价格正常相乘。
  2. 移除重复的input()调用,添加输入验证,防止用户输入非数字或负数。
  3. 利用price字典直接获取对应饮品的价格,避免重复赋值。
  4. 移除错误的append()调用,修正else分支的错误处理逻辑。
  5. 使用f-string让字符串拼接更简洁易读。

内容的提问来源于stack exchange,提问作者Merong Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:05:21