日期: 2021 年 4 月 10 日

利用python实现杜利特尔分解法

利用python实现杜利特尔分解法

杜利特尔分解法
博主目前大二在读,代码水平有限轻喷
使用的是python语言,适于数学者,通篇没有用到高级函数

a=[]
L=[]
U=[]
ling=0
jieshu=int(input(“矩阵的阶数:”))
print(“请输入方程的系数矩阵”)
for i in range(jieshu):
onerow=[]
Lonerow=[]
Uonerow=[]
for j in range(jieshu):
x=float(input())
onerow.append(x)
Lonerow.append(ling)
Uonerow.append(ling)
a.append(onerow)
L.append(Lonerow)
U.append(Uonerow)
print(“请输入方程等式右边的常数项”)
b=[]
for i in range(jieshu):
onerow1=[]
for i in range(1):
xx=float(input())
onerow1.append(xx)
b.append(onerow1)
for i in range(jieshu):
U[0][i]=a[0][i]
for i in range(1,jieshu):
L[i][0]=a[i][0]/U[0][0]
for i in range(2,jieshu+1):

for j in range(i,jieshu+1):
he=0
for k in range(1,j):
he+=L[i-1][k-1]*U[k-1][j-1]
U[i-1][j-1]=a[i-1][j-1]-he
for j in range(i+1,jieshu+1):
he=0
for k in range(1,j):
he+=L[j-1][k-1]*U[k-1][i-1]
L[j-1][i-1]=(a[j-1][i-1]-he)/U[i-1][i-1]
for i in range(jieshu):
L[i][i]=1
print(‘L=’,L)
print(‘U=’,U)
Y=[]
X=[]
for i in range(jieshu):
onerow2=[]
onerow3=[]
for i in range(1):
onerow2.append(0)
onerow3.append(0)
X.append(onerow2)
Y.append(onerow3)
for i in range(jieshu):
if i == 0:
Y[0][0]=b[0][0]
else:
he=0
for j in range(1,i+1):
he+=L[i][j-1]*Y[j-1][0]
Y[i][0]=b[i][0]-he
for i in range(jieshu):
he1=0
wuhu=jieshu-i
if wuhu == jieshu:
X[jieshu-1][0]=Y[jieshu-1][0]/U[jieshu-1][jieshu-1]
else:
for j in range(wuhu,jieshu):
he1+=U[wuhu-1][j]*X[j][0]
X[wuhu-1][0]=(Y[wuhu-1][0]-he1)/U[wuhu-1][wuhu-1]
print(‘x=’,X)

%title插图%num

iOS arm64汇编中寄存器和基本指令

iOS汇编(汇编语言依赖于机器)
真机,arm64汇编, GNU汇编
模拟器:x86汇编(Mac电脑) , AT&T汇编

真机:arm64汇编
寄存器:
通用寄存器
64bit的:x0~x28,29个寄存器每个寄存器都是64位的,64位就是8 个字节,一个寄存器*多能放8个字节的数据
32bit的:w0~w28(属于x0~x28的低32bit) 4个字节
x0~x7通常拿来存放函数的参数,更多的参数使用堆栈来传递
x0通常拿来存放函数的返回值
程序状态寄存器
cpsr(current program status register)
spsr(saved program status register) ,异常状态下使用
指令
堆栈
在xcode中建立汇编文件

%title插图%num

%title插图%num
在汇编文件中如何写函数
.text // 放代码段的 .data//数据段,.stack// 栈段
test: // 函数名称
在外面如何调用汇编文件就要建一个叫arm.h的头文件

%title插图%num

%title插图%num

汇编指令
ret 返回指令
mov 目的寄存器,源操作数 // 将右边的源操作数复制到左边的目的寄存器中

汇编文件写函数

%title插图%num

%title插图%num
指令还有next,nexti 表示如果遇到函数直接逃过这个函数,如果遇到代码是一行一行执行,step,遇到代码也是一行一行执行,如果遇到函数直接进去,stepi-> step instruction一条一条汇编指令跳过.si,执行这一句汇编指令,敲c这个函数过掉了.

%title插图%num

%title插图%num
cmp:将2个寄存器相减,相减的结果会影响cpsr寄存器的标志位
b : 跳转指令, jamp

%title插图%num

%title插图%num

%title插图%num

条件域:

%title插图%num
EQ: equal,相等
NE:not equal,不相等
GT:great than,大于
GE great or equal,大于等于
LT:less than,小于
LE:less equal, 小于等于

bl:带返回的跳转指令,跳转完返回到跳转的下一行

内存操作指令
load, 从内存中装载数据,从内存中读数据到寄存器
ldr,ldur,去内存数据放到寄存器中,区别是如果右边立即数为负数则用的是ldur,如果右边立即数为正数则用ldr.立即数为偏移值

%title插图%num

ldp:(p是pair的简称,一对的意思)从内存中读取数据放到一对寄存器中
ldp w0, w1, [x2, #0x10],取[x2,#0x10]的前4个字节给w0,接着下面的4个字节给w1

%title插图%num

store指令往内存中存储数据
str, stur指令将寄存器里的值往内存中写入数据

stp指令 w0, w1, [x1, #-0x5] ,将w0四个字节的数据放入[x1, #-0x5],再讲w1的四个字节的数据放入[x1, #-0x5]中
先写寄存器w0,w1,再写内存寻址[x1, #-0x5]
寻址方式:

%title插图%num

%title插图%num

%title插图%num

零寄存器:里面存储的值为0
wzr(32bit, Word Zero Register) 4个字节,
xzr(64bit) 8个字节

%title插图%num
将4个字节的0赋值给了a,将4个字节的0赋值给了b

程序计数器
pc (Program Counter) 记录CPU当前指令的是哪一条指令,存储着当前CPU正在执行的指令的地址,类似于8086汇编的ip寄存器.
si
register read
链接寄存器
lr (Link Register) ,也就是x30,存储着函数的返回地址

%title插图%num
bl与b指令的本质区别
bl指令(带返回值的跳转指令):
将下一条指令的地址存储到lr(x30)寄存器中
跳转到标记处开始执行代码

ret指令函数返回, 将将lr(x30)的值赋值给pc寄存器,pc里面存储的地址值,则cpu马上就执行这个地址对应的指令
而b指令只是跳转

粒子群优化BP神经网络初始权值

粒子群优化BP神经网络初始权值(python实现)

粒子群优化BP神经网络初始权值(python实现)
网上看了一些资料,但都是用matlab写的,(还要用csdn会员积分下载)自己不太会用matlab,就试着用python写了段小程序实现,数据用的是sklearn中的波士顿房价数据集,神经网络部分是用tensorflow2。(本来想用sklearn,但不知道怎么把网络权值提取出来)
思路挺简单的,就是把BP网络误差作为粒子群优化的目标,每个粒子对应网络初始权重,一轮一轮的迭代。(先是在一篇建模论文里看到了这个想法,虽然好像没啥实用价值)
大一,只会捏泥巴,各位看官就全当茶余饭后图个乐吧。

#import tensorflow.compat.v1 as tf
#tf.compat.v1.disable_v2_behavior()
#import tensorflow as tf
#*次用上面的语句跑的时候还好好的,再跑就报错了
import tensorflow as tf
tf = tf.compat.v1
tf.disable_v2_behavior()

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import random
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPRegressor
from sklearn.preprocessing import StandardScaler

def function(x1,y1,x2,y2,W):# W是神经网络的W权重,根据这个权重设置神经网络

#定义激活函数
activation_function=tf.nn.relu
#输入输出数据集
xs=tf.placeholder(tf.float32,[None,None])
ys=tf.placeholder(tf.float32,[None,None])

#设计bp神经网络,三层,13,3,1
weights_1=tf.Variable(W[0,:,:],tf.float32)
biases_1=tf.Variable(tf.zeros([1,3])+0.1,tf.float32)
wx_plus_b_1=tf.matmul( xs, tf.cast(weights_1,tf.float32))+biases_1
outputs_1=activation_function(wx_plus_b_1)

weights_2=tf.Variable(W[1,0:3,:],tf.float32)
biases_2=tf.Variable(tf.zeros([1,3])+0.1,tf.float32)
wx_plus_b_2=tf.matmul(outputs_1 , tf.cast(weights_2,tf.float32))+biases_2
outputs_2=activation_function(wx_plus_b_2)

w3=W[2,0:3,0].reshape(3,1)
weights_3=tf.Variable(w3,tf.float32)
biases_3=tf.Variable(0.1,tf.float32)

wx_plus_b_3=tf.matmul(outputs_2,tf.cast(weights_3,tf.float32))+biases_3

#预测输出结果
prediction=wx_plus_b_3 #看来这里的数据就用行向量来输入输出

#定义损失函数
loss=tf.reduce_mean(tf.reduce_sum(tf.square(y1-prediction),reduction_indices=[1]))

#梯度下降法训练
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)

#初始化变量
init=tf.global_variables_initializer()

#执行会话,开始训练模型
print(“开始”)
with tf.Session() as sess:
sess.run(init)
for i in range (1000):
sess.run(train_step,feed_dict={ xs:x1 , ys:y1 })

#为什么损失函数喂入x2,y2就不行?QAQ
end_loss=sess.run(loss,feed_dict={xs:x1,ys:y1})
print(end_loss)
# print(sess.run(prediction,feed_dict={xs:x2}))
print(“结束”)
return end_loss

#导入数据集
data=load_boston()
data_pd=pd.DataFrame(data.data,columns=data.feature_names)
data_pd[“price”]=data.target

#dataframe导入numpy
x=np.array(data_pd.loc[:,’CRIM’:’LSTAT’])

y=np.array(data_pd.loc[:,’price’])

y.shape=(506,1)
#训练集测试集
x_train,x_test,y_train,y_test=train_test_split(x,y , test_size=0.1 )
#数据标准化
SC=StandardScaler()
x_train=SC.fit_transform(x_train)
y_train=SC.fit_transform(y_train)
x_test=SC.fit_transform(x_test)
y_test=SC.fit_transform(y_test)

#粒子数量num
num = 3

#粒子位置矩阵的形状
num_x = 3
num_y = 13
num_z = 3

#p为粒子位置矩阵,初始化为标准正态分布
p = np.random.randn(num,num_x,num_y,num_z)

#初始化粒子速度,以标准正态分布随机初始化
v = np.random.randn(num,num_x,num_y,num_z)

#个体*佳位置
good_p = np.array(p, copy=True)

#全局*佳位置
best_p = np.zeros((num_x, num_y, num_z))

#每次粒子移动后所计算出新的目标函数值
new_y = np.zeros(num)

#粒子个体历史*优值
good_y = np.zeros(num)

#粒子群体历史*优值
best_y = 0

#计算出初始粒子群的目标函数值
for i in range(num):
good_y[i] = function(x_train, y_train, x_test, y_test, p[i, :, :, :])

#目标函数返回值是误差,那么*小的就是*优的
best_y = min(good_y)

#确定初始时*优位置
best_p = p[np.argmin(good_y), :, :, :]

#设置*大迭代次数
max_iter = 10

#开始迭代
for i in range(max_iter):

#速度更新公式
v = random.random() * v + 2.4 * random.random() * (best_p – p) + 1.7 * random.random() * ( good_p – p )

#粒子位置更新
p = p + v

#计算每个粒子到达新位置后所得到的目标函数值
for i in range(num):
new_y[i] = function(x_train, y_train, x_test, y_test, p[i, :, :, :])

#更新全局*优
if min(new_y) < best_y:
best_y = min(new_y)
best_p = p[np.argmin(new_y), :, :, :]

#更新个体历史*优
for i in range(num):
if new_y[i] < good_y[i]:
good_y[i] = new_y[i]
good_p[i, :, :, :] = p[i, :, :, :] # 当对切片修改时,原始numpy数据也修改

print(“结束”)
print(‘目标函数*优值:’,best_y)
print(‘此时的粒子位置:’,best_p)

 

python文件打包exe(pyinstaller)

python文件打包exe(pyinstaller)

对于写好的python文件,我们怎么将其移植到其他电脑上也可以正常运行呢?

解决上述问题的方法主要有2种:

在其他电脑上安装python环境(如果python文件使用了第三方库,还需安装第三方库)
将写好的python文件打包为exe文件
对于*种方法,你只需要参考自己电脑上的环境安装其他电脑上安装相同环境即可。

对于第二种方法,推荐采用pyinstaller进行python文件的exe格式打包。python文件打包exe(pyinstaller)流程如下:

创建虚拟环境(由于pyinstaller在打包python文件时,会将环境中所有的库进行打包,这其中也会将.py文件中没有涉及的库,因此创建一个虚拟环境,手动安装必要的库,可以有效降低打包后exe的大小)
在虚拟环境中安装.py文件所依赖的库(pip install xxx)
在虚拟环境中安装pyinstaller库(pip install pyinstaller),需要注意一定要在虚拟环境中安装pyinstaller,如果没有安装直接打包那么就使用本地(即虚拟环境外)的pyinstaller,这样会把本地所有的库全部打包,导致生成的exe文件很大且运行易出错。
使用pyinstaller指令进行python文件打包(推荐使用pyinstaller -F xx.py 文件)
在实际打包过程中若会出现迭代溢出问题(如图1),请进入打包文件生成目录,打开.spec文件,添加相关代码,设置迭代次数,具体设置如图2所示。
若执行了步骤5,则在步骤5修改完成后,输入pyinstaller xxx.spec文件完成打包
为避免不对后续新的python文件的运行造成影响,建议在完成打包后及时关闭虚拟环境

图1  迭代溢出问题

%title插图%num

import sys
sys.setrecursionlimit(10000)
图2  迭代次数设置

*******打包完成后直接运行exe文件即可,若提示某个库缺失,则在虚拟环境中pip install安装相应的库即可。**************************************

******补充一下pyinstaller打包怎么设置exe图标******
1、将图标(.ico文件)放在.py文件同目录下,若无图标文件,可通过该网站进行普通图片转ico文件

2、打包时设置图标在指令行输入  pyinstaller -F –icon=test.ico test.py (需要注意ico文件必须与py文件在同一目录,此外当前目录应为虚拟环境下的py文件目录,否则会报错)

*后,欢迎大家交流、关注、点赞、收藏、转发!

 

iOS实现App之间的分享

我们在iOS平台上想要实现不同App之间的内容分享一般有几种常用方式:
*种是通过AirDrop实现不同设备的App之间文档和数据的分享;
第二种是给每个App定义一个URL Scheme,通过访问指定了URL Scheme的一个URL,实现直接访问一个APP;
第三种是通过UIDocumentInteractionController或者是UIActivityViewController这俩个iOS SDK中封装好的类在App之间发送数据、分享数据和操作数据;
第四种是通过App Extension,在iOS 8的SDK中提供的扩展新特性实现跨App的数据操作和分享;
还有一种集成第三方SDK实现的有限个App的数据分享,比如社交平台(QQ,微信,新浪微博等)给我们提供的官方SDK,或者是集成了多个社交平台的ShareSDK组件和友盟分享组件等。
谈谈苹果原生提供的基于iOS SDK的分享技术,同时推荐俩篇苹果开发者中心的文档:Inter-App Communication和Document Interaction Programming Topics for iOS。
谈一下如何通过UTI让我们的App支持分享。
原理
参考详解苹果提供的UTI(统一类型标识符)这篇文章中,详细地讲解了一下UTI(Uniform Type Identifier),一套苹果给我们提供用来在基于Cocoa和Cocoa Touch应用程序中识别实体内容类型的规范,而关于实现内容关联的技术也正是基于这套规范。在iOS和Mac OS开发中,苹果给我们提供了注册文档类型的接口,而这种注册的文档类型是全局的,系统中所有的应用程序和服务都可以侦测到。因此我们通过这个底层侦测,可以使用其他可选的第三方App来预览我们的App中不支持的文档,而且我们还可以通过这个接口在我们的App中打开并处理第三方App的文档。

如果我们的App可以处理某些类型的实体内容,那么我们就可以在我们项目中的Info.plist文件中进行注册。关于使用哪种类型和UTI,就要参考我在“详解苹果提供的UTI(统一类型标识符)“这篇文章中的讲解。当一个第三方App通过苹果的底层侦测技术检查有哪些App可以处理它所指定的内容类型时,如果我们的App已经注册了这种类型,那么我们的App图标就会显示在其中,并且作为我们自己的App的一个入口。
主要技术
主要应用到这种底层侦测的技术有iOS SDK中给我们提供的UIDocumentInteractionController、UIActivityViewController 和Quick Look 框架。此外,在iOS 8中,苹果又给开发者提供了App Extension,一种更高大上的方式在App之间的实现分享内容。关于UIDocumentInteractionController、UIActivityViewController、Quick Look 框架以及App Extension的细节,我计划在后面的文章中详细讲解。这篇文章,我们主要是来谈谈如何注册我们App可用的文档类型以及简单使用我们的App来处理第三方App分享的内容。

注册可用类型
我们需要在info.plist文件中,添加一个新的属性CFBundleDocumentTypes(实际上输入的是”Document types”),这是一个数组类型的属性,意思就是我们可以同时注册多个类型。而针对数组中的每一个元素,都有许多属性可以指定,详细的属性列表我们可以从官方文档上找到: Core Foundation Keys —- CFBundleDocumentTypes。这里列举我们在做iOS开发时常用的属性
%title插图%num
– CFBundleTypeName(“Icon File Name”)
字符串类型,指定某种类型的别名,也就是用来指代我们规定的类型的别称,一般为了保持唯一性,我们使用UTI来标识。
– CFBundleTypeIconFiles
数组类型,包含指定的png图标的文件名,指定代表某种类型的图标,而图标有具体的尺寸标识:

|Device |Sizes |
|:------|:---------|
|iPad |64 x 64 pixels, 320 x 320 pixels|
|iPhone and iPod touch|22 x 29 pixels, 44 x 58 pixels (high resolution)|

 

  • LSItemContentTypes(“Document Content Type UTIs”)
    数组类型,包含UTI字符串,指定我们的应用程序所有可以识别的类型集合
  • LSHandlerRank(“Handler rank”)
    字符串类型,包含Owner,Default,Alternate,None四个可选值,指定对于某种类型的优先权级别,而Launcher Service会根据这个优先级别来排列显示的App的顺序。优先级别从高到低依次是Owner,Alternate,Default。None表示不接受这种类型。
    而当我们添加完所有属性后,开始运行我们的程序,然后再回到我们的Info界面,就会看到Document types这个列表已经发生了变化,这就证明我们成功的注册好了App可用的类型。
    %title插图%num

打开第三方应用
我们在上面的步骤中注册好了我们的App可以识别的类型,现在我们可以打开一个使用UIDocumentInteractionController或者是Quick Look框架来展示内容的第三方App,这里以iPhone 上的QQ程序为例。

我们在上面的注册步骤中,注册的LSItemContentTypes仅包含了public.data这个UTI。所以我们先从QQ应用程序的我的文件中,打开不同类型的文件进行对比,大家可以看下图我的文件列表中包含俩种类型的文件,一种是.jpg扩展名的图片文件,一种是.pdf扩展名的文档文件。
%title插图%num
%title插图%num
当我打开一个图片文件进行预览时,点击其他应用打开,就可以在App列表中看到我们的App图标。简单介绍一下这个页面,*行是苹果在iOS 7之后给我们提供的使用AirDrop在iPhone、iPad或iPod Touch设备之间通过iCloud共享内容的一种方式。第二行是通过文档类型关联技术识别的App的列表。第三行是通过文档关联技术识别的Action的列表,Action表示对文档可进行的操作,如复制,打印等。
程序回调
当我们通过上面步骤,成功地显示了我的app图标之后,点击图标,我们就可以跳转到我的应用中,而苹果在iOS SDK中给我们提供的接收回调的方法在iOS 9之后做出了改变,因此我们需要针对不同的设备版本做出改变:
%title插图%num

%title插图%num

%title插图%num

python求素数

python求素数

做了一个python的关于求素数的代码,很简单,新手可以参考一下,可能有很多的不足,还请指正。菜鸟勿喷哈哈哈。

def math1(num1, num2):
amount = 0
for num in range(num1, num2):
judgement = False
i = 2
while i < num:
if num % i == 0:
break
i += 1
else:
judgement = True
if judgement:
amount += 1
print(“所给范围内素数个数为”, amount)

def math2(num):
i = 2
while i < num:
print(num, “是质数”)
break
else:
print(num, “不是质数”)

def select(inputer):
try:
num = int(inputer)
math2(num)
except:
list = inputer.split(‘-‘)
num1 = int(list[0])
num2 = int(list[1])
math1(num1, num2)

while True:
inputer = input(“给我一个范围我帮你求有几个素数。\n(要求格式为:\n1.a-b,注意b不包含其中\n2.a,即判断所给数字是否为素数)\n”
“注意:输入d退出操作”)
if inputer==’d’:
print(“”)
print(“谢谢使用!”)
break
print(“”)
select(inputer)
print(“”)

简易名片管理系统

Python:简易名片管理系统

Python:简易名片管理系统
功能需求
缺点(待改进)
话不多说,上代码!
主程序
函数文件
执行结果
功能需求
用户输入数字选择要进行的操作
添加名片
删除名片
修改名片
查询名片
显示所有名片
退出系统
缺点(待改进)
数据未保存到后台,添加的数据仅限当次运行程序时使用

话不多说,上代码!
主程序
# coding=utf8
from method import *
# 导入定时器是为了方便观察每次操作的结果
from time import sleep

cards = []
# 让这个程序无限循环,直到用户想要其终止
while True:
sleep(1)
menu()
ope_num = input(‘请输入要进行的操作(1-6): ‘)
if ope_num == ‘1’:
addinfo(cards)
elif ope_num == ‘2’:
delinfo(cards)
elif ope_num == ‘3’:
updateinfo(cards)
elif ope_num == ‘4’:
searchinfo(cards)
elif ope_num == ‘5’:
showinfo(cards)
elif ope_num == ‘6’:
sure = input(‘你确定要退出系统吗(YES/NO)’)
if sure.upper() == ‘YES’:
break
else:
print(‘输入错误,请重新输入!!!(数字1-6)’)

函数文件

# 定义一个menu方法
def menu():
print(‘——————\n’
‘\t名片管理系统\n’
‘1:添加名片\n’
‘2:删除名片\n’
‘3:修改名片\n’
‘4:查询名片\n’
‘5:显示所有名片\n’
‘6:退出系统\n’
‘——————‘)

# 添加名片
def addinfo(lists):
# 定义一个字典,存放这个名片的信息
info = {}

# 获取姓名
def getname():
name = input(‘请输入姓名: ‘)

# 判断姓名是否由 数字、字母、数字和字母 组成,即:不能包含标点符号和空格,不能为空
# 如果不符合要求,提示检查,并重新输入
# 一直提示用户输入,直到符合要求
while name.isalnum() != True:
print(‘请检查输入!!! (不能包含标点符号和空格,不能为空) ‘)
name = input(‘请输入姓名: ‘)

return name

# 获取手机号
def getphone():
phone = input(‘请输入手机号: ‘)

# 判断手机号是否由 11位数字 组成
# 如果不符合要求,提示检查,并重新输入
while (len(phone) != 11) or (phone.isdigit() != True):
print(‘请检查输入!!! (由11位纯数字组成,不能为空) ‘)
phone = input(‘请输入手机号: ‘)

return phone

# 获取QQ号
def getqq():
qq = input(‘请输入QQ号: ‘)

# 判断QQ号是否由 5-10位数字 组成
# 如果不符合要求,提示检查,并重新输入
while ((len(qq) < 5) or (len(qq) > 10)) or (qq.isdigit() != True):
print(‘请检查输入!!! (由5-10位纯数字组成,不能为空) ‘)
qq = input(‘请输入QQ号: ‘)

return qq

# 如果该名片的序号为,列表长度+1
info[‘num’] = len(lists) + 1

# 通过调用其他函数获取对应信息
info[‘name’] = getname()
info[‘phone’] = getphone()
info[‘qq’] = getqq()

# 将该字典存入名片列表中
lists.append(info)

print(‘添加成功!’)
showinfo(lists)

# 输出所有名片列表
def showinfo(lists):
print(‘序号\t姓名\t\t手机号\t\tQQ号’.ljust(30))
for lis in lists:
for value in lis.values():
print(value, end=’\t’)

print(‘\n’)

# 删除名片
def delinfo(lists):
del_name = input(‘请输入您需要删除名片的姓名: ‘)
flag = True
for lis in lists:
if lis[‘name’] == del_name:
lists.remove(lis)
print(‘删除成功!’)
showinfo(lists)
flag = False
break

if flag == True:
print(‘名片不存在!!!’)

# 修改名片
def updateinfo(lists):
upd_name = input(‘请输入您需要修改名片的姓名: ‘)
flag = True
for lis in lists:
if lis[‘name’] == upd_name:
lis[‘name’]=input(‘请输入新姓名: ‘)
lis[‘phone’]=input(‘请输入新手机号: ‘)
lis[‘qq’]=input(‘请输入新QQ号: ‘)
print(‘修改成功!’)
showinfo(lists)
flag = False
break

if flag == True:
print(‘名片不存在!!!’)

# 查询名片
def searchinfo(lists):
se_name = input(‘请输入您需要查询的姓名: ‘)
flag = True
for lis in lists:
if lis[‘name’] == se_name:
print(‘序号\t姓名\t\t手机号\t\tQQ号’.ljust(30))
for value in lis.values():
print(value, end=’\t’)

print(‘\n’)
flag = False
break

if flag == True:
print(‘名片不存在!!!’)

执行结果

%title插图%num
如有不足之处,还请各位大佬多多指点~

分享一下自己的手机从ios14降级回ios13.5.1,可以保存资料哦

关于ios14降级后点击图片和网页分享页面出现空白的情况
需要还原系统设置,这样子会重置当前的所有设置(不会清除数据)。

通用—还原—还原所有设置(会重启)

%title插图%num

下面是修复问题后的样子

%title插图%num
升级ios14测试版
6月22号凌晨ios14测试版推出后,上午立马给我的小7装上尝尝鲜。
想要尝试的请下载描述文件,iphone和ipad通用。

https://www.firedev.xyz/14/iOS_iPadOS_14_AppleSeed_Profile.mobileconfig

注意:使用Safari浏览器(iphone自带的)

ios14主要的不同点是:
App资源库,可以智能分类
小组件,主屏幕和负一屏
画中画,这个实测仅限apple TV可以使用
接下来的一段时间让我深刻体会到了什么是测试版,噩梦开始了
手机发热(堪比某米)
掉电巨快
有时莫名的卡顿
系统占用内存的变大
*让我受不了的还是前面两点
ios14降回ios13.5.1
昨天晚上实在是受不了,决定倒退系统

准备工作
itunes(用来备份手机和还原)
ios13.5.1固件包
1、备份
建议啊,icloud基本备份一下!!!!!!
微信和QQ的聊天记录备份,可以先备份到电脑上,双重保险。
由于 iOS 系统限制,跨版本降级会导致设备数据丢失,理论上从 iOS 14 备份的数据也无法恢复至 iOS 13 系统,你现在用爱思助手或者 iTunes 备份的数据,降回 iOS 13 是无法恢复的。

1.1、首先,在 iOS 14 系统下通过 iTunes 完整备份你的 iPhone 资料。

%title插图%num

如果找不到这个页面,请点击这个手机小图标

%title插图%num
1.2、备份完成后,打开刚刚备份的文件
windows:C:Users/用户名/AppData/Roaming/Apple Computer/MobileSync/Backup

打开*新的备份文件夹,用记事本/文本编辑工具打开info.plist
(文件被删除了,就不上图了)

Ctrl+F 查找Product Version

在这个字段的下一行就是关于IOS备份的版本号了,因为是在ios14下备份的嘛,这个就是14了

<kev>Product Version</kev>
<string>14.0</string>
<key>Serial Number</key>

把中间的14.0修改为13.5.1,也就是要降级的系统版本。注意啊,这个版本号千万不要写错!!!!!
2、固件包
2.1、在爱思助手官网上下载相应的固件包
链接地址

%title插图%num
3、使用itunes进行降级
打开 iTunes,按住 shift(windows)键,点恢复 iPhone,在弹出窗口中选择下载好的 iOS 13.5.1 系统固件等待刷机完成即可

%title插图%num
实测
除了邮件账户需要重新添加,别的数据都在。(也可能是icloud有基本备份)
成功了的小伙伴帮我点一下赞噢

80行代码实现简易版摩斯码编译器

80行代码实现简易版摩斯码编译器

@80行代码实现简易摩斯码翻译器

dict1={ #字母转换成摩斯码
“A”:”01″,”B”:”1000″,”C”:”1010″,”D”:”100″,”E”:”0″,”F”:”0010″,”G”:”001″,”H”:”0000″,”I”:”00″,”J”:”0111″,”K”:”101″,”L”:”0100″,”M”:”11″,
“N”:”10″,”O”:”111″,”P”:”0110″,”Q”:”1101″,”R”:”010″,”S”:”000″,”T”:”1″,”U”:”001″,”V”:”0001″,”W”:”011″,”X”:”1001″,”Y”:”1011″,”Z”:”1100″,
“1”:”01111″,”2″:”00111″,”3″:”00011″,”4″:”00001″,”5″:”00000″,”6″:”10000″,”7″:”11000″,”8″:”11100″,”9″:”11110″,”0″:”11111″,
“?”:”001100″,”/”:”10010″,”——”:”100001″,”.”:”010101″
}
dict2 = {k:v for k,v in zip(dict1.values(),dict1.keys())} #dict1键值对互换 摩斯码转换成字母

def main():

print(“输入规范:”)
print(“(0->’.’)\n(1->’——’)”)
print(“———————————————-“)
for i in range(0,1000):
print(“\n功能选择(大写字母):1.翻译摩斯码 2.生成摩斯码:”)
a = int(input())
if a==1 or a==2:
print(“输入:”)
str = input()
#print(str)
#print(dict[‘A’])
print(“翻译结果”)
if a==2:
transla_alpha(str)
print(‘\n\n\n’)
elif a==1:
transla_morse(str)
print(‘\n\n\n’)
else:
print(“输入有误,请重新选择”)
return 0

def transla_morse(str): # 将摩斯密码翻译成单词
#将字符串根据空格拆分
try:
temp = str.split(‘ ‘) #列表
for i in temp:
temp1 = ”.join(i) #转换成字符串,准备进行切割

#将字符串跟据”/”拆分,并存进列表
alpha_list = temp1.split(‘/’)
#print(alpha_list)
for j in alpha_list:
print(dict2[j],end=”)
print(”,end=’ ‘)

#print(alpha_list)
except :
print(“输入有误,请重新选择”)

def transla_alpha(str):
try:
word = str.split(‘ ‘) #将句子根据空格拆分成单词
for i in word:
alphas = list(i) #将单词拆分成字母
for j in alphas:
if j ==alphas[-1]:
print(dict1[j],end=”)
else:
print(dict1[j],end=’/’)
print(”,end=’ ‘)
#print(alpha)
except :
print(“输入有误,程序结束”)

#print(word)

if __name__ ==”__main__”:
main()

程序运行结果

%title插图%num
代码实现的是简易版功能 BUG较多 还有很多地方等待完善

【ios】swift教程

学习swift地址
https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html
和其他语言比起来,语法层次确实有些不一样的地方。

在wwdc2019上看到了苹果公司关于swiftui的介绍,感觉这就是未来。
Parentheses()
brackets[]
braces{}

Swift编程语言简介
Swift命令行操作

1 Swift defines away large classes of common programming errors by adopting modern programming patterns:
2
3 Variables are always initialized before use.
4 Array indices are checked for out-of-bounds errors.
5 Integers are checked for overflow.
6 Optionals ensure that nil values are handled explicitly.
7 Memory is managed automatically.
8 Error handling allows controlled recovery from unexpected failures.

A swift tour
下面的内容如果你有不理解的请不要太过于悲观,我们将会在以后继续学习

Simple Values
let 定义常量
var 定义变量

Control Flow
Use if and switch to make conditionals, and use for-in, while, and repeat-while to make loops. Parentheses around the condition or loop variable are optional. Braces around the body are required.

1 if true {
2 print(“this is true”)
3 } else{
4 print(“this is not true”)
5 }
6 var tmp = “”
7 switch tmp{
8 case “1”:
9
10
11
12
13
14 }
15
16 for i in [1, 3, 5,7,9]{
17
18 }
19 for i in 1..<5{
20 print(i)
21 }
22 for i in 1…5{
23 print(i)
24 }

 

1 while condition {
2
3 }

 

1 repeat {
2     print(“至少执行一次”)
3 }while 2 < 1
4

函数和闭包
By default, functions use their parameter names as labels for their arguments. Write a custom argument label before the parameter name, or write _ to use no argument label.

1 func greet(person: String, day: String) -> String {
2     return “Hello \(person), today is \(day).”
3 }
4 greet(person: “Bob”, day: “Tuesday”)

对象和类

实例话一个类

Enumerations and Structures
Protocols and Extensions
Error Handling
异常捕获

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速