我正在开发一个用户输入价格的小程序,然后程序会根据输入输出运费。
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”计算国家。我不知道自己哪里出错了,如果有人可以提供帮助和解释,那就太棒了。
答案 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的回答显示了构建代码的正确方法。