Questions tagged «programming-logic»

16
当TDD没有帮助时,如何避免代码中的逻辑错误?
最近,我正在编写一小段代码,以人类友好的方式指示事件的年代。例如,它可能表明该事件发生在“三周前”或“一个月前”或“昨天”。 需求相对明确,这是测试驱动开发的完美案例。我一个接一个地编写了测试,实现了通过每个测试的代码,一切似乎都正常运行。直到生产中出现错误为止。 这是相关的代码段: now = datetime.datetime.utcnow() today = now.date() if event_date.date() == today: return "Today" yesterday = today - datetime.timedelta(1) if event_date.date() == yesterday: return "Yesterday" delta = (now - event_date).days if delta < 7: return _number_to_text(delta) + " days ago" if delta < 30: weeks = math.floor(delta / 7) …

14
如何逻辑地定义“或”
最近,我遇到了一个问题,该问题要求我以编程方式定义逻辑“ OR”运算符,但不使用运算符本身。 我想到的是: OR(arg1, arg2) if arg1 = True and arg2 = True return True else if arg1 = True and arg2 = False return True else if arg1 = False and arg2 = True return True else: return False 这种逻辑是正确的,还是我错过了什么?

15
支持或反对使用Try / Catch作为逻辑运算符的论点
我刚刚在我们公司的应用程序中发现了一些可爱的代码,这些代码使用Try-Catch块作为逻辑运算符。 意思是,“执行一些代码,如果抛出此错误,则执行此代码,但如果抛出此错误,则执行此第三项操作”。 它使用“最后”作为出现的“其他”语句。 我知道这本质上是错的,但是在我去打架之前,我希望能有一些深思熟虑的论点。 嘿,如果您有关于以这种方式使用Try-Catch的参数,请务必告知。 对于任何想知道的人,该语言是C#,所讨论的代码大约有30多行,并且正在寻找特定的异常,因此它无法处理所有异常。

7
如果/ else阻止如何将真值表变为最小
如何获取真值表并将其转换为压缩的if块? 例如,假设我有一个真值表,其中A和B是条件,而x,y和z是可能的动作: A B | x y z ------------- 0 0 | 0 0 1 0 1 | 0 0 1 1 0 | 0 1 0 1 1 | 1 0 0 如果阻塞,则可以转换为以下内容: if(A) { if(B) { do(x) } else { do(y) } } else { do(z) } 这是一个简单的示例,但是我经常遇到几种情况,这些情况以不同的方式组合在一起会产生不同的输出,并且很难找出最紧凑,最优雅的方式在if块中表示其逻辑。

5
什么时候在条件表达式中使用按位运算符合适?
首先,有一些背景知识:我是一名IT培训师,我想在我的10年级课程中介绍Java的布尔运算符。我的导师查看了我准备的工作表,并评论说我可以让他们只使用一个&或|。表示操作员,因为他们“做同样的事情”。 我知道&和&&之间的区别。 &是按位运算符,旨在在整数之间使用,以执行“位旋转”。 &&是旨在在布尔值之间使用的条件运算符。 为了证明这些运算符并不总是“做相同的事情”,我着手寻找一个示例,在该示例中,使用布尔值之间的按位运算会导致错误。我找到了这个例子 boolean bitwise; boolean conditional; int i=10, j=12; bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3 System.out.println(bitwise+ " "+ i); i=10; conditional = (i<j) || (i=3) > 5 ; // value of i after oper: 10 System.out.println(conditional+ " "+ i); …

2
处理订阅,余额和定价计划更改
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 序言 我的目的是为多个项目创建可重用的代码(并在github上发布)以管理订阅。我了解条带化和定期计费提供商,但这不是该模块的目标。它应该只是用于计算帐户余额,轻松通知续订订阅以及处理价格计算的包装程序/帮助程序。 在某些国家/地区,您可能无法使用重复计费,因为提供商或付款方式对此支持不佳或没有支持,或者价格太高(小额付款)。而且有些人不想使用循环计费,而是手动支付账单/在年末开具发票。因此,请不要建议贝宝定期计费,递归或类似服务。 情况 假设您有一个可以订阅订阅计划的模型(例如User)。该模型具有一个字段,该字段存储当前正在订阅的订阅计划的标识符。因此,在每次计划更改时,都会记录更改。 有一个模型(例如SubscriptionPlanChanges),其中的以下字段记录了提到的更改: subscriber与订阅模型有关(User在这种情况下) from_plan 定义更改之前模型具有的计划标识符 to_plan 定义模型现在选择的计划标识符 created_at 是存储更改的日期时间字段 valid_until 存储日期,直到实际订阅有效 paid_at 也是一个日期时间字段,用于定义是否(以及何时)订阅已支付 当然,这种布局是可以讨论的。 帐户余额问题 当用户更改其订阅计划时,我需要比较计划字段,获取价格,并根据当前计划valid_until及其价格计算新计划的扣除额。说:您订购了计划A的一年,但是在6个月后,您升级到计划B,因此您可以从计划A的6个月中扣除一半的已付价格。 我想知道的是:如果某个用户(例如)切换到免费计划,那么他有一个积分,如果该用户想要再次切换,则可以扣除该积分。您会在另一个字段中缓存该值,还是每次都计算与该用户相关的所有记录?您会添加/更改有关表格布局的内容吗? 易于理解的问题 当订阅期结束时,用户会收到通知,并有可能通过再次付费来续订其订阅。最简单的方法是只更新paid_at和valid_until新的订阅选项。但是,我不确定您是否存储了某人可能需要的所有数据,例如付款/订阅历史记录。 另一个选择是为此创建一个附加记录,其中from_plan和to_plan具有相同的标识符(因此表示“无变化”)。但是这不会以某种方式干扰帐户余额的计算吗? 如果有人能为我指出有关处理此类订阅的逻辑的正确方向,我将非常感激。 更新 感谢您的帮助。我认为我的问题太模糊了,因此我将尝试通过使用较少的抽象来使其更加精确。不幸的是,我还不能解决我的问题。 案例A User可以选择Subscription Plan A。当前,此文件存储了一个SubscriptionPlanChange以进行跟踪。例如5个月后,User将其订阅升级为Subscription Plan B。因此,他为新订阅支付价格,减去未使用的7个月的方案a的价格。 案例B 3个月后,User回滚到他的Subscription Plan A。他不必付款,但会收到一笔余额,因此,在订阅结束时,他将从新订阅中扣除该余额。 案例C User可以为具有独立订阅计划的子服务选择订阅计划。相同Case A,Case B可以申请该子服务订阅。 _Case D_ 用户取消其订阅之一。这导致他的余额增加了。 我的问题(目前至少是)主要取决于如何正确存储数据,以便我可以重现订阅的历史以进行业务分析和计算余额,并根据订阅获得未付款项等。 我也不确定是否应将余额存储在例如用户模型本身中,或者是否未存储但可以根据存储的数据/历史记录随时进行计算。 需要注意一些事项,尽管我认为它们不应该引入问题: …

7
编程知识与编程逻辑
这两个主题之间有什么区别吗?我见过一些公司要求良好编程知识的一些良好编程逻辑。 我已经在作业的开发人员资料中看到了这一点–例如“良好的编程逻辑”,“强大的编程知识”。 我认为编程知识与所考虑语言的知识有关,并且编程逻辑是使用编程来解决问题的逻辑(通常)。 如果我错了,请纠正我。还有什么更重要的呢? 编辑:为应用程序选择组件,设计用于验证用户输入的界面是否属于编程知识或编程逻辑? 编程逻辑仅仅是暗示解决问题,还是应该包含其他内容?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.