目录
Python考试内容整理
1.考试分值整理
2.考试内容整理
Python图像处理
OpenCV库
PIL
Skimage
Pandas数据处理及分析
numpy
其他
文件操作中rwa相关
切片
Python练习题DAY1
三位数判断是否是水仙花数
年月日转天数
BMI体重身高换算
修狗人类年龄转换
寻找最小数
Python练习题DAY2
打印乘法表
找出质数
计算阶乘和
猜数字
列表和索引下标
Python练习题DAY3
不重复八位数整除
杨辉三角
公共前缀(*)
字符串出勤记录
数据字典括号匹配
Python练习题DAY4
丢骰子判断和
递归回文判定
递归实现x的n次幂函数
统计元音字母(*)
装饰器登录
Python练习题DAY7
读取文件(open(r'c:\test\work.txt','r')as f:)
创建二维数组(numpy.arrange(1,17).reshape(4,4))
文件写入姓名(open(r'e:\temp\name.txt','a')as f:)
创建随机数数组(np.random.random([4,5]) arr.sum arr,mean axis=0/1)
(以上出现在程序填空&大题中)
python图像处理
OpenCV库
imread()-读入图片
imshow()-显示图像
cv2.imshow('Lena',img) cv2.waitKey(0)#表示延迟多少秒使用 cv2.destroyAllWindows()#释放由openCV创建的所有窗口
imwrite()-存储图像
cv2.imwrite('lena.jpg',img) #第一个参数是文件名称,第二个参数是存储对象。
PIL
open()
show()-显示图像(弹出单独图像窗口)
save()-保存图像
Skimage
imread()-读入图像
imshow()-显示图像
imsave()-存储图像
img_as_ubyte()-将图像像素灰度取值范围转化
pandas数据处理和分析
查看前5行(默认5行)data.head()
查看倒数5行 data.tail()
查看维度信息 data.shape()
查看每一列数据格式 data.dtypes()
查看数据表基本信息(维度、列名称、数据格式、所占空间)data.info()
查看某一列具体信息 data.列名
按索引提取单行/多行数值 data.iloc
- 提取第n行:data.iloc[n]
- 提取到第n行:data.iloc[0:n]
- 提取所有行,0到n列:data.iloc[:,0:n]
- 提取第0,2,4行,第3,4列:data.iloc[0,2,4][3,4]
将数据进行排序 data.sort_values(筛选条件).iloc[:n,:]
查看类别信息 count_class=pd.value_counts(data['列名'],sort=True).sort_index()
查看基本的统计信息 data.describe()
pandas.merge 根据键将不同DataFrame行连接
pandas.concat 全连接
r:读取文件-不存在报错
w:写入文件-不存在先创建再写入,会覆盖
a:写入文件-不存在先创建再写入,追加文件末尾
列表[起始:结束:步长]
起始包含在子列表中,但是结束不包含在新列表中
arr2=[1,2,3,4,5,6]
print(arr2[2:]
#[3,4,5,6]
print(arr2[:3])
#[1,2,3]
print(arr2[::2])
#[1,3,5]
print(arr2[1::2])
#[2,4,6]
print(arr2[::-1])
#[6,5,4,3,2,1]
s='abcdefghijk'
print(s[0:3])#abc
print(s[:-3])#abcdefgh
print(s[::2])#acegik
print(s[::-1])#kjihgfedcba
1. 输入一个数,判断是否是水仙花数
num=int(input())
if num < 100 or num > 999:
print('请输入一个三位数')
else:
a = num//100
b = num%10
c = num//10%10
if a**3+b**3+c**3 == num:
print(num,'是水仙花数')
else:
print(num,'不是水仙花数')
2.输入年月日,判断这天是这一年的第几天
year = int(input('请输入年'))
month = int(input('请输入月'))
day = int(input('请输入日'))
isLeapYear = True if (year%4==0 and year%100!=0) or year%400==0 else False
sum = 0
if month == 12:
sum += 30
month-=1
if month == 11:
sum += 31
month-=1
if month == 10:
sum+=30
month-=1
if month == 9:
sum+=31
month-=1
if month == 8:
sum+=31
month-=1
if month == 7:
sum+=30
month-=1
if month == 6:
sum+=31
month-=1
if month == 5:
sum+=30
month-=1
if month == 4:
sum+=31
month-=1
if month == 3:
if isLeapYear:
sum+=29
else:
sum+=28
month-=1
if month == 2:
sum+=31
month-=1
sum+=day
print(sum)
#或者
import datetime
import calendar
year=int(input('请输入4位数字的年份:'))#获取年份
month=int(input('请输入月份1到12之间:'))#获取输入月份
day=int(input('请输入日份1到31之间:'))#获取日份
targetDay=datetime.date(year,month,day) # 将输入的日期专格式化成标准的日期
dayCount=targetDay-datetime.date(targetDay.year-1,12,31)#减去上一年最后一天
print('%s是%s年的第%s天。'%(targetDay,year,dayCount.days))
3.BMI 体重和身高换算
计算公式为:BMI=体重(kg)/ 身高(m)²,体重正常:18.5-24.9,超重:25-29.9,一级肥胖:30-34.9
输入身高和体重,输出指数和健康情况判断
#BMI=体重/(身高x身高)
h=float(input("请输入你的身高(例如1.60m):"))
w=float(input("请输入你的体重(kg):"))
BMI=w/h**2
if BMI>35:
print("重度肥胖")
elif BMI>=30:
print("一级肥胖")
elif BMI>=25:
print("超重")
elif BMI>=18.5:
print("体重正常")
else:
print("偏瘦")
4.我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每
一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗
相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人
类的年龄。如果用户输入负数,请显示一个提示信息。
old=int(input("请输入小狗的年纪:"))
if old<0:#如果输入的数为负数
print("请输入正确的年龄")
elif old<=2:
people=old*10.5
print("小狗相当于人类年龄为:",people)
else:
people=2*10.5+(old-2)*4
print("小狗相当于人类的年龄为:%s"%people)
5. 编写一个程序,从4个整数中找出最小的数,并显示此数。
#先输入四个数
a=int(input("请输入a:"))
b=int(input("请输入b:"))
c=int(input("请输入c:"))
d=int(input("请输入d:"))
min=a
if min>b:
min=b
if min>c:
min=c
if min>d:
min=d
print(f'{a},{b},{c},{d}四个数中最小的数为{min}')
1.打印9x9乘法表
i=1
while i<=9:
j=1
while j<=i:
print('%dx%d=%d'%(i,j,i*j),end=' ')
j+=1
print()
i+=1
2.找出2-100000的所有质数,优化算法,找过一次的不需要再反复判断
primes=[]
num=2
end_num=10000
while num<=end_num:
flag=True
for p in primes:
if p<=num**0.5:
if num%p==0:
flag=False
break
else:
break
if flag:
primes.append(num)
print(num,end=',')
num+=1
3.计算1!+2!+3!+…n!
#共定义了参数n、i、total、j、k
n=int(input('请输入n'))#n等于输入的最大数值
i=1#i等于当前数值
total=0#数值总和
while i<=n:#第一层循环 计算1!+2!+……
#如果i小于输入的最大数值
j=1
#使j等于1
k=1
#k等于本次计算的阶乘和
while j<=i:#第二层循环 计算i!
k*=j#k等于每次循环的j的阶乘和累计
j+=1#j增加直至达到i的数值大小
total+=k#加上这次循环的阶乘和
i+=1#i的数值相加
print(total)
4.猜数字游戏,随机生成一个1-100以内的整数,然后让用户猜,记录用户猜的过程,在用户猜后打印结果和次数
import random
guess_nums=[]
num=random.randint(1,100)#生成1到100的随机数
print(num)#输出生成的随机数
flag=True
while flag:
guess = int(input('请输入您猜的数字:'))#设置guess为输入的数字
guess_nums.append(guess)#将输入的数字增加到guess_nums列表中
if guessnum:#数值偏大
print('数值偏大')
else:#数值正确
flag=False#跳出循环
print('猜中了,您一共猜了%d次'%len(guess_nums))
#通过guess_nums的长度来判断一共猜了多少次
for i in guess_nums:#输出猜测的数值
print(i)
break
5.给定一个整数列表nums和一个整数目标值target,请你在该列表中找出和为目标值的索引。假设每种输入只会对应一个答案,但是数组中同一个元素在答案中不能重复出现。
nums=[3,3,5,6,7]#定义整数列表nums
target=8#定义整数目标值target
i=0
while i
1.用0-7组成没有重复数字的8位数,其中能够被11整除的有多少个
def isUnique(i:int)->bool:
s=str(i)#类型转换 使s成为字符串
if '8' in s or '9' in s:#如果存在数字8或数字9
return False
for c in s:
if s.index(c)!=s.rindex(c):
#如果字符某个字符串第一个出现的位置和最后一个出现的位置不同
#即判断是否有相同字符
return False#返回错误
return True
count=0#定义count
for i in range(10234567,76543210):
#所能组成的最大数和最小数
if isUnique(i) and i%11==0:#验证是否满足组成8位数的条件且判断是否能被11整除
count+=1#计算数字数量
print(count)
2.给定一个非负整数numRows,生成【杨辉三角】的前numRows行。
在【杨辉三角】中每个数就是它左上方和右上方的数的和。
输入:numRows=5
输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
from __future__ import annotations
#从future中导入annotations 有利于声明python类型列表
def generate(numRows:int)->list[list[int]]:
r=list()#创建列表
for i in range(numRows):#
row=list()#row等于每一行生成的列表
for j in range(0,i+1):#j范围为0到i
if j==0 or j==1:#如果j等于0或者1
row.append(1)#在列表中加入1
else:
row.append(r[i-1][j-1]+r[i-1][j])#上一行两个元素相加
r.append(row)
return r
r=generate(8)
for i in r:
print(i)
3.
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
from __future__ import annotations
def longPrefix(strs:list[str])->str:
length=len(strs[0])#length是第一个单词的长度
num=len(strs)#num是单词的数量
for i in range(length):#遍历第一个单词的每个字母
#得到1,2,3……length-1
c=strs[0][i]#c等于对应的字母
for j in range(1,num):#j是从列表中1到num-1中的元素
if i
4. 给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:
'A':Absent,缺勤
'L':Late,迟到
'P':Present,到场
如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:
按 总出勤 计,学生缺勤('A')严格 少于两天。
学生 不会 存在 连续 3 天或 连续 3 天以上的迟到('L')记录。
如果学生可以获得出勤奖励,返回 true ;否则,返回 false 。
示例 1:
输入:s = "PPALLP"
输出:true
解释:学生缺勤次数少于 2 次,且不存在 3 天或以上的连续迟到记录。
示例 2:
输入:s = "PPALLL"
输出:false
解释:学生最后三天连续迟到,所以不满足出勤奖励的条件。
def check(s:str)->bool:
if s.count('A')<2 and s.find('LLL')==-1:
#find函数:检查LLL字符串是否是s字符串的子串
#如果出现A的次数小于2且没有找到连续的LLL字符串
return True
return False
print(check('PPPALLLP'))
5. 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
def check(s:str)->bool:
stack=[]#键:值
dic={'(':')','[':']','{':'}'}#使用字典存储括号
for i in s:
if i in dic.keys():
#key方法用于返回字典中所有键
stack.append(i)#左括号入栈
#stack列表中增加i
print(stack)
elif i in dic.values():
#value方法用于返回字典中对应的值
#items方法返回字典中所有的键值对(即键+值)
if len(stack)<0 or dic.get(stack[-1])!=i:
#如果键的长度为0或者是与右括号匹配不成功
return False
stack.pop()#匹配正确则右括号出栈
print(stack)
if len(stack)>0:#持续直到列表为空
return False
return True
check('{[][][][][][]))}')
1. 用一个骰子(1-6)掷10次,把结果相加刚好为40的可能性有多少种
def roll(n,s):
if n<1 or sn*6:#如果骰出次数小于1或者相加和小于最小值(n)或大于最大值(6n)
return 0#返回0
elif n==1:#如果骰出次数等于1 返回1
return 1
else:
total=0
#递归函数,total等于相加可能性的次数
total=roll(n-1,s-1)+roll(n-1,s-2)+roll(n-1,s-3)+roll(n-1,s-4)+roll(n-1,s-6)+roll(n-1,s-5)
return total#返回最后的可能性之和
print(roll(10,40))
#roll函数(次数,相加和)
2. 用递归判定回文字符串或者回文数
def is_huiwen(s):
if len(s)<2:#单个字母本身也是回文
return True
elif s[0]!=s[-1]:#如果第一位不等于最后一位,返回false
return False
return is_huiwen(s[1:-1])#如果第一位等于最后一位,递归调用切片
print(is_huiwen('abbba'))
3. 使用递归
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn )。
输入:x = 2, n = 10
输出:1024
输入:x = 2.1, n = 3
输出:9.261
输入:x = 2, n = -2
输出:0.25
def myPowHandler(x:float,n:int):
if n==1:#如果n等于1 返回数值(1的任何数次方都等于1)
return x
if n%2!=0:#如果n不能被2整除 递归计算
half=myPowHandler(x,n//2)#划分成两个更小的函数
#//整数除法,返回不大于结果的一个最大的整数
return half*half*x#返回两个更小的值和一个x
else:#如果可以被2整除
half=myPowHandler(x,n/2)
return half*half
def myPow(x:float,n:int):
if n==0 or x==1:#如果n等于0或者n等于1
return 1#返回1
if n<0:#如果n小于0
return 1/myPow(x,abs(n))#abs函数 计算绝对值
return myPowHandler(x,n)
myPow(2,10)
4. 统计元音字母——输入一个字符串,统计处其中每个元音字母的数量,注意大小写算1种
from ast import Lambda
from functools import reduce
vowels={'a':0,'e':0,'i':0,'o':0,'u':0}#定义
def countVowel(s:str):
r=list(filter(lambda c:c in vowels or c.lower()in vowels,s.lower()))
#filter函数,筛选返回符合条件的新列表
#lambda 参数列表 : 返回值 lower()字符串变小写
#lambda c:s.lower,c in vowels or c.lower()in vowels
#比较vowels中的元音字母(不分大小写)和s中的字母
#filter过滤掉了除了元音字母以外的字母
#list转换为列表
for k in vowels.keys():
vowels[k]=r.count(k)
countVowel('Iabckdefg')
print(vowels)
5.
使用装饰器实现方法的权限校验,当用户调用方法时候,需要输入用户名和密码,只有字典中的用户才可以登录
dict = {'zhangsan':'12345','lisi':'abc123'}
dict={'zhangsan':'12345','lisi':'abc123'}
def auth(func):
def check(*args,**kw):#**kw-关键字参数 *args-可变参数
username=input('请输入用户名:')
password=input('请输入密码:')
if username in dict and dict.get(username)==password:
#如果输入的用户名在字典中且字典中姓名的对应密码值等于输入的密码值
r=func(*args,**kw)
return r
else:
print('权限不足')
return check
@auth
def add(a,b):
return a+b
add(1,2)
1. 读取c:\test\work.txt文件内容,并计算文件中单词数量,用空格划分
word_dict = {}
with open(r'c:\test\work.txt','r') as f:#open()函数 打开文件,创建一个file对象 open('文件名称','打开模式')
lines = f.readlines()
for line in lines:#获取文件中的单词
words = line.replace('\n', '').lower().split(' ')#根据空格进行切片
for word in words:#对于单词
if word in word_dict:#如果单词已经出现过了
word_dict[word] += 1#数量增加1
else:
word_dict[word] = 1#如果单词没有出现过 增加这个单词并设定初始值为1
print(word_dict)
2. 创建4╳4的二维数组,取值为1-16,对数组进行纵向分割打印和横向分割打印。
import numpy
arr1=numpy.arrange(1,17).reshape(4,4)
print(arr1)
print(numpy.split(arr1,4,axis=1))
print(numpy.split(arr1,4,axis=0))
3. 向c:\test\name.txt内写入你的姓名,如果文件不存在创建文件,存在则追加内容,要求使用with实现文件写入。
with open(r'e:\temp\name.txt','a') as f:
f.write('wangwu')
#r:读取 w:写入(覆盖源文件) a:如果不存在 写入(追加)
4. 使用numpy创建一个4x5的随机值数组,计算横轴和纵轴的和以及均值
# 使用numpy创建一个4x5的随机值数组,计算横轴和纵轴的和以及均值
arr = np.random.random([4,5])
ax = arr.sum(axis=0)
ay = arr.sum(axis=1)
axv = arr.mean(axis=0)#行的均值
ayv = arr.mean(axis=1)#列的均值
print(arr)
print(ax,axv)
print(ay,ayv)