在物理实验室做实验的时候,我们可能会苦恼于元件不够整齐,需要重复的搭建某些电路且重复地做测试,或元件无法浮空等问题。这些问题都可以通过改存档来轻易解决!然而,手动改存档操作麻烦且出错率高。于是我写了physicsLab
,并在其中封装了一些常用功能,让你用Python
也能够轻易地在物实做实验,而且你甚至不需用知道存档在电脑的哪里!
请确保你的电脑有Python(大于等于3.8)与物理实验室PC版(简称物实
)(也可以联系开发者Jone-Chen)
在cmd或shell输入以下载physicsLab:
pip install physicsLab
在某些非正常情况,你可能无法顺利使用pip
,此时你可以换为该命令来解决该问题:
python -m pip install physicsLab
在Windows
下,该命令等价于:
py -m pip install physicsLab
pip install plmidi
pip install pygame
点击跳转至plmidi
之所以没有做安装physicsLab的时候自动安装这两个库,是因为安卓的qpython
在下载含c的库的时候存在问题
utf-8
。但在一些非正常情况,存档的编码可能被改变。虽然physicsLab
有一定的处理存档编码问题的能力,但如果还是出现了问题,请输入该命令:pip install chardet
此时physicsLab
会自动调用chardet
来处理更加棘手的文件编码问题。
physicsLab
已经可以使用了from physicsLab import *
with experiment("example"):
Logic_Input(0, 0, 0.1)
然后打开物实,点击从本地读取
,点击一个名为example
的实验。如果出现了一个悬空的逻辑输入,则说明一切都成功了。
Note: 每次运行
physicsLab
后都需要重新加载物实的本地存档,即点击从本地读取
,再次点击对应存档,使物实重新加载该存档
切换至physicsLab根目录,输入以下指令 (仅限于Windows
):
.\cmd\setup_project.bat
pip安装的包会被放在site-package
文件夹下
这大概率是因为pip安装的包所对应的site-package
与你使用的python
对应的site-package
不一样导致的
解决方案:找到ide调用的python
对应的site-package
,然后把physicsLab
与physicsLab.egg-info
复制过去
同时我推荐去学一下python
的虚拟环境venv
,有效解决此问题
如果此方法失效了,虽然这一定不是这个方法的问题,但你还可以在python的开头写上这两行代码来解决这个问题:
import sys
sys.path.append("/your/path/of/physicsLab") # 将字符串替换为你想添加的路径
这个方法很丑陋但很简单好用,可以帮你快速解决问题,毕竟能跑起来就很不错了
其原理是python会在sys.path这个列表里面的路径去寻找python package,若未找到则会报错。因此该方法的原理就是把python找不到的路径加进去,python就找到了
注:每次运行的时候加入的path都是临时的,因此该方法必须让python在每次运行的时候都执行一遍
目前physicsLab
在windows
上的支持最好,在Android
上仅支持手动导入/导出存档(默认在physicsLabSav
文件夹中)。
其他操作系统上的行为与在Android
上应该一致,但未经过测试。
在
qpython v3.2.5
中大大削减了python在文件路径操作方面的权限,这意味着在qpython上使用physicsLab生成的存档将很难被物实导入,因为物实没权限访问不了。 但此问题在qpython v3.2.3中不存在,推荐下载该版本。 不过由于安卓权限的问题,用起来肯定没有电脑上方便。
下面给出一个简单的例子(该例子仅用于讲解,你大概率无法运行):
from physicsLab import *
# 打开存档
# 也支持输入存档的文件名(也就是xxx.sav)
e = Experiment("example")
# 如果你希望程序不覆盖掉存档中已有的实验状态,需要这样写
e.read()
# 创建一个逻辑输入,坐标为(0, 0, 0.1)
Logic_Input(0, 0, 0.1)
# 你也可以不写坐标,默认是(0,0,0)
o = Or_Gate()
# 元件含有引脚属性,是对物实原始的引脚表示方法的封装
# 比如或门(Or_Gate),含有 i_up, i_low, o三个引脚属性
# 通过引脚属性,就可以更方便的连接导线了
# crt_Wire()函数用来连接导线,有三个参数:SourcePin, TargetPin, color
# SourcePin与TargetPin必须传入元件的引脚
# color可以不写,默认为蓝色
crt_Wire(o.i_up, o.i_low)
# 将程序中生成的原件,导线等等写入存档
e.write()
# 然后用物实打开存档见证奇迹
physicsLab
还支持等价但更优雅的方式 (这也是我最推荐的方式):
from physicsLab import *
with experiment("example", read=True):
Logic_Input(0, 0, 0.1)
o = Or_Gate()
o.i_up - o.i_low # 连接导线
上面两段代码产生的结果是一样的
更详细的内容请在文档中查看
由于physicsLab
使用中文注释而且物实的存档也使用了中文
因此我建议你手动在Python
代码的第一行添加如下注释:
# -*- coding: utf-8 -*-
不过由于编码导致问题的情况似乎很少
physicsLab
拥有优秀的与物实存档交互的能力,你甚至可以使用程序完成部分工作之后你再继续完成或者让程序在你已完成的实验的基础上继续完成。physicsLab
为纯python库,其c拓展部分(主要是midi相关的)被放到了plmidi
中,但plmidi
不是必须需要的。纯Python库通常意味着更容易使用,更少的问题。mido
,但没有mido带来的影响仅仅是physicsLab.music
无法使用罢了。physicsLab
没有强行要求代码风格,但需要注意与上下文保持一致
你可以从更新文档、bugfix、写测试代码开始入手
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。