python小题目汇总
1、编程计算两个日期之间的天数与周数
dateutil模块主要有两个函数,parser和rrule。
其中parser是根据字符串解析成datetime,而rrule则是根据定义的规则来生成datetime。
1 import datetime 2 from dateutil import rrule 3 4 class BetweenDate: 5 def __init__(self,start,stop): 6 self.start = datetime.datetime.strptime(start,"%Y,%m,%d") 7 self.stop = datetime.datetime.strptime(stop,"%Y,%m,%d") 8 def Betdays(self): 9 d = rrule.rrule(rrule.DAILY,dtstart=self.start,until=self.stop).count() 10 return d if d > 0 else False 11 def Betweeks(self): 12 w = rrule.rrule(rrule.WEEKLY,dtstart=self.start,until=self.stop).count() 13 return w if w > 0 else False 14 15 time = BetweenDate('2020,1,14','2020,7,17') 16 days = time.Betdays() 17 weeks = time.Betweeks() 18 print('日期间隔天数:',days) 19 print('日期间隔周数:',weeks) 20 21 结果: 22 日期间隔天数: 186 23 日期间隔周数: 27
time模块操作归纳
操作 | 作用 |
例子 |
time.time() | 打印当前时间(结果为浮点数) |
a = time.time() 结果:1595468499.5463095 |
time.localtime() | 浮点数--->时间结构体 |
b=time.localtime(a) 结果:time.struct_time(tm_year=2020, tm_mon=7, tm_mday=23, tm_hour=9, tm_min=43, tm_sec=7, tm_wday=3, tm_yday=205, tm_isdst=0) |
time.asctime() | 时间结构体--->时间字符串 |
c=time.asctime(b) 结果:'Thu Jul 23 09:43:07 2020' |
time.strftime() | 时间结构体--->指定格式时间字符串 |
d=time.strftime("%Y-%m-%d %H:%M:%S",b) 结果:'2020-07-23 09:43:07' |
time.strptime() | 时间字符串--->时间结构体 |
e=time.strptime(d,"%Y-%m-%d %H:%M:%S") 结果:time.struct_time(tm_year=2020, tm_mon=7, tm_mday=23, tm_hour=9, tm_min=43, tm_sec=7, tm_wday=3, tm_yday=205, tm_isdst=-1) |
对于结构体中元素的说明:
- tm_year:年
- tm_mon:月
- tm_mday:日
- tm_hour:小时
- tm_min:分
- tm_sec:秒
- tm_yday:一周中的索引([0,6],周一的索引是0)
- tm_day:一年中的索引([1,366])
- tm_isdist:1 if summer time is in effect, 0 if not, and -1 if unknown
2、编写程序用于判断学生的作业是否做完
1 class Student: 2 def __init__(self,name,grade,subject): 3 self.name = name 4 self.grade = grade 5 self.subject = subject 6 def do_work(self,time): 7 if self.grade>3 and time > 2: 8 return True 9 elif self.grade<3 and time < 0.5: 10 return True 11 else: 12 return False 13 class Teacher: 14 def __init__(self,name,subject): 15 self.name = name 16 self.subject = subject 17 def evaluate(self,result): 18 if result: 19 return "You are great." 20 else: 21 return "You sholud work hard!" 22 23 stu_zhangshan = Student('zhangshan',5,'math') 24 tea_wang = Teacher('wang','math') 25 resu = stu_zhangshan.do_work(1) 26 tea_said = tea_wang.evaluate(resu) 27 print(tea_said) 28 29 结果: 30 You sholud work hard!
3、筛选素数
1 import math 2 def is_prime(m): 3 if m<=1: 4 return '不是素数' 5 for i in range(2,int(math.sqrt(m))+1): 6 if m%i==0: 7 return '不是素数' 8 return '素数' 9 10 def choice_prime(*args): 11 primes = [i for i in args if is_prime(i)=='素数'] 12 return primes 13 14 print(choice_prime(1,2,3,4,5,6,7,8,9)) 15 16 结果: 17 [2, 3, 5, 7]
4、使用函数求斐波那切数列
1 def fibs(n): 2 result=[0,1] 3 for i in range(n-2):#由于数列前两项已知,故只需求后n-2项即可 4 result.append(result[-1]+result[-2]) 5 return result 6 7 print(fibs(10)) 8 9 结果: 10 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
使用类和迭代器实现斐波那切数列
1 # 使用类和迭代器实现斐波那切数列 2 class Fibs(): 3 def __init__(self,max): 4 self.max = max 5 self.a = 0 6 self.b = 1 7 def __iter__(self): 8 return self 9 def __next__(self): 10 fib = self.a 11 if fib > self.max: 12 raise StopIteration 13 else: 14 self.b, self.a = self.a + self.b, self.b 15 return fib 16 17 fibs = Fibs(100000) #不会占用太多内存空间 18 lst = [fibs.__next__() for i in range(10)] 19 print(lst) 20 ''' 21 结果: 22 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 23 '''
使用生成器实现斐波那切数列
1 def fibs(): 2 a,b = 0,1 3 while True: 4 yield a 5 b,a = a + b, b 6 #生成一个生成器 7 f = fibs() #此时已经无限多个菲波那切数列预存到生成器,使用时将所需的元素督导内存即可 8 9 import itertools 10 lst = list(itertools.islice(f,10)) 11 print(lst) 12 13 ''' 14 结果: 15 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 16 '''
5、输入字符串,转成成数字形式求和
eval("34-23") #结果:11
1 s=' 44+ 34' 2 s=s.strip().split('+') 3 print(s) 4 n=0 5 for i in s: 6 n=n+int(i) 7 print(n) 8 9 结果: 10 ['44', ' 34'] 11 78
6、对输入的字母大小写进行变换,即小写转大写,大写转小写
list-->str用join()
str-->list表用split()
1 def fun(s): 2 # l = [] 3 # for i in s: 4 # if i == i.upper(): 5 # l.append(i.lower()) 6 # else: 7 # l.append(i.upper()) 8 l = [i.lower() if i==i.upper() else i.upper() for i in s] 9 return "".join(l) 10 11 print(fun('Hello')) 12 13 结果: 14 hELLO
与'Hello'.swapcase()作用类似,可参见字符串的基本内容
7、提取字符串中的所有元音字母
a = ord('a') #结果:97
b = chr(97) #结果:a
1 class Keeper: 2 def __init__(self,keep): 3 self.keep = set(map(ord,keep)) 4 def __getitem__(self,n): 5 if n not in self.keep: 6 return None 7 else: 8 return chr(n) 9 def __call__(self,a): 10 return a.translate(self) 11 12 vowels = Keeper("aeiou") 13 result = vowels("Cherry is beautiful!") 14 print(result) #结果:'eieauiu'
8、年、月的日历图,并判断是否为闰年
1 import calendar 2 from datetime import date 3 mydate = date.today() #结果:datetime.date(2020, 7, 22) 4 print(calendar.calendar(2020)) #打印年的日历图 5 print(calendar.month(mydate.year,mydate.month)) #打印月的日历图 6 7 结果: 8 年的日历图: 9 2020 10 11 January February March 12 Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 13 1 2 3 4 5 1 2 1 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 2 3 4 5 6 7 8 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16 9 10 11 12 13 14 15 16 20 21 22 23 24 25 26 17 18 19 20 21 22 23 16 17 18 19 20 21 22 17 27 28 29 30 31 24 25 26 27 28 29 23 24 25 26 27 28 29 18 30 31 19 20 April May June 21 Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 22 1 2 3 4 5 1 2 3 1 2 3 4 5 6 7 23 6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14 24 13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21 25 20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28 26 27 28 29 30 25 26 27 28 29 30 31 29 30 27 28 July August September 29 Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 30 1 2 3 4 5 1 2 1 2 3 4 5 6 31 6 7 8 9 10 11 12 3 4 5 6 7 8 9 7 8 9 10 11 12 13 32 13 14 15 16 17 18 19 10 11 12 13 14 15 16 14 15 16 17 18 19 20 33 20 21 22 23 24 25 26 17 18 19 20 21 22 23 21 22 23 24 25 26 27 34 27 28 29 30 31 24 25 26 27 28 29 30 28 29 30 35 31 36 37 October November December 38 Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 39 1 2 3 4 1 1 2 3 4 5 6 40 5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13 41 12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20 42 19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27 43 26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31 44 30 45 46 47 月的日历图: 48 July 2020 49 Mo Tu We Th Fr Sa Su 50 1 2 3 4 5 51 6 7 8 9 10 11 12 52 13 14 15 16 17 18 19 53 20 21 22 23 24 25 26 54 27 28 29 30 31
判断是否是闰年
1 import calendar 2 from datetime import date 3 mydate = date.today() #结果:datetime.date(2020, 7, 22) 4 is_leap = calendar.isleap(mydate.year) 5 print(("{}是闰年" if is_leap else "{}不是闰年").format(mydate.year)) 6 7 结果: 8 2020是闰年
9、创建数据字典的3中方法
1 dict(a='1',b='2') 2 3 dict(zip(['a','b'],[1,2])) 4 5 dict([('a',1),('b',2)]) 6 7 结果:{'a': 1, 'b': 2}
10、创建不可修改的集合
1 a = [1,4,2,3,1] 2 a_set = set(a) 3 a_frozenset = frozenset(a) 4 print(a_set) #结果:{1, 2, 3, 4} 5 print(a_frozenst) #结果:frozenset({1, 2, 3, 4}) 6 7 #增加--add()、update() 8 print(a_set.add(13) ) #结果:{1, 2, 3, 4, 13} 9 print(a_set.update('hello')) #结果:{1, 2, 3, 4, 'e', 'h', 'l', 'o'} 10 11 #删除--remove()、“-=” 12 print(a_set.remove('h')) #结果:{1, 2, 3, 4, 'e', 'l', 'o'} 13 print(a_set -= set('elo')) #结果:{1, 2, 3, 4} 14 15 #删除集合 16 del a_set
11、同时做幂、余运算
pow()的三个参数全部给出时表示先进行幂运算在进行取余运算
1 print(pow(3,3)) #结果:9 2 print(pow(3,3,4)) #结果:1
12、查看变量所占字节数
1 import sys 2 a = [1,4,2,3,1] 3 print(sys.getsizeof(a)) #结果:104
13、排序函数
默认升序排列,reverse = True表示降序排列
1 a = [1,4,2,3,1] 2 print(sorted(a,reverse=True)) #结果:[4, 3, 2, 1, 1] 3 4 b = [{'name':'xiaoming','age':18,'gender':'male'}, 5 {'name':'xiaohong','age':20,'gender':'female'}] 6 #按照age的降序排列 7 print(sorted(b,key =lambda x:x['age'],reverse=True)) 8 9 结果: 10 [{'name': 'xiaohong', 'age': 20, 'gender': 'female'}, {'name': 'xiaoming', 'age': 18, 'gender': 'male'}]
14、判断真假
(1)all---->如果可迭代对象元素全为真,返回True,否则返会False
(2)any--->可接受一个可迭代对象,如果迭代对象里至少有一个元素为真,就返回True
1 print(bool(0)) #结果:False 2 print(all([0,1,2,3])) #结果:False 3 print(any([0,1,2,3])) #结果:True
15、字符串格式化
1 print("I am {0},age {1}".format('Cherry','18'))#结果:I am Cherry,age 18 2 3 #保留小数点后两位 4 print("{:.2f}".format(3.1415926)) #结果:3.14 5 6 #带符号保留小数点后两位 7 print("{:+.2f}".format(-1)) #结果:3-1.00 8 9 #不带小数位 10 print("{:.0f}".format(9.5678)) #结果:10 11 12 #以整数进行补0,在左边进行填充,其宽度为4---->可改变填充方向以及宽度 13 print("{:0>3d}".format(7)) #结果:007 14 15 #以逗号的形式分割数字字符 16 print("{:,}".format(9876543210)) #结果:9,876,543,210 17 18 #指数计数 19 print("{:2e}".format(9876543210)) #结果:9.876543e+09 20 21 #百分比格式 22 print("{:.2%}".format(0.678)) #结果:67.800%
16、读写文件
1 #打开文件 2 import os 3 os.chdir('C:\\Users\\xhl\\Desktop\\ww') 4 print(os.listdir()) #结果:['a.txt'] 5 6 7 #读文件 8 with open('a.txt',mode='r',encoding='utf8') as f: 9 o = f.read() 10 print(o) 11 结果:数据放好多假货常委会发货单黄齑淡饭就很好父亲和如何按厚度复活甲横槊赋诗 12 13 14 #写文件 15 with open('new_file.csv',mode='w',encoding='utf8') as f: 16 w = f.write('I love python\nI am beautiful') 17 print(os.listdir()) #结果:['a.txt', 'new_file.csv'] 18 19 with open('new_file.csv',mode='r',encoding='utf8') as f: 20 print(f.read()) 21 #结果: 22 I love python 23 I am beautiful
'r' | 读取(默认情况) |
'w' | 写入,并先截断文件 |
'x' | 排它性创建,如果文件已存在则失效 |
'a' | 写入,如果文件存在则在末尾追加 |
'b' | 二进制模式 |
't' | 文本模式(默认情况) |
'+' | 打开用于更新(读取与写入) |
17、链式操作
1 from operator import add,sub 2 def add_or_sub(a,b,oper): 3 return (add if oper=="+" else sub)(a,b) 4 print(add_or_sub(3,4,'+')) #结果:7
18、提取文件后缀名、完整文件名
os.path.splitext()---->提取文件后缀名
os.path.split()---->提取完整文件名
其结果是tuple类型
1 #提取后缀名 2 import os 3 os.chdir('C:\\Users\\xhl\\Desktop\\ww') #结果:['a.txt', 'new_file.csv'] 4 print(os.path.splitext('C:\\Users\\xhl\\Desktop\\ww\\a.txt')) 5 #结果:('C:\\Users\\xhl\\Desktop\\ww\\a', '.txt') 6 7 #提取完整文件名 8 print(os.path.split('C:\\Users\\xhl\\Desktop\\ww\\a.txt')[-1]) 9 #结果:'a.txt'
19、将list等分成n组
ceil()--->向上舍入最为最接近的函数
1 from math import ceil 2 def divide_iter(lst,n): 3 if n<=0: 4 yield lst 5 return 6 i,div = 0, ceil(len(lst)/n) 7 while i<n: 8 yield lst[i*div:(i+1)*div] 9 i+=1 10 11 for group in divide_iter([1,2,3,4,5,6,7],3): 12 print(group) 13 14 结果: 15 [1, 2, 3] 16 [4, 5, 6] 17 [7]
20、python常用操作符总结(好用易忽略)
符号 | 用途 | 例子 |
/ | 返回浮点数 | 8/5--->1.6 |
// | 返回两数相除的整除部分 | 8/5--->1 |
% | 返回两数相除的余数 | 8%5--->3 |
** | 计算几次方 | 2*3--->8 |
_ | 交互模式下,上一次打印的表达式的值被赋值给变量_ |
2+3---->5 _+3---->8 |
““ | 打印串时无需转义字符 |
print("I'm a boy") 结果:I'm a boy |
'' | 打印串时需转义字符 |
print('I\'m a boy') 结果:I'm a boy |
一对双引号: 即"""或''' |
跨行自动连续输入字符串 |
print("""yiduhdsjhjdj 结果:yiduhdsjhjdj |