python学习笔记
18. random()的用法
#随机整数: >>> import random >>> random.randint(0,99) 21 #随机选取0到100间的偶数: >>> import random >>> random.randrange(0, 101, 2) 42 #随机浮点数: >>> import random >>> random.random() 0.85415370477785668 >>> random.uniform(1, 10) 5.4221167969800881 #随机字符: >>> import random >>> random.choice('abcdefg&#%^*f') 'd' #洗牌: >>> import random >>> items = [1, 2, 3, 4, 5, 6] >>> random.shuffle(items) >>> items [3, 2, 5, 6, 4, 1]
17.lambda函数
def add(a,b): x = a+b print(x) add(1,3) g = lambda a,b :a+b print(g(1,2))
16.两个变量值互换
a,b = b,a
15. insert()函数的使用
list.insert('索引位置','要插入的内容’) #要注意索引位置是指在对应的位置之后,而不是插入以后充当的位置。
14. 在循环外使用else
今天在练习一个题目:求100之内的素数。
,我写的代码如下:
for i in range(1,100): for k in range(2,i): if i % k == 0: pass else: print(i)
输出的结果和我的期待大相径庭,分析之后发现在if那里,每出现一次能整除i的情况,函数都会把i输出一遍,从而导致了错误。后来查看了答案,发现是这么写的:
for i in range(1,100): for k in range(2,i): if i % k == 0: break else: print(i)
区别在于答案使用了break
,奇怪的是else
语句出现在了if
之外,查询资料得知:这种写法表示如果if循环中出现了符合条件的情况,则直接跳出终止循环,如果走完但还没有符合条件的出现,则执行else的语句。参考 Python——在循环外使用else
13. 如何反向一个列表中的元素?有三种思路:
a = [1,2,3] a.reverse() #第一种方法,列表直接反向 a.sort(reverse = True) #第二种方法,使用sort方法 a[::-1] #第三种方法,也是最高级的一种写法,使用切片。表示“从倒数第一个开始往前数” 如果是a[:]的话则表示从正数第一个到最后一个。
12.如何将一个字符串全部统一为大写或者小写?
week = input('请输入星期几:').upper() #这样可以将输入的星期几全部统一为大写,方便后面做比较
11.如何将一个元素都是整数的列表做全部加和处理?
直接用sum(列表名)
即可:
[100.0, 50.0, 25.0, 12.5, 6.25, 3.125, 1.5625, 0.78125, 0.390625] print(sum(s))
- 判断一个字符串是否是字母、数字、空格
用isalpha()/isdigit()/isspace
这些函数来实现。
test = input('输入一个字符串:') letter =0 digit =0 space = 0 i = 0 for i in range(0,len(test)): if test[i].isalpha(): letter += 1 elif test[i].isdigit(): digit += 1 elif test[i].isspace(): space += 1 i += 1 print(letter,digit,space)
9.int
形式的数字,可以通过用str()
的方式处理成字符串,从而用索引获取到指定位置的数字。
x = 234 print(x[0]) #会报错--TypeError: 'int' object is not subscriptable s = str(x) print(s[0])
这个点出现在「打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。」这道题中。
8.列表的截取
对于列表a,a[:]
表示的意思是从a的第一个到最后一个元素的合集,类似的,a[1:]
则表示从第二个开始到最后的元素形成的列表。
# 如果要把列表a中的元素全部复制到b,代码如下 a = [1,2,3,4] b = [] b = a[:] print(b)
7.python中 sort()函数的使用
sort()
函数是用来比较一个元组中元素大小的,需要注意的是,在实践中发现不能直接print(a.sort())
,而只能先进行a.sort()
,然后再print(a)
另外sort()
有一个参数reverse=True
,可以将数组实现从大到小的排了。
a = [int(input('请输入整数1:')),int(input('请输入整数2:')),int(input('请输入整数3:'))] print(a) a.sort() print(a)
6.函数的闭包
类似于if
的嵌套,可以理解为函数的嵌套:当内部的函数引用了外部函数的参数的时候,我们认为就形成了闭包。同时,闭包要求外部函数的返回值是内部函数的函数名。
好处是需要调用的参数变少,适用于有参数不变、有参数变化的情况。(比如ax+b = y 假设a/b不变,而只有x需要变化)
def func1(a): def func2(b): return a+b return func2 x = func1(5) print(x(4))
5.函数作用域
如果函数外和函数内都各自有一个重名的变量,那么函数内的变量复制只能影响到函数内部,而在函数外部还是由函数外部的变量主导。
但如果确实想让函数内部的变量赋值影响全局的话,那么可以在内部的变量赋值前增加global var
的写法。比如:
var1 = 123 def func(): global var1 var1 = 456 print(var1) func()
4. 函数的可变长参数
定义一个函数,默认参数都是必须的,但如果还希望增加非必须(没有写也不会报错)的参数的话,可以在参数前面加「*」,比如:
def func(lenght,* height): return
其中lenght
是必须的,而height
则是非必须的。
3.两个函数之间的参数传递
如下。假设要把func2的结果传递给func1作为参数,那么关键是在func2的最后面加上func1()函数,这样就可以把func2的结果直接传递给func1继续运行了。
当然,在这种情况下,func1产生的结果也可以再回来被func2直接调用。
def func1(): return def func2(): return name func1(name) ———————————————————————————————— # 代码实例 import re def find_item(hero): with open('sanguo.text') as f: data = f.read().strip().replace('\n','') name_num = len(re.findall(hero,data)) return name_num with open('name.text') as f: names = f.read().split('|') for name in names: name_num = find_item(name) print(' %s 出现的次数是 %s 次' %(name,name_num))
1.用变量替换字符串的内容:
Chinese_zodiac = '鼠牛虎兔龙蛇马羊猴鸡狗猪' for year in range(2000,2018): print('%s 年是 %s 年' %(year,Chinese_zodiac[year % 12]))
学习要点:
a. 用变量替换字符串内容需要用%s
来实现,最后跟上 %()
来作为变量的来源;
b. 字符串也可以像数组那样,用索引值来指定某一部分;
c. year % 12
表示的是年份除以12得到的余数;
2.Python--read()和readline()以及readlines()用法区别
# 试验材料 諸葛亮|關羽|劉備|曹操|孫權|關羽|張飛|呂布|周瑜|趙雲|龐統|司馬懿|黃忠|馬超
.read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中
.readlines() 一次读取整个文件(类似于 .read()
.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理.
.readline() 每次只读取一行,通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()。