sponsored links

python 日常练习

一、课前练习

1. 26个字母大小写成对打印,例如:Aa,Bb....

2.一个list包含10个数字,然后生成新的list,

要求,新的list里面的数都比之前的数多1

3.倒序取出每个单词的第一个字母。

4 请大家找出s=”aabbccddxxxxffff”中,出现次数最多的字母

练习一:打印AaBbCcDd

算法:

1 定义一个字符串result存数据

2 拼接Aa,Bb到字符串result中

3 打印输出result

result=""

for i in range(65,91):

result+=chr(i)+chr(i+32)

print (result)

练习二:原列表每个元素加1生成一个新列表

算法:

1 生成一个列表list1,定义一个列表list2存数据

2 遍历list1中的元素,每个元素加1后存到list2中

3 打印输出list2

a=range(10)

new_a=[]

for i in a:

new_a.append(i+1)

print (new_a)

练习三:倒序取出每个单词的第一个字母

算法:

1 把原字符串转换为一个列表a

2 定义一个新列表new_a存数据

3 变量列表a中的元素,把第一个字母存到新列表new_a中

4 对新列表new_a做反转

s="I am a good boy!"

a=s.split()

new_a=[]

for i in a:

new_a.append(i[0])

print (new_a[::-1])

算法二:

1 把原字符串转换为一个列表a,并且对原列表做反转reverse

2 定义一个新列表new_a存数据

3 变量反转后的列表a,把第一个元素存到新列表new_a中

4 打印新列表new_a

s="I am a boy!"

s=s.split()

s.reverse()

result=[]

for i in s:

result.append(i[0])

print (result)

练习四:找出字符串中出现次数最多的字母

算法一【用字典】:

1 定义一个字典d

2 遍历原字符串s,元素作为字典的key,出现次数s.count(i)作为字典的value,生成字典d

3 找到字典中values值最大的元素,并打印输出k、v

s="aabbccddxxxxffff"

d={}

for i in s:

d[i]=s.count(i)

for k,v in d.items():

if v==max(d.values()):

print (k,v)

算法二:

1 定义两个变量,一个存出现的字母max_occurence_times_letter,一个存字母的出现次数max_occurence_times

2 变量原来的字符串,如果该元素的出现次数大于max_occurence_times,就把该值和max_occurence_times做转换

3 打印输出max_occurence_times_letter,max_occurence_times

缺点: 只能求出一个,可能会遗漏

s="aabbccddxxxxffff"

max_occurence_times_letter=""

max_occurence_times=0

for i in s:

if s.count(i)>max_occurence_times:

max_occurence_times_letter=i

max_occurence_times=s.count(i)

print (max_occurence_times_letter)

算法二【改进】:

1 定义一个列表max_occurence_times_letter存出现的最大次数的字母,定义一个变量max_occurence_times存出现的最大次数

2 变量原字符串,如果s.count(i)大于max_occurence_times,则清空列表,把该字母存到列表中,s.count(i)的值赋给max_occurence_times

3 如果s.count(i)== max_occurence_times,则直接把这个字母存到列表中

4 打印列表和出现的次数

s="aabbccddxxxxffff"

max_occurence_times_letter=[]

max_occurence_times=0

for i in s:

if s.count(i)>max_occurence_times:

max_occurence_times_letter=[]

max_occurence_times_letter.append(i)

max_occurence_times=s.count(i)

elif s.count(i)==max_occurence_times:

max_occurence_times_letter.append(i)

print (list(set(max_occurence_times_letter)))

练习五、找到字典中最大value

算法一:

1 定义一个列表result存储数据,从字典中取出一个值作为出现的最大次数max_value

2 用k,v遍历字典d,当d[k]>max_value时,清空列表,把k的值添加到列表result中,把d[k]的值赋给max_value

3 当d[k]==max_value时,直接把k的值添加到列表result中

4 打印列表result

d={'a': 2, 'b': 2, 'c': 2, 'd': 2, 'x': 4, 'f': 4}

max_value=d['a']

result=[]

for k,v in d.items():

print (k,v)

if v>max_value:

max_value=v

result=[]

result.append(k)

elif v==max_value:

result.append(k)

print (result)

算法二:

1 定义一个新字典new存数据

2 用k,v遍历原字典d,取出最大的值max(d.values())赋值给v

3 生成新的字典,new[k]=v

d={'a': 2, 'b': 2, 'c': 2, 'd': 2, 'x': 4, 'f': 4}

new={}

for k,v in d.items():

if v==max(d.values()):

new[k]=v

print (new)

练习六:自定义一个count函数方法

算法一【计算一个字母的出现次数】:

1 定义一个函数,默认给两个参数,一个是字符串s,另一个是要查询的字母letter

2 遍历s,当letter出现时,统计出字母letter的出现次数

3 return letter的出现次数

def count_occurence(s,letter):

if not isinstance(s,str) or not isinstance(letter,str):

return 0

times=0

if letter not in s:

return 0

else:

for i in s:

if i==letter:

times+=1

return times

print (count_occurence("aaa","a"))

print (count_occurence("aaa","b"))

print (count_occurence("aaa",2))

算法二【计算两个字母的出现次数】:

1 定义一个列表result存数据,一个变量times存出现次数

2 遍历原来的字符串,生成相邻的两个字母,并存储列表result中

3 遍历列表result,当“cd”出现时,times +=1

4 打印times

s=" abcdefgdcd " 写个函数算出"cd"出现次数

s="abcdefgdcd"

result=[]

times=0

for i in range(len(s)-1):

result.append(str(str(s[i])+str(s[i+1])))

for j in result:

if j=="cd":

times+=1

print (times)

求一个单词的出现次数

def func(s,letter):

s=s.split()

times=0

for i in s:

if i=="boy":

times +=1

return times

print (func("i am a good boy  you are a better boy ","boy"))

二、二进制

1=2^0

11=2^1+2^0

111=2^2+2^1+2^0

bin01110

八进制:

0o1

0o11

十六进制:

hex(20)

hex(30)

hex(15)

运算符

import math

math.floor(1.9/2)

math.ceil(1.9/2)

round(0.5)

round(0.51)

import math

math.floor(1.9/2)

math.ceil(1.9/2)

round(0.5)

round(0.51)

5%2

divmod(5,2)

写一个divmod方法

def divmod(m,n):

num1=m//n

num2=m%n

return num1,num2

print (divmod(5,2))

2**4

bin(1)

bin(3)

bin(3)[2:]

bin(3)[2:].zfill(8)

int(bin(3),base=2)

int(bin(3),base=2)+int(bin(2),base=2)

bin(int(bin(3),base=2)+int(bin(2),base=2))

三、与或非

and or not

and 有一个为假就为假

or  有一个真就为真

在python中哪些值是False:

0,””,[],(),{},None,False

只要不为空均为True

&  :

11

11

11

11

10

10

| :

10

01

11

^:

11

01

10

01

01

0

~:取反

比较关系运算符

~2

2!=1

2==2

2>=1

2<1

2<>1

a+=1 【推荐】

a

a=a+1

"+".join(["a"+"b"])  【推荐】

"a"+"b"

3.1敏捷科普

1 不强调文档,强调沟通

2 不过多设计,只做明确需求

3 使用自动化测试,单元测试最好

tdd:测试驱动开发

先写测试用例,再写代码,让测试用例通过

4 持续集成:jenkins

5 上线

测试上线比较好:对上线内容的控制力,把控质量标准。

6 探索式测试

每个需求阶段:1周到一月,推荐2周,只做明确的需求。

自动化测试:ui测试、接口测试

单元测试:代码覆盖率,异常处理代码(50%代码)

重构:自动化测试、单元测试、

3.2 in与is的用法

"a" in "abc"

"a" not in "abc"

"a" not in ["a","b"]

"a" not in {"a":1,"b":2}

"a" in set(["a","b"])

is 表示同一对象

数字:256之前相同

a=1

b=1

a is b

a=1000

b=1000

a is b

四、运算符

4.1 operator运用

# -*- coding: utf-8 -*- 
import  operator

print  (operator.add(1,1))
print  (operator.sub(2,1))
print  (operator.mul(2,3))
print  (operator.truediv(6,2))
print  (operator.contains("ab","a"))
print  (operator.pow(2,3))
print  ( operator.ge(1,1))
print  ( operator.ge(2,1))
print  (operator.le(1,2))
print  (operator.eq(1,1))

4.2 eval

eval("1+2")

s="print ('hi')"

exec(s)

4.3 标准输出、标准输入、标准错误输出

4.3.1 sys.stdin

a=sys.stdin.read()

print('hello: ',end='')

hi=sys.stdin.readline()[:-1]

4.3.2 sys.stdout与print

print ("hi")

import sys

sys.stdout.write("hi"+'\n')

等价于

print ("hi")

print (len("hi"))

将标准输出改到文件输出

算法:

1 新建一个文件fp

2 把该文件指向标准输出

3 打印标准输出

4 关闭文件

import sys

print('divein!')

saveout=sys.stdout

fsock=open('out.log','w')

sys.stdout=fsock

print('This message will belogged instead of displayed')

sys.stdout=saveout

fsock.close()

import math

math.pi

flat=True

if 1:print (1)

4.3.3 用函数实现cmp功能

def cmp(a,b):

if not isinstance(a,(int,float)) or not isinstance(b,(int,float)):

raise TypeError

if a>b:

return 1

elif a==b:

return 0

else:

return -1

print (cmp(1,2))

print (cmp(3,2))

print (cmp(2,2))

print (cmp(1,"hello"))

4.4 练习:删除字符串中的数字

把字符串中的所有数字删除掉。
a1b2c3b4d5

算法:

1 定义一个列表new_a存数据

2 遍历原字符串,如果非数字,则存入列表new_a

3 把列表new_a转换为字符串打印输出

s="a1b2c3b4d5"

new_a=[]

for i in s:

if i.isalpha():

new_a.append(i)

print ("".join(new_a))

s="a1b2c3b4d5"

non_digit_list=[]

for i in s:

if i not in "0123456789":

non_digit_list.append(i)

print ("".join(non_digit_list))

一行代码【推倒列表】

print ("".join([i for i in "a1b2c3b4d5" if i not in "0123456789" ]))

print ("".join([i for i in "a1b2c3b4d5" if i.isalpha()]))

一行代码【filter 】

print("".join(filter(lambda x:x not in "0123456789",s)))

"".join([i for i in "a1b2c3d4e555" if i.isalpha()])

4.5 找最大数字与排序

算法【找最大数字】

1 定义一个变量max_number存数据,max_number=a[0]【max_number=0 是不对的,当列表中元素小于0时,逻辑会有问题】

2 变量列表中元素,如果i >max_number,则把i的值赋值给max_number

3 输出max_number的值

a=[1,2,3,4,5]

def max(a):

max_num=a[0]

for i in a:

if i>max_num:

max_num=i

return max_num

print (max(a))

三个数排序

算法一:

1 复用上面函数,先算出最大值a,a=max(l)

2 列表l中移除a,再算出次大值,b=max(l)

3 列表l中移除b,再算出最小值,c=max(l)

4 按照要求打印输出a,b,c

l=[1,3,2]

a=max(l)

l.remove(l)

b=max(l)

l.remove(l)

c=max(l)

print (a,b,c)

算法【不推荐】:

a = 2

b =3

c =1

result = []

if a>b:

a,b = b,a

if b>c:

b,c = c,b

if a>b:

a,b = b,a

else:

if b>c:

b,c =c ,b

if a>b:

a,b = b,a

print(a,b,c)

算法【降序排列】:

1 先比较a和b,如果a<b,a,b=b,a,算出较大值

2 再比较a和c,如果a<c,a,c=c,a,算出最大值a

3 再比较b和c,算出次大值

a,b,c=3,2,5

if a<b:

a,b=b,a

if a<c:

a,c=c,a

if b<c:

b,c=c,b

print (a,b,c)

4.6 random应用

round(random.random(),2)    #保留两位小数

int(random.random()*100)    #如何生成一个两位数

random.randint(0,100)

random.randint(0,100)

练习一:生成9位数字的密码

练习二:生成9位字母的密码

练习三:生成9位数字和字母的密码

算法一:

1 定义三个变量存数据

2 从字母、数字中随机取一个,循环9次,并且存到变量里

3 打印输出结果

import string

import random

random_letter=""

random_digit=""

random_letter_and_digit=""

for i in range(9):

random_letter+=random.choice(string.ascii_letters)

print (random_letter)

for j in range(9):

random_digit+=str(random.randint(1,9))

print (random_digit)

random_letter_and_digit=random_letter[1:6]+random_digit[2:6]

print (random_letter_and_digit)

算法二:

1 定义三个变量,letters_num存字母的出现次数,numbers_num存数字的出现次数,letters_num+numbers_num=9,pass_wd存最后的结果

2 依次遍历字母,数字,把结果存储到pass_wd中

3 打印pass_wd

import string

import random

letters_num= random.randint(1,8)

numbers_num = 9-letters_num

pass_wd = ""

for i in range(letters_num ):

pass_wd+=string.ascii_letters[random.randint(0,52)]

for i in range(numbers_num):

pass_wd+="0123456789"[random.randint(0,9)]

print (pass_wd)

算法三:【推荐算法】

1 定义变量pass_wd存数据

2 遍历九次,用random.randint(0,1)随机存储数字和字母

3 打印pass_wd

import string
import random
pass_wd = ""

for i in range(9 ):
    if random.randint(0,1):
        pass_wd+=string.ascii_letters[random.randint(0,52)]
    else:    
        pass_wd+="0123456789"[random.randint(0,9)]

print (pass_wd)

练习四:random的其他常用命令

random.random()     #random() -> x in the interval [0, 1).

random.randint(a,b)  #Return random integer in range [a, b], including both end points.

random.choice(seq)    # Choose a random element from a non-empty sequence

random.uniform(a,b)   # Get a random number in the range [a, b) or [a, b] depending on rounding

random.sample(population,k)  # Chooses k unique random elements from a population sequence or set.

random.shuffle(x,random=None)  # Shuffle list x in place, and return None

str(random.random())[2:]

a=list(range(10))

random.shuffle(a)

a

random.uniform(1,10)

random.choice(a)

random.sample(a,3)

random.sample("abcdef",4)

精确计算*100,获取小数位

10-9.9

10*100-9.9*100

(10*100-9.9*100)/100

Tags: