我试图让用户输入某些商品的价格清单,并确定他们可以用用户输入的美元金额购买多少商品。但是,当我尝试创建一个循环来打印它们具有多少个选项或组合时,出现一个错误,提示我无法比较浮点数和列表。
a = f'{len([1])}'
print(a)
#1
我以为自从将列表的输入转换为浮点数后,我就可以使用比较运算符了,而且我不确定该如何解决。
答案 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:”命令将所有元素与单个元素进行比较,但此命令不会对匹配进行计数,仅处理等价项,而不是小于或等于。
最后,我调整了您的代码,使其以逗号而不是空格分割,并且使用常规打印命令而不是字符串格式。这些是美学选择,因此希望您能原谅这些变化。格式命令或空格分割没有任何问题。
我希望这会有所帮助。