根据用户输入选择正确的else语句

时间:2016-09-21 19:34:32

标签: python variables if-statement

我正在开发一个用户输入价格的小程序,然后程序会根据输入输出运费。

Traceback (most recent call last):
  File "template.py", line 294, in <module>
    popt, pcov = curve_fit(lambda x, a, xc: lorentz(x, a, xc, p3, p4), abjd, adata, bounds=param_bounds)
  File "/usr/local/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 683, in curve_fit
    **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/scipy/optimize/_lsq/least_squares.py", line 769, in least_squares
    f0 = fun_wrapped(x0)
  File "/usr/local/lib/python2.7/dist-packages/scipy/optimize/_lsq/least_squares.py", line 764, in fun_wrapped
    return np.atleast_1d(fun(x, *args, **kwargs))
  File "/usr/local/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 455, in func_wrapped
    return func(xdata, *params) - ydata
TypeError: <lambda>() takes exactly 3 arguments (2 given)

我是python和编程的新手,我不确定这是否是一个很好的方法,但我正在学习if-else语句,所以我想我会尝试一下。到目前为止,只有输入“50”金额才有效。它将仅根据“50”计算国家。我不知道自己哪里出错了,如果有人可以提供帮助和解释,那就太棒了。

2 个答案:

答案 0 :(得分:1)

您的第一个class Room < ActiveRecord::Base has_many :reservations has_many :users, through: :reservations def self.find_unreserved date_begin, date_end, category reserved_room_ids = Reservation.on(date_begin, date_end).pluck('DISTINCT room_id') if reserved_room_ids.empty? where(category: category) else where('id NOT IN ?', reserved_room_ids).where(category: category) end end end class Reservation < ActiveRecord::Base belongs_to :room belongs_to :user scope :on, -> (checkin_date, checkout_date) {where('checkin_at > ? AND checkout_at < ?', checkin_date, checkout_date) } end 只有在小于或等于50的情况下才会输入...您进行的下一次检查是否大于50,但它不能 - 所以块永远不会执行...所以你的if子句是唯一可以执行的子句......基本上,你的嵌套else语句不会执行,因为这样做的标准已被排除在附件if之外。

你最好将你的逻辑重组为:

if

答案 1 :(得分:0)

你的逻辑有点棘手。如果金额<= 50美元,那么它不是&gt; $ 50或&lt; = $ 100,因此嵌套“if”之后的任何内容都将永远不会执行:

if orderTotal <= 50.00:
    if orderTotal > 50.00 and orderTotal <= 100.00:
        # ** this will never run **
    else:
        # This will run, if orderTotal <= 50.00

如果orderTotal > 50.00,则不会发生任何事情,因为else测试没有if orderTotal <= 50.00。 @Jon Clements的回答显示了构建代码的正确方法。