Python 如何缩短代码而不是使用几个if语句:

Python 如何缩短代码而不是使用几个if语句:,python,Python,我正在制作一个自动售货机程序,我需要禁用没有足够信用的产品选项,我如何缩短代码而不是使用if语句:很抱歉造成混淆,我需要检查他们是否有足够的钱购买该产品,如果他们没有,那么该产品不应该列在自动售货机上销售 prices = [30.50,45,90,89] money = "30" if money != prices[0]: print("option disabled") else: print("you can buy thi

我正在制作一个自动售货机程序,我需要禁用没有足够信用的产品选项,我如何缩短代码而不是使用if语句:很抱歉造成混淆,我需要检查他们是否有足够的钱购买该产品,如果他们没有,那么该产品不应该列在自动售货机上销售

    prices = [30.50,45,90,89]
    money = "30"
    if money != prices[0]:
        print("option disabled")
    else:
        print("you can buy this")

我建议使用
for
循环:

for price in prices:
    if money >= price:
        print("You can buy this")
    else:
        print("Option disabled")

不确定您的其余数据是如何存储/显示的,因此可能需要对您的问题/此帖子进行进一步编辑。

也许一份可购买价格列表更适合您在自动售货机上实现这一点

[price for price in prices if price <= float(money)]

[price for price in prices if price我建议创建一个产品列表,每个产品都具有特定属性(理想情况下,您可以实现一个表示产品的类)。然后您可以循环查看每个产品并检查价格:

product_list = []

# Add some products to the list
# [ Name, Price, Summer Only, Sale ]
product_list.append(['Apple', 5.50, true, false])
product_list.append(['Orange', 9.0, false, false])
product_list.append(['Spam', 0.5, false, true])

# Suppose the user has some money
money = 5.0

for prd in product_list:
    if prd[1] > money:
        print("You can buy {0}".format(prd[0]))
    elif prd[3] and prd[1]*0.1 > money:
        print("Yay, {0} is on sale.  You can buy {0}".format(prd[0]))
更好的选择是创建一个类来存储有关产品的信息:

class Product:
    def __init__(self, name, price, summer, sale):
        self.name = name
        self.price = price
        self.is_summer = summer
        self.is_sale = sale

    def is_affordable(self, money):
        if self.is_sale: return self.price*0.1 <= money
        return self.price <= money

# Then you can again have a list of product
my_products = []
my_products.append(Product('Apple', 5.5, true, false))
my_products.append(Product('Spam', 0.1, false, true))

money = 5.0

for prd in my_products:
    if prd.is_sale:
        print("---- We are currently having a sale on {1} ---".format(prd.name))
    if prd.is_affordable(money):
        print("You can afford to buy {0}".format(prd.name))
    else:
        print("You can not afford to buy {0}".format(prd.name))
类产品:
定义初始(自我、名称、价格、夏季、销售):
self.name=名称
self.price=价格
self.is_summer=夏天
self.is_sale=销售
def价格合理(自我、金钱):

如果self.is_sale:return self.price*0.1您只是将钱与价目表的第一个元素进行比较。这是您需要的吗?或者您想迭代价目表?您可以使用
else
而不是
elif
,因为这两个条件完全相反。此外,您还尝试将字符串与浮点进行比较,因此,它们在这里永远不会相等。在第二个if语句中,您应该用>=替换==。正如其他人所指出的,您的代码中可能存在一些语义错误,这些错误稍后会对您造成影响,但您的代码没有什么太多的冗长之处。一旦我们知道您实际要做什么,可能会有更好的解决方案。在第一种情况下,y你可以使用一个<代码>命名的tuple < /代码>到第二个几乎相同的效果,第二个我不理解你的<代码> IsAdabdie为什么不只是返回<代码> Self.Prase@科波菲尔你的右边,一个<代码>命名的tuple < /代码>或者类似的东西会起作用,但是一个基于类的解决方案会更好地被考虑。属于
产品
,其价格根据库存数量而变化。具有类别(以及计算价格/可承受性的方法)可能会比使用
名为tuple
@Copperfield更干净回顾过去,我认为乘以
0.1
是一个糟糕的例子,但我试图表明可以从主循环中取出东西并在其他地方计算。是的,我知道所有这些,您也可以从
名为tuple
继承并保存
\u init__
如果你不在乎检查输入,我关于
的问题是关于你的实现,而不是它的语义。也许你的目的是申请夏季折扣?