python 日常练习

本文涵盖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

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值