【发布时间】:2013-11-05 01:49:16
【问题描述】:
为了好玩,我正在为 Python 制作一个单位转换函数。
这是我的代码,到目前为止:
def UnitConverter(number,*units):
if units == ("feet","inches"):
return number*12
elif units == ("ft","yd"):
return number/3
您可能知道我是如何完成这项工作的。
因为我对优雅、良好的代码实践和整体流程非常着迷,所以除了我的主要问题:我怎样才能有效地检查列表if 语句中的排列数?
示例:是否有有效的方法来完成这项工作?
def UnitConverter(number,*units):
if units == (("feet" or "foot" or "ft."),("inches" or "in" or "in.")):
return number*12
elif units == ("ft","yd"):
return number/3
如果没有,有没有办法重组我的程序,以便有人可以输入三个参数number、unit1、unit2,在编码端,我可以有效地包含所有替代拼写每个单元(feet,foot,ft,etc)?
我真的很重视每个人的意见。
谢谢!
【问题讨论】:
-
你为什么接受
*units,然后反复隐式强制它为两个值,而不是仅仅接受fromunit, tounit作为两个单独的参数? -
此外,如果 N 比 3 好得多,尝试处理 N 个单位与 N-1 个其他单位的笛卡尔积将意味着大量代码。为什么不分两步执行此操作:从
fromunit转换为某个规范单位,然后从规范单位转换为tounit。那么你只需要 N*2if条件而不是 N**2。 -
+1 到 abarnert,除了改成
from_unit和to_unit -
@abarnert 我使用 *units 是因为我最初计划返回用户想要的任意多的转化,即一对多的转化。
-
这里还有一个建议:(BSD 或 GNU)units 工具几乎完全符合您的要求,它带有一个漂亮、相对易于解析的数据文件
units.lib,它可以用于构建,例如,RemcoGerlich 的答案中使用的字典。
标签: python list python-2.7 conditional-statements conditional-operator