学习Python必刷的100道经典练习题,没练等于白学

习题一:

  打印两数之和:

1 num1 = 45
2 num2 = 2
3 
4 sum = num1 + num2
5 
6 print(f"{num1}+{num2}={sum}" 
View Code

习题二:

  数字的阶乘:比如6的阶乘:6x5x4x3x2x1,3的阶乘3x2x1

 1 def jiecheng(number):
 2     result = 1
 3 
 4     while number>1:
 5         result *= number
 6         number -= 1
 7     return result
 8         
 9     
10 
11 print('jiecheng 6 =',jiecheng(6))
12 print('jiecheng 3 =',jiecheng(3))
13 print('jiecheng 100 =',jiecheng(100))
View Code

习题三:

  算圆的面积:

1 import math
2 
3 def compute_area_of_circle(r):
4     return round(math.pi * r * r,2)
5 
6 print("area of 2 is:",compute_area_of_circle(2))
View Code

习题四;

  区间内的所有素数:输入开始和结束数字,打印区间内所有素数,比如,输入11和25,打印11-25直接所有素数,包括25.

  素数,如果数字只能被1和自己整除就是素数,否则不是素数,比如3室素数,4不是。

 1 def panduan(number):
 2     '''判断一个数是否为素数'''
 3     if number in [1,2]:
 4         return True
 5     for i in range(2,number):
 6         if number % i == 0:
 7             return False
 8     return True
 9 
10 
11 
12 def sushu(begin,end):
13     '''获取一个区间数据'''
14     for number in range(begin,end + 1):
15         if panduan(number):
16             print(f"{number} is a prime")
17 
18 
19 sushu(11,25)
View Code

习题五:

  求前N个数字的平方和,比如5的平方和,1的平方+2的平方+3的平方+4的平方+5的平方

方法一:

1 def pingfang(number):
2     result = 0
3     while number >= 1:
4         result += number * number
5         number -= 1
6     return result
7                 
8 
9 print(pingfang(5))
View Code

方法二:

1 def pingfang(number):
2     result = 0
3     for i in range(1,number + 1):
4         result += i * i
5     return result
6                 
7 
8 print(pingfang(5))
View Code

习题六:

  计算列表数字的和,比如input列表[1,2,3,4]说是列表[17,5,3,5]

方法一:

 1 def list_sum(list_name):
 2     sum = 0
 3     for i in range(len(list_name)):
 4         sum += list_name[i]
 5     return sum
 6     
 7 
 8 
 9 list1 = [1,2,3,4]
10 list2 = [17,5,3,5]
11 
12 print("list1 sum is:",list_sum(list1))
13 print("list2 sum is:",list_sum(list2))
View Code

方法二:

 1 def list_sum(list_name):
 2     sum = 0
 3     for i in list_name:
 4         sum += i
 5     return sum
 6     
 7 
 8 
 9 list1 = [1,2,3,4]
10 list2 = [17,5,3,5]
11 
12 print("list1 sum is:",list_sum(list1))
13 print("list2 sum is:",list_sum(list2))
View Code

习题七:

  计算数字范围内所有偶数

  输入开始和结束值,不包含结束值,得到所有偶数,偶数,能被数字2整除的整数,是2的倍数,

  比如4-15直接的偶数

方法一

1 def calc_integer(begin,end):
2     result = []
3     for i in range(begin,end):
4         if i % 2 == 0:
5             result.append(i)
6     return result
7 
8 print(calc_integer(4,15))
View Code

方法二,采用列表推导式

1 begin = 4
2 end = 15
3 date = [result for result in range(begin,end) if result % 2 ==0]
4 print(date)
View Code

习题八:

  移除列表中多个元素,比如

  输入原始列表:[3,5,7,9,11,13]

  移除原始:[7,11]

  返回:[3,5,9,13]

 1 def remove_list(lista,listb):
 2     for i in listb:
 3         if i in lista:
 4             lista.remove(i)
 5         else:
 6             pass
 7             
 8     print(lista)
 9 
10 
11 list1 = [3,5,7,9,11,13]
12 list2 = [7,11,15]
13 
14 
15 remove_list(list1,list2)
View Code

习题九:

   对列表元素进行去重,

  输入,包含重复元素的原始列表:[10,20,30,10,20]

  返回:[10,20,30]

方法一:

 1 def update_list(list_name):
 2     update_list = []
 3     for i in list_name:
 4         if i not in update_list:
 5             update_list.append(i)
 6     return update_list
 7 
 8 
 9 list1 = [10,20,30,10,20]
10 print(f"yuanshi list is {list1},update list is ",update_list(list1))
View Code

方法二:

1 list1 = [10,20,30,10,20]
2 
3 print(f"yuanshi list is {list1},update list is ",list(set(list1)))
View Code

习题十:

  怎样对简单列表元素排序:

  怎样对简单列表排序?

  简单列表:元素类型不是复合类型(列表、元素、字典)

  形式1:[20,50,10,40,30]

        形式2:['bb','ee','aa','dd','cc']
  知识点:

  怎样原地排序?怎样不改变原列表排序?

  怎样指定是升序还是降序排序?

1 list1 = [20,50,10,40,30]
2 #这种情况对list1内存进行了改变,
3 list1.sort()
4 
5 print(f"list1 is {list1}")
View Code

  不改变原始列表

1 list1 = [20,50,10,40,30]
2 #增加reverse参数,是将数据进行降序
3 list2 = sorted(list1,reverse=True)
4 
5 print(f"list1 is {list1}")
6 print(f"list2 is {list2}")
View Code

 

习题十一

  怎样实现学生成绩排序

  学生成绩数据格式:复杂列表,元素是字典或是元组:

  [

  {'sno':101,'sname':"小张",'sgrade':88},

  {'sno':102,'sname':"小王",'sgrade':77},

  {'sno':103,'sname':"小李",'sgrade':99},

  {'sno':104,'sname':"小赵",'sgrade':66}

]

 1 students = [
 2     {'sno':101,'sname':"小张",'sgrade':88},
 3     {'sno':102,'sname':"小王",'sgrade':77},
 4     {'sno':103,'sname':"小李",'sgrade':99},
 5     {'sno':104,'sname':"小赵",'sgrade':66}
 6 ]
 7 
 8 students_sort = sorted(students,key=lambda x:x['sgrade'])
 9 
10 print(students)
11 
12 print(students_sort)
View Code

习题十二:

  读取成绩文件排序数据

  输入文件:

    三列:学号、姓名、成绩

    列之间用逗号分隔,比如“101,小张,88”

    行之间用\n换行分割

  处理:

    读取文件,按成绩倒序排列

  输出:

    排序后的三列数据

 

 代码内容

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 def read_file():
 6     # 将文件读取内容放到一个空列表中
 7     result = []
 8     with open(r"./students.txt","r",encoding="UTF-8") as fin:
 9         for line in fin:
10             line = line[:-1]
11             result.append(line.split(','))
12         return result
13 
14 def sort_data(datas):
15     result = sorted(datas,key=lambda x: int(x[2]),reverse=True)
16     return result
17 
18 def write_newfile(datas):
19     with open(r"./students_updata.txt","w",encoding="UTF-8") as fout:
20         for data in datas:
21             fout.write(",".join(data) + "\n")
22 
23 #第一步:读取文件
24 datas = read_file()
25 #print(datas)
26 #第二步:对文件进行排序
27 datas = sort_data(datas)
28 #print(datas)
29 #第三版:将排序后的内容写入新文件
30 write_newfile(datas)
View Code

输出内容

 习题十三

  统计学生成绩高分低分平均分

  输入文件:

  三列:学号、姓名、成绩

  列之间用逗号分隔,比如“101,小张,88”

  行之间用\n换行分割

  输出:最高分、最低分、平均分

 

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 def calc_score():
 6     #将读取成绩的文件内放到一个空列表中
 7     result = []
 8     #读取成绩文件内容
 9     with open(r'./students.txt','r',encoding='UTF-8') as fin:
10         for line in fin:
11             line = line[:-1]
12             fields = (line.split(','))
13             result.append(int(fields[2]))
14     max_score = max(result)
15     min_score = min(result)
16     avg_score = round(sum(result) / len(result),2)
17 
18     return max_score,min_score,avg_score
19 
20 
21 
22 max_score,min_score,avg_score = calc_score()
23 print(f"max_score={max_score},min_score={min_score},avg_score={avg_score}")
View Code

习题十四:

  统计英语文章每个单词的出现次数

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 words_count = {}
 6 
 7 with open(r'./Enginsh_file.txt','r',encoding='UTF-8') as fin:
 8     for line in fin:
 9         line = line[:-1]
10         words = line.split()
11         for word in words:
12             if word.lower() not in words_count:
13                 words_count[word.lower()] = 0
14             words_count[word.lower()] +=1
15 
16 print(words_count.items())
17 
18 print(sorted(words_count.items(),key=lambda x: x[1],reverse=True)[:10])
View Code

习题十五:

  统计目录下所有文件大小:

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 import os
 6 #获取单个文件大小
 7 #print(os.path.getsize("students.txt"))
 8 
 9 #获取目录总大小
10 
11 sum_size = 0
12 for file in os.listdir("."):
13     if os.path.isfile(file):
14         sum_size += os.path.getsize(file)
15 
16 print("all size of dir:",sum_size/1000)
View Code

习题十六:

  按文件后缀名整理文件夹

  小知识:怎样获取文件的后缀名?

  import os

  os.path.splitext('/path/to/aaa.mp3')

  输出:(‘/path/to/aaa’,'mp3')

  小知识:怎样移动文件

  import shutil

  shutil.move("aaa.txt","dir/bbb.foo")

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 import os
 6 import shutil
 7 #指定文件的路径
 8 dir = r"D:\PYTHON\Test\DYA2\test"
 9 
10 for file in os.listdir(dir):    #读取路径下的文件和目录
11     ext = os.path.splitext(file)[1][1:]     #获取文件后缀
12     if not os.path.isdir(f"{dir}/{ext}"):   #判断目录是否存在,不存在测创建
13         os.mkdir(f"{dir}/{ext}")
14 
15     source_path = f"{dir}/{file}"
16     target_path = f"{dir}/{ext}/{file}"
17 
18     shutil.move(source_path,target_path)    #将源目录文件移动到新目录中
View Code

 习题十七

  递归搜索目录找出最大文件

    python怎样递归搜索目录?

  import os

  for root,dirs,files in os.walk('python/Lib/email'):

    # root代表当前目录

    # dirs代表当前目录下子目录

    # files代表当前目录下普通文件

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 import os
 6 
 7 search_path = r"D:\国美GOME"
 8 
 9 result_path = []
10 
11 for root,dirs,files in os.walk(search_path):
12     for file in files:    #循环目录下所有文件
13         if file.endswith(".py"): #对.py的文件进行判断
14             file_path = f"{root}/{file}" #将整个文件路径赋值为变量
15             #print(file_path)
16             result_path.append((file_path,os.path.getsize(file_path) / 1000)) #将文件全路径和文件大小保存为元组放到列表中
17 
18 
19 print(
20     sorted(result_path,key=lambda x: x[1],reverse=True)[:10] #将文件类别通过sorted函数进行排序取前十个
21 )
View Code

 习题十八

  计算不同课程的最高分最低分平均分,本题解题思路为使用字典,将学科作为key,而成绩作为value存在列表中。

  如下为文件内容示例:

 

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 #定义一个空字典
 6 
 7 subject_score = {}
 8 
 9 #读取成绩文件
10 
11 with open(r"./coser_input.txt",encoding="UTF-8") as fin:
12     for line in fin:
13         line = line[:-1]
14         subject,son,sname,score = line.split(",")
15 
16         if subject not in subject_score:
17             subject_score[subject] = []
18         subject_score[subject].append(int(score))
19 
20 #print(subject_score)
21 
22 #读取字典内容,对成绩列表进行最大值,最小值,平均值列取
23 
24 for subject,score in subject_score.items():
25     print(
26         subject,
27         max(score),
28         min(score),
29         sum(score) / len(score)
30     )
View Code

 习题十九

  实现不同文件的数据关联,并将关联后的文件更新到新的文件

如,第一个文件内容:

第二个文件内容:

 将第一个文件的老师名字增加到第二个文件中

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 tencher_dic = {}
 6 with open(r"./tencher.txt",encoding="UTF-8") as fin:
 7     for line in fin:
 8         line = line[:-1]
 9         subject,tencher = line.split(",")
10         if subject not in tencher_dic:
11             tencher_dic[subject] = tencher
12 
13 #print(tencher_dic)
14 
15 
16 with open(r"./coser_input.txt",encoding="UTF-8") as fin:
17     for line in fin:
18         line = line[:-1]
19         subject,son,sname,score = line.split(",")
20         tencher = tencher_dic.get(subject)
21         print(subject,son,sname,score,tencher)
View Code

 习题二十

  统计每个兴趣的学生人数,如下图所示,统计喜欢篮球的人数,喜欢羽毛球的人数。。。

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 like_count = {}
 6 
 7 with open(r"./students.txt",encoding="UTF-8") as fin:
 8     for line in fin:
 9         line = line.strip()
10         name,likes = line.split("  ")
11         like_list = likes.split(",")
12         for like in like_list:
13             if like not in like_count:
14                 like_count[like] = 0
15             like_count[like] += 1
16 
17 print(like_count)
View Code

 习题二十一

  判断一个日期,输入间隔日期,判断几天前的日期是多少?

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 import datetime
 6 
 7 def get_diff_days(pdate,days):
 8     pdate_obj = datetime.datetime.strptime(pdate,"%Y-%m-%d")
 9     time_gap = datetime.timedelta(days=days)
10     pdate_result = pdate_obj - time_gap
11     return pdate_result.strftime("%Y-%m-%d")
12 
13 print(get_diff_days("2022-08-3",1))
14 print(get_diff_days("2022-08-3",5))
15 print(get_diff_days("2022-08-3",7))
View Code

习题二十二

  计算开始和结束范围的所有日期

  输入:

    开始日期,例如2021-04-28

              结束日志,例如2021-05-03

       输出:

    [

                      2021-04-28,2021-04-29,2021-04-30,2021-05-01,2021-05-02,2021-05-03

              ]

   知识点:

    怎样给日期加1天?

    怎样比较两个日期?

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 import datetime
 5 
 6 def get_date_range(begin_date,end_date):
 7     date_list = []
 8     while begin_date <= end_date:
 9         date_list.append(begin_date)
10         begin_date_obj = datetime.datetime.strptime(begin_date,"%Y-%m-%d")
11         days_timedelta = datetime.timedelta(days=1)
12         begin_date = (begin_date_obj + days_timedelta).strftime("%Y-%m-%d")
13     return date_list
14     
15 begin_date = "2022-07-28"
16 end_date = "2022-08-03"
17 date_list = get_date_range(begin_date,end_date)
18 print(date_list)
View Code

 习题二十三

  将unix时间转换为日期时间

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 import datetime
 5 
 6 unix_time = 1659510802
 7 
 8 datetime_obj = datetime.datetime.fromtimestamp(unix_time)
 9 datetime_str = datetime_obj.strftime("%Y-%m-%d %H:%M:%S")
10 print(datetime_str)
View Code

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-06-25 16:00  摩天居士-谢烟客  阅读(1853)  评论(0编辑  收藏  举报