1

我正在查看 pydatalog,并根据此博客条目松散地创建了这个快速转换程序:

转换长度.py:

from pyDatalog import pyDatalog

pyDatalog.create_terms(','.join((
    'scale',
    'convert',
    'From',
    'To',
    'Intermediate',
    'Value',
    'X',
    'Y')))

scale['meter', 'aln'] = 1.684132
scale['meter', 'angstrom'] = 1e+10
scale['meter', 'centimeter'] = 100
scale['meter', 'millimeter'] = 1000
scale['meter', 'inch'] = 39.370079

scale['light year', 'meter'] = 9.461e+15
scale['astronomical unit', 'meter'] = 1.496e+11

scale['foot', 'inch'] = 12
scale['yard', 'foot'] = 3
scale['mile', 'yard'] = 1760


scale['meter', 'm'] = 1
scale['centimeter', 'cm'] = 1
scale['millimeter', 'mm'] = 1
scale['light year', 'ly'] = 1
scale['astronomical unit', 'au'] = 1

scale[From, To] = 1/scale[To, From]
scale[From, To] = scale[From, Intermediate] * scale[Intermediate, To]

convert[Value, From, To] = Value * scale[From, To]

事情在 shell 中开始很好,但最后一个 print 语句只是挂起:

Python 3.5.2 (default, Jul  5 2016, 12:43:10) 
Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: run convert_length.py

In [2]: print(X.in_(range(2)))
X
-
0
1

In [3]: print((Y == convert[1, 'cm', 'inch']))
Y                  
-------------------
0.39370078999999997

In [4]: print(X.in_(range(2)) & (Y == convert[1, 'cm', 'inch']))

...而且我什至还没有用 X 代替 1 来查看几个值!

(scratch) ~/wk/pydatalog $ pip freeze | grep -i pydatalog
pyDatalog==0.17.1

我在做一些明显错误的事情吗?

4

0 回答 0