扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这不是模糊查找
创新互联-专业网站定制、快速模板网站建设、高性价比茅箭网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式茅箭网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖茅箭地区。费用合理售后完善,十年实体公司更值得信赖。
如果你用xlwings,那大概是
import xlwings as xw
xb=xw.Book("xxx.xlsx")
@xw.func
def aaa(x):
ret=[]
for i in xb.sheets[:-1]:
if x in ','.join(i[1,1].expand('down').value):
ret.append(i.name)
return ','.join(ret)
直接运行是:
import xlwings as xw
xb=xw.Book('xxx.xlsx')
sht=xb.sheets[-1]
ret=[]
for i in sht[2,1].expand('down').value:
tmp=[]
for j in xb.sheets[:-1]:
if i in ','.join(j[1,1].expand('down').value):
tmp.append(j.name)
ret.append(','.join(tmp))
sht[2,2].options(transpose=True).value=ret
这里没法写缩进,改一下把。。。
Python就是一种和计算机交流的语言,这种语言单词(关键字)不多,规则也少。下面所有的内容都基于python。
1、判断
当你命令计算机做一件事情的时候,这件事情可能分一些情况进行处理。
判断通常涉及到的关键字有:if , else, elseif, and, or,, ,=,=,=,==
比如,你让计算机买西瓜,希望买到打折的西瓜,不打折的话你就不吃了。
if 水果店打折:
买西瓜
else:
不买了
通过这个命令,计算机变得更智能了一些,他可以根据情况执行你的命令。
水果店不打折你就吃不到西瓜,你不开心。那么,我们让计算机更智能一些。假如西瓜打折,就买西瓜;不打折的话让计算机跟老板讲价,老板同意打折,就买西瓜;不同意,不吃了;
if 水果店打折:
买西瓜
else:
与老板讲价
if 讲价成功:
买西瓜
else:
不吃了。
虽然和老板讲价一般都能讲成功,但是有的老板给力给打五折,有的老板只给打九折。你就想了,若老板打五折,我就买两个,今天吃一个,明天吃一个。若老板不给力,打折不到五折,就买一个,今天先吃,明天再说。
if 水果店打折:
买西瓜
else:
与老板讲价
if 打折成功 and 打折力度=5:
买两个西瓜
elseif 打折成功 and 打折力度 5:
买一个西瓜
else:
不吃了。
此外,有没有发现,打折成功这段代码其实也可以写成:
if 打折成功:
if 打折力度=5:
买两个西瓜
else:
买一个西瓜
else:
不吃了。
由此可见,计算机也不是完全的一成不变,只要你给他的命令他能理解并且不会模棱两可,他都可以完成工作。
and的意思代表且,or的意思代表或。and和or的顺序不同,结果也不同,可以通过括号来说明判断条件的优先级。
a==b是比较a和b是否相等的意思,而=代表赋值。赋值的含义,我在下面的变量章节介绍。
2 、循环
python中涉及到循环的关键字包括:for…in… ,while,break,continue。
上面的例子我们已经让电脑成功的可以根据不同的情况去水果店买西瓜了,但是若老板不打折,你就吃不到西瓜了。这时,你就想了,咱们小区门口有三家水果店,分别是鲜丰水果、四季水果和路边摊,一家不打折不代表三家都不打折啊,所以你希望电脑可以去三家都看看,挑一家打折的店买西瓜。
for 水果店 in (鲜丰水果、四季水果和路边摊):
if 水果店 打折:
买西瓜
break(循环结束)
else:
啥都不做
带西瓜回家
循环的意义在于,可以用电脑对不同的对象执行相同的命令。
介绍下break,break的意思就是结束循环。比如,这段代码中的break表示,我们一旦买了西瓜,那么就带西瓜回家。
3 、变量
现在是时候介绍“变量”这个重要的东西了。
我们依然把电脑理解为帮我们工作的一个人,那么作为一个人,他需要有记忆力,而我们就可以通过变量去控制、利用计算机的记忆力。
变量可以理解为计算机的一个记忆单元,计算机拥有极好的记忆力,所以,可以随心所欲的使用,用完了就扔,需要了就要。(当然,说随心所欲是不严谨的,但是你可以理解为随心所欲)
那为什么叫变量呢,就是因为可以改变。为什么要改变呢?比如我们都有自己的年龄,我今年18,明年就19了。所以,“年龄”在我的记忆里是每年改变的。
变量对应的一个东西叫常量,在我的记忆力,我的老婆是江江同学。而这个“老婆”这个记忆单元在我的脑子里是不会变的,她永远都是江江同学。常量你现在可以不用理解,我写主要是为了秀恩爱。
现在,计算机又要去买西瓜了。不过这次,你希望计算机可以在三个水果店中,找到一个打折力度最大的水果店去买水果。
之前所有水果店的最大折扣 = None
之前给最大折扣的水果店 = None
for 水果店 in (鲜丰水果、四季水果和路边摊):
当前水果店折扣 = 老板给的折扣
if 当前水果店折扣 之前所有水果店的最大折扣:#4折比5折力度大
之前所有水果店的最大折扣 = 当前水果店折扣
之前给最大折扣的水果店 = 水果店
去 之前给最大折扣的水果店 买一个西瓜
以上有以下几个记忆单元:
之前所有水果店的最大折扣
之前给最大折扣的水果店
当前水果店折扣
水果店 注意,for a in b,a也是一个变量,他在每次执行的时候都是b中的当前执行的一个元素。
这里需要介绍一些概念:
None 在python中表示空,表示这个记忆单元现在啥都没有。比如在我情窦初开时,脑海中就已经有了情人这个记忆单元,我一直在寻找,但遇到你之前一直没有找到,所以那段时间这个记忆单元里面一直是空。
赋值符号:=。 注意,在计算机语言里面,一个“=”号表示赋值,两个等号“==”表示比较前后元素。赋值的意思是,把后面的元素,放到前面的变量里面。
变量的作用域
作用域这个东西非常重要,但是真心不想讲,因为没办法结合现实的例子,不过还是大体说明下。
还是刚才的例子,我加了行号,并且我使用-代表空格,表示代码的缩进。
1 之前所有水果店的最大折扣 = None
2 之前给最大折扣的水果店 = None
3 for 水果店 in (鲜丰水果、四季水果和路边摊):
4 ---当前水果店折扣 = 老板给的折扣
5 ---if 当前水果店折扣 之前所有水果店的最大折扣:#4折比5折力度大
6 ------之前所有水果店的最大折扣 = 当前水果店折扣
7 ---之前给最大折扣的水果店 = 水果店
8 去 之前给最大折扣的水果店 买一个西瓜
你看这个例子可能纳闷,为什么要先给“之前所有水果店的最大折扣”、“之前给最大折扣的水果店”这两个变量赋值为None呢,就是因为作用域问题。
你看这个程序,每行代码的缩进都是不一样的。变量作用域可以理解为:一个变量,只有在其第一次出现的地方的缩进,以及缩进更多的代码里面,才有效。我们第1、2行的变量,就可以用于3-8行,因为这些代码的缩进都在1、2行的后面。而第四行的变量“当前水果店折扣”,只在5、6、7行有效。
1 A = None
2 ————B = None
3 ————..
4 ————————C = None
5 ————————..
6 ————D = None
7 ————..
8 ————————..
9 ————————..
10 ..
11 ..
再举个例子,ABCD是变量,..代表某些代码。A的作用域就是1-11行,即1-11行都可以使用A。B的作用域是2-9行,C的作用域只有4-5行,注意,8-9行就不能再使用C了,虽然他的缩进和4、5行一样,作用域遇到第一个不能用缩进行代码即结束。D的作用域就是6-9行。
4 、函数
看懂以上几节,大概应该明白计算机如何执行代码的了。
而函数和模块,和之前的介绍不太一样。之前是介绍如何让计算机工作,是面向计算机的。而这一节,是面向人的,是如何让我们写给计算机的代码看起来更加简洁、明了。函数和模块都是对代码结构的优化,否则一个稍微大点的项目,一大坨代码,计算机看得懂人看不懂,不利于管理和交流。
首先说函数。函数是一系列代码的集合,用函数一般是有几个原因:
1.给一段代码起个名字。
2.这段代码和使用它的代码关系不大,所以可以抽出来,抽出来后代码更简洁。关系不大的意思就是:使用函数的代码通过传给函数几个参数,函数就可以执行。
3.代码集合起来就可以在代码的不同地方使用。
依然我们去买西瓜,不过我们希望电脑可以今天买完西瓜明天再买一个。按照之前的方式,这个逻辑应该写成这样:
for 水果店 in (鲜丰水果、四季水果和路边摊):
if 水果店打折:
买西瓜
else:
与老板讲价
if 打折成功 and 打折力度=5:
买两个西瓜
elseif 打折成功 and 打折力度 5:
买一个西瓜
else:
不吃了。
休息一天。
for 水果店 in (鲜丰水果、四季水果和路边摊):
if 水果店打折:
买西瓜
else:
与老板讲价
if 打折成功 and 打折力度=5:
买两个西瓜
elseif 打折成功 and 打折力度 5:
买一个西瓜
else:
不吃了。
上面的代码可以实现我们的要求,但是买西瓜的代码其实是重复的,对于重复代码,管理起来比较麻烦,比如你想改一点,那么就要去各个地方都改一次。
那么,我们把买西瓜的代码弄成一个函数,代码就可以整理为:
def 买西瓜_函数():
for 水果店 in (鲜丰水果、四季水果和路边摊):
if 水果店打折:
买西瓜
else:
与老板讲价
if 打折成功 and 打折力度=5:
买两个西瓜
elseif 打折成功 and 打折力度 5:
买一个西瓜
else:
不吃了。
买西瓜_函数()
休息一天。
买西瓜_函数()
这一次,代码整洁多了,而且,我们每次想修改买西瓜的代码,都只需要改这个函数一处代码都可以。
在python中,使用def function_name():定义函数,函数下面所有的缩进都属于这个函数,叫函数体。
使用function_name()调用函数。
4.1 函数参数
现在你又不满足于电脑只会买西瓜了,你又想吃柚子。怎么办呢,那么是不是我们又要写一个买柚子的函数呢。当然可以再写一个买柚子函数,但是买柚子函数的逻辑和买西瓜函数的逻辑都是一样的,命令也一样,唯一的区别就是之前是买西瓜,现在是买柚子。如果再写一个类似的买柚子函数,那么又出现刚才说的问题,每次修改买水果的逻辑,都需要同时去修改买西瓜、买柚子函数,如果柚子吃腻了,又要买香蕉、苹果、梨,岂不是要写非常多的函数?
为了解决这个问题,其实有一个更好的方法,就是使用函数参数。
由于我们买水果(无论是西瓜、还是柚子)的功能都是一样的,所以我们可以写一个买水果函数,买水果函数定义了买一个水果的流程,当我们使用这个函数的时候,我们只要告诉这个函数我们要买什么水果,函数就可以根据你告诉他的水果名,去买对应的水果。
买水果函数的代码如下:
def 买水果函数(水果名):
for 水果店 in (鲜丰水果、四季水果和路边摊):
if 水果店打折:
买[水果名]
else:
与老板讲价
if 打折成功 and 打折力度=5:
买两个[水果名]
elseif 打折成功 and 打折力度 5:
买一个[水果名]
else:
不吃了。
买水果函数(西瓜)#让电脑去买西瓜
买水果函数(柚子)#让电脑去买柚子
在python中想使用函数参数,只需要在函数定义的时候,在括号里面加上参数即可,我们这里的参数就是“水果名”。在函数体中代码可以使用函数参数。
在调用函数的时候,把一个变量或者常量写在函数名后面的括号里面,传给函数。
注意,若是存在多个参数,函数定义和调用函数的参数顺序一定要一致。
在python中,还存在默认参数、关键字参数等稍微高级一点的使用方式,举个例子,不详细说明了。
def sum(a, b = 0,c = 1):#b/c是默认参数
return a+b+c
func(1,0,1)
func(1)
func(1,c=1)
这三个func调用的结果都是一样的。
5 、模块
刚才我们已经讲了函数,函数就是把代码整合起来。而模块,就是把更多代码整合起来。
模块和函数的引入是为了解决类似的问题:管理代码段,并且给他们起一个名字。
一般来说,一个模块就是一个py文件,里面可能包括很多函数,也可以包括一些类的定义(这个我们后面讲哦)。
模块的引入就是为了将代码更好地管理。
我们把代码放在一个py文件中,这个py文件就是一个模块,在其他py文件里面,我们就可以使用import关键字,将模块引入。
比如,我们现在有一个a.py文件,里面有一些函数,比如buyxigua,buyyouzi等,若我们想在b文件中使用这些函数,那么我们必须在使用前,导入a模块。
导入一个模块并使用模块里面的函数有很多方法,我把常见的方法列在下面.
方法一:
import a
a.buy_xigua()
a.buy_youzi()
这种方法导入模块a,然后通过模块函数调用函数。
方法二:
from a import *
buy_xigua()
buy_youzi()
这个方式导入模块a中的所有内容,可以直接使用。
方法三:
from a import buy_xigua,buy_youzi
buy_xigua()
buy_youzi()
这个方式导入模块a中的指定内容,可以直接使用,一般这种方法在软件开发过程中使用的比较多,原因是我们只把需要的内容导入使用,不需要的不导入。(按需使用别浪费,在哪里都是个好习惯,深层原因超出教程范围)
6 、类和对象
类和对象的概念,对于没有接触过编程的同学来说,可能稍微有些不好理解。我记得当年第一次接触这个概念,也迷糊了一段时间。
之前,我们介绍过“变量”。变量的引入,是为了描述程序内的记忆单元。一个变量可以是一个数字,也可以是一个字符串(比如设置一个变量 名字='水风')。
但是,有些东西需要使用很多变量共同描述才可以。比如,一个买西瓜的人。买西瓜的人有很多特征,比如:名字、存款,持有西瓜数量。此外,买西瓜的人也有一些行为,比如买西瓜这个行为。为了实现买西瓜的人这个功能,我们引入类和对象的概念。注意,类/对象引入想解决的问题和函数、模块所解决的问题不一样。函数和模块的引入更多的是为了管理代码,而类/对象的引入是为了把状态和行为封装在一起。
那么,类和对象分别是什么意思呢。类是我们定义的一种东西有哪些状态和行为,比如买西瓜的人有状态和行为,我们提前定义好他们,类的概念是一种虚拟的。而对象就是代码在执行的过程中,去动态创建、生成的一个实体。
好啦,这样教女朋友写Python是不是简单了许多呢?
Python解释器内置了许多函数,这意味着我们无需定义,始终可以它们。接下来和大家一起讨论一个常用的内建函数-input()和isinstance()。
input()
input()函数读取用户输入,并转换成字符串:
a = input() # 将input()返回的值赋值给a
Python
a # 查看a的值(为字符串'Python')
'Python'
input()函数可以提供一个参数,用来提示用户:
b = input('请输入你最喜欢的水果: ') # 给用户必要的提示
请输入你最喜欢的水果: 香蕉
b
'香蕉'
需要注意的是,input()函数返回的值总是字符串,当用户输入的是数字也是这样,所以当使用它时一定要注意:
num = input('请输入一个数字: ')
请输入一个数字: 10
num + 9 # 试图把num和数字相加
Traceback (most recent call last):
File "", line 1, in
TypeError: must be str, not int
num
'10'
type(num) # 查看num的数字类型
class 'str'
isinstance()
isinstance()函数用于检查对象是否为指定类(或者说数据类型)的实例。isintance()的第一个参数为一个对象,第二个参数为要检查的数据类型。
举个例子,比如有有一个变量,你想检查它是否为数字类型,可以使用isinstance()函数:
score = 90
result = isinstance(score, int)
if result:
... print('score为int数据类型')
... else:
... print('score不为int数据类型')
...
score为int数据类型
除了能检查是否为int类型外,isintance()还能检查其他数据类型(当然了),下面是一个综合示例:
pi = 3.14
name = 'Wang'
complex_num = 1 + 2j
isinstance(pi, float) # 3.14为浮点数类型
True
isinstance(name, str) # 'Wang'为字符串类型
True
isinstance(complex_num, complex) # 1 + 2j为复数
True
isinstance()还可以验证某个对象是否为自定义的类型:
class Developer: # 定义一个叫做Developer的类
...
... def __init__(self, name): # __init__方法中,需要输入名字
... self.name = name
... def display(self): # 定义了display()方法
... print("Developer:", self.name, "-")
...
class PythonDeveloper(Developer): # PythonDeveloper类,继承了Developer类
...
... def __init__(self, name, language):
... self.name = name
... self.language = language
...
... def display(self): # 覆盖了父类的display方法
... print("Python Developer:", self.name, "language:", self.language, "-")
...
dev = Developer('Zhang') # 创建一个Developer对象
dev.display() # 调用display()方法,以查看该对象
Developer: Zhang -
isinstance(dev, Developer) # 判断dev是否为Developer类,答案是肯定的
True
isinstance(dev, PythonDeveloper) # 判断dev是否为PythonDeveloper类,当然不是
False
python_dev = PythonDeveloper('Liu', 'Python') # 创建一个PythonDeveloper对象,注意PythonDeveloper是Developer的子类
python_dev.display() # 调用display方法
Python Developer: Liu language: Python -
isinstance(python_dev, Developer) # 判断python_dev是否为Developer类,答案是肯定的
True
isinstance(python_dev, PythonDeveloper) # 判断python是否为PythonDeveloper类,答案也是肯定的
True
关于Python的基础问题可以看下这个网页的视频教程,网页链接,希望我的回答能帮到你。
1.水果数据处理:对水果(苹果,香蕉)数据集进行处理转化为标签和图像,并转化为one-hot码。
2.卷积模型搭建:采用keras搭建模型,卷积层、池化层、Dropout层、全连接层、输出层
3.模型训练把数据集在建立的模型上进行训练,并把最好的模型保存到h5文件中,便于直接对模型进行测试。
4.模型测试:打开摄像头,使用通用物体进行测试。测试结果将录制成视频展示。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流