尝试对两个变量使用<=运算符时出现错误

时间:2019-10-04 01:16:02

标签: python python-3.x

我试图让用户输入某些商品的价格清单,并确定他们可以用用户输入的美元金额购买多少商品。但是,当我尝试创建一个循环来打印它们具有多少个选项或组合时,出现一个错误,提示我无法比较浮点数和列表。

 a = f'{len([1])}'
 print(a)
 #1

我以为自从将列表的输入转换为浮点数后,我就可以使用比较运算符了,而且我不确定该如何解决。

3 个答案:

答案 0 :(得分:2)

这是一种方法:

prices = [float(x) for x in input("Prices: ").split()]
dollar = float(input("Dollar: "))
options = sum(1 for x in prices if x <= dollar)
print(f"Options: {options}")

请注意,我们必须:

  • 确保所有输入都转换为浮点数。
  • 将列表理解的结果存储到变量prices中。
  • 过滤掉dollar以上的所有内容,并用1替换每个内容。
  • 将所有1相加。

答案 1 :(得分:1)

您误解了代码中的一些内容。您是对的,此[float(x) for x in prices]行可以将列表中的每个项目都转换为float。但是,我将接受 @KlausD 的声明“您的列表理解没有任何作用。您将结果存储在某个地方。” 此处if prices <= dollar:就是直接比较prices (list)dollar (float)

您可以在for loop之前添加if statement行,以便对每个项目进行迭代。

prices = input("enter a list of prices: ").split()
dollar = float(input("enter dollar amount: "))
print()
options = 0
for x in prices:
    if float(x) <= dollar:
        options += 1 
        print(f"you have {options} options")

答案 2 :(得分:0)

这是您想要程序执行的操作吗?

prices = input("enter a list of prices: ").split(",")
prices = [float(x) for x in prices]
dollar = float(input("enter dollar amount: "))
print()
options = 0
for price in prices:
    if price <= dollar:
        options += 1

print("You have "+str(options)+" options")

原始程序存在两个主要问题。

首先,当您将字符串值转换为float时,没有将列表分配给变量,因此Python立即完成转换后就丢失了该列表。

第二,当您将浮动价格列表与美元价格进行比较时,您没有单独遍历列表中的每个项目。虽然可以使用“ if x in list:”命令将所有元素与单个元素进行比较,但此命令不会对匹配进行计数,仅处理等价项,而不是小于或等于。

最后,我调整了您的代码,使其以逗号而不是空格分割,并且使用常规打印命令而不是字符串格式。这些是美学选择,因此希望您能原谅这些变化。格式命令或空格分割没有任何问题。

我希望这会有所帮助。