【python】每天一个小练习

网友投稿 696 2022-05-29

文章目录

注意规范

一、基础操作题

二、面向对象OOP

三、算法题

第一题

第二题

第三题

注意规范

(1)加上文件头

#!/usr/bin/Python ## -*- coding: utf-8 -*-

1

2

#!/usr/bin/python指定有什么解释器运行脚本及解释器所在的位置

原因:脚本语言共同遵守的规则:当第一行为 #!/path/to/script/interpreter时,指定了用来执行本脚本的解释器。

例如:

#!/bin/sh shell脚本 #!/usr/bin/perl perl脚本 #!/usr/bin/python python脚本 #!/usr/bin/python2 python2脚本 #!/usr/bin/python3 python3脚本

1

2

3

4

5

#!/usr/bin/env会自动搜索脚本解释器的绝对路径

(2)编码规范:运算符前后加1个空格(以对齐为目的可以用tab)、函数参数间的逗号后加1个空格、global声明只能放在函数的开头、设置一个tab键为4个空格

一、基础操作题

1.获取字符串“123456”最后2个字符

strf='123456' print(str[-2:])

1

2

2.一个编码为GBK的字符串S,要将其转为UTF-8的字符串

a="啊啊啊" #py3中默认编码是unicode bytes(a,"gdk") ans1=a.encode("utf-8") print(ans1)

1

2

3

4

3.Alist[1,2,3,1,2]对列表元素去重

list=[1,3,4,1,2] s1.set(list) print s1

1

2

3

list[-1]代表最后一个元素;list[a:-1]指向了倒数第二个

4.实现“1,2,3”变成[“1”,“2”,“3”]

str="1,2,3" ans=str.split(',') print(ans)

1

2

3

5.合并两个字典a={“A”:1,“B”:2},b={“C”:3,“D”,4}

a={"A":1,"B":2} b={"C":3,"D":4} ans=dict(a.items()+b.items()) a.update(b)#用这种方法比较多 print(ans) print(a)

1

2

3

4

5

6

6.实现tuple和list的转换

alist=[123,'abc'] atuple=tuple(alist)

1

2

7.把元组(“a”,“b”)和元组(1,2)变成{“a”:1,“b”:2}

a=("a","b") b=(1,2) d=dict(zip(a,b))#字典序

1

2

3

8.打乱一个列表的元素

import random x=[i for i in range(100)] print(x) x.random.shuffle() print(x)

1

2

3

4

5

9.给定2个list,A和B,找出相同元素和不同元素

a=[i for i in range(1,99,2)] b=[j for j in range(2,100,2)]#偶数 x=[x in a if x in b] y=[y in (a+b) if y not in x]#非共有的数

1

2

3

4

注意列表解析的用法:

lst1 = [i*2 for i in range(1,11)] print(lst1) # 结果为[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

1

2

3

再如:创建一个全部为问号的二维数组(Length行Length列):

lst1 = [['?'] * Length for i in range(Length)]

1

10.a="hello"和b="你好"编码成bytes类型

bytes('hello','utf-8') bytes('您好','gbk')

1

2

tuple=(1,2,'hi') print(len(tuple)) list=[100,23,45] print(list[0]) hello=['hi','hello'] world=['earth','field','universe'] hello.append('你好') print(hello) hello.extend(world) #插入列表 print(hello) hello.insert(0,'我的天啊') print(hello) hello.remove('你好') print(hello)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

11.注意打印的格式

print('The boss named %(name)s is %(age)d-year-old and %(height)g tall.' % boss)

1

12.各种队列

队列from queue import Queue(maxsize)

13.输出所有的大写字母和数字

https://www.cnblogs.com/pyse/p/9847812.html

14.input注意

在 Python3.x 中 raw_input() 和 input() 进行了整合,去除了 raw_input( ),仅保留了input( )函数,其接收任意任性输入,将所有输入默认为字符串处理,并返回字符串类型。

15.三引号是可以换行写代码(有时候代码过长,换行会便于理解和阅读)

三引号字符串作为docstring

16.(1)全角用2个标准字符的位置,占2个字节

汉语是全角,注意全角的数字是半角的数字的位置的2倍。

(2)半角用1个标准字符的位置,占1个字节

英文字母、数字和字符都是半角

17.禁止空格和tab键混用,indent是缩进的意思,会报错unindent does not match 啥的

18.避免使用from … import …

如A.py中定义 flag=1 B.py中用了 from A import *

1

2

3

4

5

如果在某个地方改了A.py的flag值——A.flag=0,这时打印A模块和B模块的a的值则不一样(0,1)

19.变量只是引用对象的名称,不会创建副本。

x=[1,2,3,4] y=x y[0]=0 print(x) #[0,2,3,4] print(y) #[0,2,3,4]

1

2

3

4

5

20.遍历时删除列表项

num_list=[1,2,3,4,5] for i in xrange(len(num_list)): if nym_list[i]==2: num_list.pop(i) else: print num_list[i] print num_list

1

2

3

4

5

6

7

会报错:indexError:list index out of range,可以这么改(多一句):

num_list=[1,2,3,4,5] for i in xrange(len(num_list)): if i>- len(num_list): break if nym_list[i]==2: num_list.pop(i) else: print num_list[i] print num_list

1

2

3

4

5

6

7

8

9

或者更好的方法:

num_list=[1,2,2,4,5] num_list=[i for i in num_list if i!=2] num_list=[] for i in num_list: if i!=2: new_list.append(i)

1

2

3

4

5

6

7

8

21.函数默认参数使用可变类型

def saver(x=[]): x.append(1) print(x) saver([2]) #[2,1] saver() #[1] saver() #[1,1] saver() #[1,1,1]

1

2

3

4

5

6

7

8

正确做法:

def saver(x=None): if x is None: x=[] x.append(1) print(x) saver([2]) #[2,1] saver() #[1] saver() #[1]

1

2

【python】每天一个小练习

3

4

5

6

7

8

22.

不正确的使用类变量

方法顺序解析MRO

class A(object): x=1 class B(A): pass class C(A): pass print A.x,B.x,C.x #1,1,1 B.x=2 print A.x,B.x,C.X #1,2,1 A.x=3 print A.x,B.x,C.x #3,2,3

1

2

3

4

5

6

7

8

9

23.将字符串数字转为数字型,直接int(str)即可。

24.注意

printf是自动带换行的(很容易忘记这点),

另外input默认输入为字符串,如果要用成数字可以用int(str)等进行转换

如:输入" 0 1 2 3 …Length-1"

ans = [i for i in range(0, Length)] for j in range(len(ans)+1): if j == 0: print(" ",end = " ") else: if j == Length: print("%d"%(j - 1)) else: print("%d"%(j - 1),end = " ")

1

2

3

4

5

6

7

8

9

官方文档:format会代替%,所以多用format。

25.创建一个集合:

可以使用大括号 { } 或者 set() 函数创建集合,

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

N1 = {1, 'A', 2, 3, 4, 4, 4} print(N1) # {1, 2, 3, 4, 'A'}

1

2

26.元组的索引,有一种是两个双引号的,最后数字代表步长:

sentence = '''andyguo happy''' sentence1 = '''aaaabbbb''' s1 = sentence[1:6:2] # 步长为2,nyu s2 = sentence[:] # 所有元素 print(s1) print(s2)

1

2

3

4

5

6

27.find用于查找字符串的子串

find(substr, beg=0, end=len(string)):

在[beg, end]范围内查找substring,找到返回substr的起始下标,否则返回 -1。

string = 'Hello Python' print(string.find('h', 0, len(string))) # 输出 9 print(string.find('thon') # 输出 8 print(strin.find('thon', 9, len(string)) # 输出 -1

1

2

3

4

28.可以通过setdefault()对空字典进行赋值:

# 字典赋值:setdefault() d=dict() #产生空字典 D={} #产生空字典 d.setdefault('a',0) D.setdefault('b',[1,2,3,4,5]) print(d) print(D) # {'a': 0} # {'b': [1, 2, 3, 4, 5]}

1

2

3

4

5

6

7

8

9

二、面向对象OOP

(1)类的成员函数参数第一个记得加上self,类中的成员变量记得前面加上self.

(2)如果父类有子类则记得有(object),如果没有子类则括号都没;

(3)主函数开头记得有if __name__ == '__main__':

(4)尽量少使用全局变量,如果要用则简单是写在同个项目的另一个文件(如文件名为globalvar)中,在主程序开头记得import globalvar as gl,也可以不写gl用其他名;

(5)除非从事底层开发,否则很少使用继承(子类重写方法后有错不好查)

类的4种关系:继承、实例化、组合、认识

(6)

三、算法题

第一题

编写一个类Cpeople(人的姓名str、年龄str、性别bool、工号int),依次从键盘或文件上输入每个人的如上信息。遍历输出所有男性员工信息;按年龄为序输出所有员工,同年龄则以工号升序为序

存储Cpeople类对象的数据结构用list或dict

注意:输出要列对齐

#!/usr/bin/python2 ## -*- coding: utf-8 -*- import functools import re class CPerson: def __init__(self,name,age,sex,number): self.name=name self.age=age self.sex=sex self.number=number def MyCmp(self,other): if self.age>other.age: return 1 elif self.age==other.age: if self.number

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

结果为:

请输入人数:2 请输入个人信息:andy 11 男 666 男员工: 姓名:andy 年龄: 11 性别: 男 工号: 666 请输入个人信息:luo 22 男 007 男员工: 姓名:luo 年龄: 22 性别: 男 工号: 007 ----------------- 所有的员工信息如下: 姓名:andy 11 男 666 姓名:luo 22 男 007

1

2

3

4

5

6

7

8

9

10

11

第二题

加密四位整数,规则如下:每位数字加5,用和除以10的余数代替该位的数字,再将第一位和第四位交换,第二位和第三位交换

#!/usr/bin/python ## -*- coding: utf-8 -*- def encode(a): c = [] for i in range(4): c.append(int(a[i])) for j in range(4): c[j] = (c[j] + 5) % 10 c[0], c[3] = c[3], c[0] c[1], c[2] = c[2], c[1] #print(c) for k in range(4): print(c[k], end='') a = input("请输入四位数:") print("一开始的数字:",a) #print(type(a)) print("加密后的数字:") encode(a)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

第三题

在键盘上,左手每隔2秒按下一个子母键盘(依次A-Z),右手每隔5秒按下一个数字键(0-9),模拟求按下第100个键是哪个手,哪个键。

#!/usr/bin/python ## -*- coding: utf-8 -*- BigZ=[chr(i) for i in range(65, 91)]#大写字母A-Z Num=[int(i) for i in range(0,9)]#数字0-9 time=0 num1=0 num2=0 flag=0 while(1): global ans #每次遍历为1s flag=flag+1 if(time%2==0): num1=num1+1 if(flag==100): ans='left' break if(time%5==0): num2=num2+1 if(flag==100): ans='right' break print(ans) if(ans=='left'): a=BigZ[num1%26] print(a) if(ans=='right'): a=Num[num2%10] print(a)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:无线节能组信标为什么会自动切换? 排查故障的过程真的像谜一样无法解释
下一篇:云计算-构建GlusterFS分布式存储系统
相关文章