python开发手机应用

基于kivy
https://kivy.org/
https://kivy.org/doc/stable/tutorials/pong.html

https://github.com/kivy/kivy

基于云的软件开发
https://appinventor.mit.edu/explore/get-started

https://blog.csdn.net/weixin_42619971/article/details/106314581

手机APP开发之MIT Appinventor详细实战教程(十),标准登陆界面的逻辑设计和数据库的有效使用

入门示例教程:
http://appinventor.mit.edu/explore/ai2/hello-codi.html

电脑网页端创建项目地址:
http://ai2.appinventor.mit.edu/

各位,今天有同学报,做出来的app安装到手机的时候,手机里的安全软件会报出病毒的提示。

是“误报”,大家不用理会。

App Inventor作出的应用均含有gray.app.inventor.a插件,该插件被绝大部分杀软识别为病毒。目前该问题尚未得到解决。该插件被误判为后台自动下载文件。

目前360卫士和百度手机卫士均已解除误判。

教程-使用Python Kivy构建Android应用程序

https://www.codenong.com/1665273511351692715/

python命名最佳实践

命名最佳实践:

Python命名风格PEP8最佳实践

常量(UPPERCASE|UPPER_CASE):不会发生改变的全局变量(注意Python本身并不支持C++中的const常量,这里仅仅是约定),由大写字母、[下划线]组成。通常用来保存默认配置的值。

模块、类、方法的私有变量|函数|方法(_lower_case):经常改变的模块级变量(模块内私有),类、方法的私有变量,由前置下划线、小写字母、[下划线]组成。

函数|方法|一般变量|参数|属性(lower_case):小写字母、[下划线]组成。

特殊方法(__lower_case__):通常用于操作符重载、容器定义等,由前置和后置双下划线与小写字母、[下划线]组成。一般是不用不上的。

类(CamelCase):驼峰式命名。

模块和包(lowercase):除特殊模块(如init.py)之外,小写不带下划线。

python报不是有效的 Win32 应用程序

`OSError: [WinError 193] %1 不是有效的 Win32 应用程序。

一般报这种错误是由于引用的dll动态链接库和python位数不匹配。例如,python可能是64位但链接库是32位。

如何判断一个dll/exe是32位还是64位?


我把周立功can的链接库zlgcan.dll用记事本打开是PE L所以是32位,和64位的python不匹配。

exescope可以查看到version是1

网传可以使用depends读取dll信息,实际没有成功。

如果按照了visual studio,会有dumpbin程序,将其文件夹加入环境变量,可以使用该工具查看dll中的函数信息。


E:\mydoc\CAN相关\zlgcan_demo\python合集_20221029\python合集_20221029\python带界面demo\demo<!--autointro-->

python32和python64共存实现

Anaconda 使用 set CONDA_FORCE_32BIT=1 切换32位环境失败的解决方法

set CONDA_FORCE_32BIT=1

使用
conda info查看
还是win-64!!切换失败了啊,然后就找到了如下解决措施

解决措施

因为使用set命令设置环境变量在powershell中无效,所以我们更换如下命令即可

$Env:CONDA_FORCE_32BIT=1

这样就成功切换了。

然后创建虚拟环境
conda create -n python32 python=3.6


(base) PS E:\mydoc\sync_pc_home_work\pyfile\DataExtract<!--autointro-->

python plt避免标题坐标相互重叠

在使用Python matplotlib库的plt函数绘图时,可以采取以下几种方法来避免标题和坐标轴标签的重叠:

  1. 调整图像的大小和尺寸。可以使用plt.subplots函数来创建一个包含多个子图的图像,并通过调整图像大小和尺寸来避免标题和坐标轴标签的重叠。例如:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(x, y)
ax.set_title('Title', fontsize=16)
ax.set_xlabel('X Label', fontsize=14)
ax.set_ylabel('Y Label', fontsize=14)

在上面的代码中,通过设置figsize参数调整图像大小和尺寸,可以避免标题和坐标轴标签的重叠。

  1. 调整坐标轴标签的位置。可以使用plt.subplots_adjust函数来调整坐标轴标签的位置。例如:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Title', fontsize=16)
ax.set_xlabel('X Label', fontsize=14)
ax.set_ylabel('Y Label', fontsize=14)
plt.subplots_adjust(top=0.85, bottom=0.15, left=0.15, right=0.85)

在上面的代码中,通过设置top、bottom、left和right参数来调整坐标轴标签的位置,使它们不会重叠。

  1. 使用旋转的坐标轴标签。可以使用ax.set_xticklabels和ax.set_yticklabels函数来设置坐标轴标签,并通过设置rotation参数来旋转它们。例如:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Title', fontsize=16)
ax.set_xlabel('X Label', fontsize=14)
ax.set_ylabel('Y Label', fontsize=14)
plt.setp(ax.get_xticklabels(), rotation=45)
plt.setp(ax.get_yticklabels(), rotation=45)

在上面的代码中,通过设置rotation参数来旋转坐标轴标签,使它们不会重叠。

python 将一串数字形式的时间转换为标准时间格式

@python 将一串数字形式的时间转换为标准时间格式!!!
1.首先,确定你的那一串时间是10位还是13位的,
如果是10位请看方案一,13位请看解决方案二。
方案一:
10位的数字表示的是秒时间戳。

import time
time.time()#获取当前的秒时间戳

通过下边的代码就可以将10位的秒时间戳抓换为标准输出格式

import time
tupTime = time.localtime(1566366555)#秒时间戳
stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime)
print(stadardTime)
#2019-08-21 13:49:15

方案二:
13位的数字串是毫秒级别的时间戳,通过下边的代码转换为表转格式:

import time
timeNum=1566366547705#毫秒时间戳
timeTemp = float(timeNum/1000)
tupTime = time.localtime(timeTemp)
stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime)
print(stadardTime)
#2019-08-21 13:49:07

python运算符


/
表示浮点数除法, 结果中保留小数点
num = 5
num /= 2
print(num)  # 输出 2.5
1
2
3
//
表示整数除法,返回不大于结果的一个最大的整数.
num = 5
num //= 2
print(num)  # 输出 2
1
2
3
%
取余数
num = 5
num %= 2
print(num)  # 输出 1
1
2
3
参考: https://blog.csdn.net/data8866/article/details/62884210/
补充
而在C/C++中,"/ " 算术运算符的计算结果通常是根据参与运算的两边的数据决定的, 比如:
任意一边是浮点数, 结果就是浮点数
两边都是整型, 结果就是整型
```<!--autointro-->

机器学习中如何保存已经训练好的模型

机器学习中如何保存已经训练好的模型

当我们训练好一个model后,下次如果还想用这个model,我们就需要把这个model保存下来,下次直接导入就好了,不然每次都跑一遍。
sklearn官网提供了两种保存model的方法:

1.使用python自带的pickle

from sklearn.ensemble import RandomForestClassifier
from sklearn import datasets
import pickle
#方法一:python自带的pickle
(X,y) = datasets.load_iris(return_X_y=True)
rfc = RandomForestClassifier(n_estimators=100,max_depth=100)
rfc.fit(X,y)
print(rfc.predict(X[0:1,:]))
#save model
f = open('saved_model/rfc.pickle','wb')
pickle.dump(rfc,f)
f.close()
#load model
f = open('saved_model/rfc.pickle','rb')
rfc1 = pickle.load(f)
f.close()
print(rfc1.predict(X[0:1,:]))

2.使用sklearn中的模块joblib

使用joblib模块更加的简单了,核心代码就两行


from sklearn.ensemble import RandomForestClassifier
from sklearn import datasets
from sklearn.externals import joblib
#方法二:使用sklearn中的模块joblib
(X,y) = datasets.load_iris(return_X_y=True)
rfc = RandomForestClassifier(n_estimators=100,max_depth=100)
rfc.fit(X,y)
print(rfc.predict(X[0:1,:]))
#save model
joblib.dump(rfc, 'saved_model/rfc.pkl')
#load model
rfc2 = joblib.load('saved_model/rfc.pkl')
print(rfc2.predict(X[0:1,:]))
```<!--autointro-->