首页 文章 精选 留言 我的

精选列表

搜索[Python],共10000篇文章
优秀的个人博客,低调大师

python实战,教你用微信每天给女朋友说晚安

但凡一件事,稍微有些重复,我就考虑怎么样用程序来实现它。 这里给各位程序员朋友分享如何每天给朋友定时微信发送”晚安“,故事,新闻等等。 最好运行在服务器上,这样后台挂起来更方便。 准备: **微信号** pip install **wxpy** pip install **requests** 代码如下: # 不要抄下源码就运行,你需要改动几个地方 from __future__ import unicode_literals from threading import Timer bot = Bot() from wxpy import * import requests #bot = Bot(console_qr=2,cache_path="botoo.pkl") # linux执行登陆请调用下面的这句 def get_news(): url = "http://open.iciba.com/dsapi/" """获取金山词霸每日一句,英文和翻译""" r = requests.get(url) return content, note content = r.json()['content'] note = r.json()['note'] def send_news(): my_friend = bot.friends().search(u'小明')[0] try: contents = get_news() # 你朋友的微信名称,不是备注,也不是微信帐号。 my_friend.send(u"Have a good one!") my_friend.send(contents[0]) my_friend.send(contents[1]) # 每86400秒(1天),发送1次 my_friend = bot.friends().search('常念')[0] t = Timer(86400, send_news) t.start() except: # 你的微信名称,不是微信帐号。 my_friend.send(u"今天消息发送失败了") send_news() if __name__ == "__main__": 最终效果是这样的: 总结: 代码让生活更美好! 原文发布时间为:2018-08-22 本文作者:botoo 本文来自云栖社区合作伙伴“数据与算法之美”,了解相关信息可以关注“数据与算法之美”。

优秀的个人博客,低调大师

给妹子讲python-S01E11赋值与对象拷贝

我们今天的话题要从“可变对象的原处修改”这里引入,这是一个值得注意的问题。 上一集里我们谈到,赋值操作总是存储对象的引用,而不是这些对象的拷贝。由于在这个过程中赋值操作会产生相同对象的多个引用,因此我们需要意识到“可变对象”在这里可能存在的问题:在原处修改可变对象可能会影响程序中其他引用该对象的变量。如果你不想看到这种情景,则你需要明确的拷贝一个对象,而不是简单赋值。 X = [1,2,3,4,5] L = ['a', X, 'b'] D = {'x':X, 'y':2} print(L) print(D) ['a', [1, 2, 3, 4, 5], 'b'] {'y': 2, 'x': [1, 2, 3, 4, 5]} 在这个例子中,我们可以看到列表[1,2,3,4,5]有三个引用,被变量X引用、被列表L内部元素引用、被字典D

优秀的个人博客,低调大师

「比较含退格的字符串」python之leetcode刷题|008

题目 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。 示例 1: 输入:S = "ab#c", T = "ad#c" 输出:true 解释:S 和 T 都会变成 “ac”。 示例 2: 输入:S = "ab##", T = "c#d#" 输出:true 解释:S 和 T 都会变成 “”。 示例 3: 输入:S = "a##c", T = "#a#c" 输出:true 解释:S 和 T 都会变成 “c”。 示例 4: 输入:S = "a#c", T = "b" 输出:false 解释:S 会变成 “c”,但 T 仍然是 “b”。 提示: 1 <= S.length <= 200 1 <= T.length <= 200 S 和 T 只含有小写字母以及字符 '#'。 解答 这道题数退栈和出栈的操作,逻辑有点强。这里先要把两个字符串换成没有#的,然后在进行比较即可 class Solution(object): def backspaceCompare(self, S, T): """ :type S: str :type T: str :rtype: bool """ s = '' t = '' for i in S: if i == '#': if s: s = s[:-1] else: s += i for j in T: if j == '#': if t: t = t[:-1] else: t += j return s==t 这里一定要加判断是否字符串s,t为空,因为如果没有这个判断,假如输入的字符串第一个元素为#,x下面执行的代码就要报错。 看一下执行结果 image.png 再看一下排名靠前的代码 class Solution(object): def backspaceCompare(self, S, T): """ :type S: str :type T: str :rtype: bool """ s1 = [] s2 = [] for i in S : if i == '#' : if s1 : s1.pop() else : s1.append( i ) for i in T : if i == '#' : if s2 : s2.pop() else : s2.append( i ) return ''.join(s1 ) == ''.join( s2 ) 这个逻辑更好理解。不说了,继续练习去。

优秀的个人博客,低调大师

「只出现一次的数字」python之leetcode刷题|007

题目 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,3,2] 输出: 3 示例 2: 输入: [0,1,0,1,0,1,99] 输出: 99 解答 这道题是中等难度的题目,刚开始我一看,哎,这么简单,顺手就写了起来 class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ for i in nums: if nums.count(i) == 1: return i 运行一看也正确,没啥问题,统计数字嘛,以前也遇见过。 可是当我看运行结果我才知道,这道题不是不仅仅是解出来结果就行了。还要考虑时间复杂度。 看一下我的运行结果 执行结果 可以看到只打败了10%的提交者,虽然解决了问题,可耗时太长,显然不是这道题的最好解决方法。 看看大佬的代码 class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ if len(nums) == 1: return nums[0] a = sorted(nums) for i in range(0,len(nums)-1): if a[i] == a[i-1] or a[i] == a[i+1]: continue else: return a[i] return a[-1] 之所以我的代码耗时时间长,是因为每次统计都要遍历一遍列表,大佬的代码只遍历了一次。 再看一个 class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ buffer_dict = {x: 0 for x in nums} for x in nums: buffer_dict[x] += 1 for x in buffer_dict.items(): if x[1] == 1: return x[0] 利用字典来做,时间复杂度最小,耗时28ms,目前来说最好的解决方法。

优秀的个人博客,低调大师

python-迭代器、生成器、内置函数及面向过程编程

一、迭代器 迭代器是迭代取值的工具,迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的. 为什么要用迭代器呢? 1.可以不依赖索引取值 2.同一时刻在内存中只有一个值,不会过多的占用内存 如何用迭代器? 可迭代的对象:但凡内置有__iter__方法的对象都是可迭代的对象,列如str,list,dict,tuple,set,文件对象 迭代器对象:即内置有__iter__方法又内置有__next__方法的对象称之为迭代器对象,如文件对象 可迭代对象.__iter__()-------->迭代器对象 迭代器对象.__tier__()-------->迭代器本身 迭代器对象.__next__()--------->迭代器的下一个值 总结迭代器: 优点:1.可以不依赖索引取值 2.同一时刻在内存中只有一个值,不会过多的占用内存 缺点: 1.不如按照索引取值或者key取值的方式灵活 2.无法预测迭代器所包含值的长度 二、生成器 生成器本质上就是一种自定义的迭代器 函数内包含yield关键字,调用函数不会执行函数体代码,会得到一个返回值,该返回值就是生成器对象 def func(): print('first') yield 1 print('second') yield 2 print('third') yield 3 print('fourth') g=func() print(g) #生成器对象 res1=next(g) #会触发函数的执行,直到碰到一个yield停下来,并且将yield后的值当作本次next的结果返回 print(res1)# 返回值1 自定义生成一个和内置函数range功能一样的生成器: def my_range(start,stop,step=1): while start < stop: # 3 < 3 yield start start+=step #start=3 obj=my_range(1,5,2) # 1 3 把函数赋值给一个变量名,这个变量名就是生成器,迭代器 print(next(obj)) print(next(obj)) 了解知识点:yield的表达式形式的应用:x=yield # def dog(name): # print('狗哥 %s 准备开吃' %name) # food_list=[] # while True: # food=yield food_list # food=yield='肉包子' # print('%s 吃了 %s' %(name,food)) # food_list.append(food) # g=dog('alex') # 强调:针对表达式形式的yield的使用,第一步必须让函数先暂停到一个yield的位置,才能进行传值操作 # next(g) # 张开狗嘴,让生成器先暂停到yield的位置,准备接收外部传进来的值 # res1=next(g) #g.send(None) # print(res1) # res2=g.send('屎包子') # 1. 先为当前暂停位置的yield赋值 2. next(生成器)直到再次碰到一个yield停下来,然后其的值当做本次next的结果 # print(res2) # res3=g.send('肉包子') # print(res3) # res4=g.send('泔水') # print(res4) 总结yield:只能在函数内使用 1.yield提供了一种自定义迭代器的解决方案 2.yield可以保存函数的暂停的状态 3.yield对比return 1.相同点:都可以返回值,返回的类型与个数都没有限制 2.不同点:yield可以返回多次值,而return只能返回一次函数就结束了 生成器表达式: # g = (i**2 for i in range(1,6) if i>3) 和列表表达式的区别就是"()" 三、内置函数(简单内置函数,前面接触过的就不介绍了) all():如果里面的对象是真的就返回真,如果为空也返回真 print(all([1,'',None]))#False print(all([1,2,'aaa']))#True print(all([]))#True print(all(''))#True any():有一个为真就返回真,为空时返回假 print(any([0,'',None,False,1]))#True print(any([0,'',None,False]))#False print(any([]))#False callable:判断函数是否可调用 Return whether the object is callable ASCII码与数字转换: print(chr(65))#A print(chr(90))#Z print(ord('a'))#97 print(ord('z'))#122 divmod(x,y):分页 Return the tuple (x//y, x%y) print(divmod(3003,20))#(150, 3) eval:动态地执行一个表达式的字符串,或者compile函数编译出来的对象 print(eval('1+2+3+4')) res=eval('[1,2,3]') print(res,type(res)) frozenset()返回一个冻结的集合,集合冻结后不能再添加删除任何元素 pow()pow(2,3,3) #(2**3)%3 reversed():反转列表 l=[1,'a','3',3] l1=reversed(l) print(list(l1)) round():取近似数 print(round(3.5))#4 print(round(3.3))#3 slice():保存一个切片 l=['a','b','c','d','e'] s='helloworld' obj=slice(1,5,2) # print(l[1:5:2]) print(l[obj])#['b', 'd'] zip():拉链函数 l=[1,2,3,4,5,6,7] s='hello' res=zip(l,s) print(list(res))#[(1, 'h'), (2, 'e'), (3, 'l'), (4, 'l'), (5, 'o')] filter():函数接收一个函数 f和一个list,这个函数f的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。 def is_odd(x): return x % 2 == 1 filter(is_odd, [1, 4, 6, 7, 9, 12, 17])#[1, 7, 9, 17] 删除 None 或者空字符串: def is_not_empty(s): return s and len(s.strip()) > 0 filter(is_not_empty, ['test', None, '', 'str', ' ', 'END']) #['test', 'str', 'END'] map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。 L = [1,2,3,4,] def pow2(x): ... return x*x ... map(pow2,L) #[1, 4, 9, 16] sorted()对list、dict进行排序 l=[1,4,3,4,9,6,2] l1 = sorted(l) print(l1)#[1, 2, 3, 4, 4, 6, 9] 四、面向过程编程 核心是过程二字,过程指的就是解决问题的步骤,即先干什么后干什么,基于该思想编写程序就好比在设计一条流水线,是一种机械化的思维方式 优点: 复杂的问题流程化,进而简单化 缺点:可扩展性差 焚膏油以继晷,恒兀兀以穷年。

优秀的个人博客,低调大师

Python-递归、三元表达式列表生成式等

一、函数递归 1.什么是函数递归:函数的递归调用是函数嵌套的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用 2.递归调用必须明确的两个阶段: 1.回溯:一次次递归调用下去,应该让每一次重复问题的规模有所减少,直到逼近最终的结果,即回溯阶段一定要有明确的结束条件 2.递推:往回一层一层推算结果 例子: # def age(n): # if n == 1: # return 18 # return age(n-1) + 2 # # # print(age(5)) 思路: # age(5)=age(4)+2 # age(4)=age(3)+2 # age(3)=age(2)+2 # age(2)=age(1)+2 # age(1)=18 # # age(n)=age(n-1)+2 #n>1 # age(n)=18 #n=1 二分法: # nums=[13,15,17,23,31,53,74,81,93,102,103,201,303,403,503,777] # find_num=503 # # # def binary_search(nums,find_num): # print(nums) # if len(nums) == 0: # print('not exists') # return # mid_index=len(nums) // 2 # if find_num > nums[mid_index]: # # in the right # nums=nums[mid_index+1:] # # 重新执行二分的逻辑 # binary_search(nums,find_num) # elif find_num < nums[mid_index]: # #in the left # nums=nums[0:mid_index] # # 重新执行二分的逻辑 # binary_search(nums,find_num) # else: # print('find it') binary_search(nums,find_num) 二、三元表达式 三元表达式实现的效果就是:条件成立的情况下返回一个值,不成立的情况下返回另外一种值 # res=条件成立情况下返回的值 if 条件 else 条件不成立情况下返回的值 name=input('your name: ').strip() res="SB" if name == 'lqz' else "NB" print(res) 三、列表生成式 # l =[ i for i in range(10)] # print(l) # l = [i for i in range(10) if (i%2)==0] # print(l) names = ['alex_sb','lqz_sb','yyh_sb','fm_sb','egon'] l=[name for name in names if name.endswith('sb')] print(l) 四、字典生成式 keys=[‘name‘,‘age‘,‘sex‘] values=[‘egon‘,18,‘male‘] res=zip(keys,values) print(list(res)) #[(‘name‘, ‘egon‘), (‘age‘, 18), (‘sex‘, ‘male‘)] 方式一 d={ } for k,v in zip(keys,values): d[k]=v print(d) #{‘name‘: ‘egon‘, ‘age‘: 18, ‘sex‘: ‘male‘} 方式二 d={k:v for k,v in zip(keys,values)} print(d) #{‘name‘: ‘egon‘, ‘age‘: 18, ‘sex‘: ‘male‘}方式三 dic={k:values[i] for i,k in enumerate(keys)}print(dic) 补充:zip(拉链函数) s=‘hello‘ l=[1,2,3,] res=zip(s,l) print(list(res)) #[(‘h‘, 1), (‘e‘, 2), (‘l‘, 3)] 五、匿名函数 匿名函数就是没有名字的函数,用于仅仅临时使用一次的场景,没有重复使用的需求,一般和内置函数结合使用 # max,min,sorted,map,filter,reduce 常规函数使用def关键字定义,但匿名函数使用lambda关键字定义 语法格式为 lambda arguments:expression lambda:定义匿名函数的关键字 arguments:函数的参数列表,参数之间用逗号(,)分割。 expression:被返回的表达式,且表达式只能有一个(注意:lambda 定义不包含 return语句)。 lambda 表达式构建的其实是一个函数对象 内置函数和匿名函数搭配使用的例子: salaries={ 'egon':300000, 'alex':100000000, 'wupeiqi':10000, 'yuanhao':2000 } # 求最大值 res=max(salaries,key=lambda name:salaries[name]) #'egon' print(res) # 求最小值 res=min(salaries,key=lambda name:salaries[name]) #'egon' print(res) 注:max直接返回的是人名,需要使用里面的参数key,通过key指定的函数,将拿到的返回值当做比较依据。 map()函数: map(function, iterable, ...) # map:把一个列表按照我们自定义的映射规则映射成一个新的列表 names=['alex','lxx','wxx','yxx'] # res=map(lambda name: name + "dSB", names) # print(list(res)) filter(func, seq)该函数的目的是提取出seq中能使func为true的元素序列。func函数是一个布尔函数,filter()函数调用这个函数一次作用于seq中的每一个元素,筛选出符合条件的元素,并以列表的形式返回。 # names=['alex_sb','lxx_sb','wxx_sb','egon','yxx'] # res=filter(lambda name:name.endswith('sb'),names) # print(list(res)) reduce()格式:reduce (func, seq[, init()]) # reduce: 把多个值合并成一个结果 from functools import reduce l=['a','b','c','d'] res=reduce(lambda x,y:x+y,l,'A') # 'A','a' => 'Aa' # 'Aa','b'=>'Aab' # 'Aab','c'=>'Aabc' # 'Aabc','d'=>'Aabcd' print(res) 焚膏油以继晷,恒兀兀以穷年。

优秀的个人博客,低调大师

Waston+Python,6行代码实现音频转文字,轻松做字幕~

几行代码,抱上IBM爸爸大腿,实现音频快速转文字~用到了IBM Waston的Speech to text(目前还是个demo) 碎碎念的废话~ 前几天工作中遇到需要把音频转为文字稿的任务,顺便学了个新词语:扒词。扒词:根据视频信息获得文字信息,即根据录音或者台词,然后转字幕。 拿音频找导演联系扒词,结果导演居然说视频扒词可以,音频就算了吧,算了吧……! 我可是有30个音频,每个虽然才2-5分钟,但转成文字每个也有近千字吧,总和就是30000字!难道纯手打吗!踹翻导演啊! 科技这么发达,难道找不到音频转文字的软件吗!我于是搜了一下: ……天下没有免费的午餐。 感谢万能的知乎!让我找到了IBM 爸爸的Speech to text! Speech to text官网在这里:https://speech-to-text-demo.ng.bluemix.

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册