一、运算符与流程控制

1.输入两个整数,打印较大的那个值
2.输入三个整数,按照从小到大的顺序打印
3.输入一个三位数,打印其个位、十位、百位上的数
4.输入一个年份,判断是否为闰年,是打印一句话,不是打印另一句话
5.输入一个整数,判断其是否既能被3整除,又能被5整除

二、循环

1.计算1~100之间所有整数的和
2.打印字符a~z
3.打印字符Z~A
4.循环输入10个字符,大写转为小写,小写转为大写,其他字符不处理
5.思考:循环能否嵌套,想一想其应用场景及执行流程

三、循环for-in

  • 示例1:遍历字符串

    s = 'I love you more than i can say'
    for i in s:
       print(i)

  • 示例2:遍历列表l = ['鹅鹅鹅', '曲项向天歌', '锄禾日当午', '春种一粒粟']

    for i in l:
       print(i)

    # 可以获取下表,enumerate每次循环可以得到下表及元素
    for i, v in enumerate(l):
       print(i, v)

  • 示例3:遍历字典

    d = {'a':'apple', 'b':'banana', 'c':'car', 'd': 'desk'}

    for key in d:
       # 遍历字典时遍历的是键
       print(key, d.get(key))

    # for key, value in d.items():
    # 上下两种方式等价 d.items() <=> dict.items(d)
    for key, value in dict.items(d):
       print(key, value)

多重循环

  • 示例1:从终端输入一个整数,打印如下图形:

n = int(input('请输入一个整数:'))

'''
1
1 2
1 2 3
1 2 3 4
...
1 2 3 4 ... n
'''

'''
j = 1
while j <= n:
  i = 1
  while i <= j:
      print(i, end=' ')
      i += 1
  print()
  j += 1
'''

for i in range(1, n+1):
   for j in range(1, i+1):
       print(j, end=' ')
   print()

  • 示例2:打印九九乘法表

for i in range(1, 10):
   for j in range(1, i+1):
       print('{}x{}={}'.format(j, i, j*i), end=' ')
   print()

  • 示例3:列表排序(选择法)

l = [1, 9, 4, 2, 0, 8, 3, 7]

# 获取长度
n = len(l)

# 外层循环用来控制循环的圈数,每一圈可以确定一个元素的位置
# 确定n个元素起始只需要n-1圈即可
for i in range(n-1):
   # 内层循环用来比较大小交换元素,一圈确定一个元素
   for j in range(i+1, n):
       # 如果不合适
       if l[i] > l[j]:
           # 交换两个变量
           l[i], l[j] = l[j], l[i]

print(l)

    1. 使用冒泡法排序列表

      1.冒泡:每次比较相邻的两个元素,不合适就交换,依次向后,一圈下来可以确定一个元素
      2.需要使用双重循环,外层循环控制循环的圈数, 内层控制一圈怎么交换

    2. 遍历列表,打印:我叫xxx,今年yyy岁,我来自zzz,数据如下

      lt = [

      {'name':'小王', 'age':18, 'info':[('phone', '123'), ('dizhi', '广州')]},
        {'name':'小芳', 'age':19, 'info':[('phone', '789'), ('dizhi', '深圳')]},
        {'name':'小杜', 'age':22, 'info':[('phone', '567'), ('dizhi', '北京')]},
        {'name':'小孟', 'age':28, 'info':[('phone', '000'), ('dizhi', '上海')]},
        {'name':'小乔', 'age':26, 'info':[('phone', '111'), ('dizhi', '河南')]},
      ]

    3. 从终端输入两个整数m,n,打印m*n的表格,如:2,5,打印如下效果

      1 2 3 4 5
      6 7 8 9 10

四、函数基础

  • 前面所有的练习,能用函数的就封装成函数

  • 封装函数:生成随机的字符串,参数:长度(默认为4)、类型(默认为0)

  • 试着查找并学习各种数据类型相关的函数

五、匿名函数

  • 示例1:比较两个数的大小

    def calc(a, b, func):
       return func(a, b)
       
    # mul = lambda x, y: x*y
    # print(calc(3, 5, mul))
    print(calc(3, 5, lambda x,y:x*y))

  • 示例2:对字典排序l = [

    {'name':'xiaowang', 'age':15, 'height':150},

    {'name':'xiaodu', 'age':14, 'height':145},

    {'name':'xiaopang', 'age':12, 'height':140},

    {'name':'banhua', 'age':13, 'height':155},

    ]

    # def d_key(d):

    #     return d['age']

    # l.sort(key=d_key)

    # 当列表中的元素无法直接比较大小时,需要传递参数key

    # key是一个函数,接受元素作为参数,返回用于比较的项

    l.sort(key=lambda x:x['height'])

    for i in l:

    print(i)

  • 练习:

    • 试着自己封装一个列表的sort函数,接受参数:排序对象、key、reverse

六、函数基础

  • 使用random自己实现randint

  • 实现一个简单的计算器,参数在启动程序时输入

  • 实现(int)函数:传入'12345',返回12345

  • 实现(str)函数:传入12345,返回'12345'

  • 号码归属地查询:

    5582|1860101|010|北京市|北京联通GSM卡
    5583|1860100|010|北京市|北京联通GSM卡
    5584|1368141|010|北京市|北京移动神州行卡
    5585|1860111|010|北京市|北京联通GSM卡
    5586|1358198|010|北京市|北京移动动感地带卡
    5587|1361139|010|北京市|北京移动预付费卡
    5588|1361138|010|北京市|北京移动神州行卡
    5591|1360110|010|北京市|北京移动全球通卡
    5748|1364110|010|北京市|北京移动神州行卡
    10186|1581584|020|广东省广州市|广东移动全球通卡
    15046|1391897|021|上海市|上海移动全球通卡
    17250|1502207|022|天津市|天津移动全球通卡
    21137|1345272|023|重庆市万州|重庆移动大众卡
    22700|1347812|024|辽宁省沈阳市|辽宁移动大众卡
    24256|1377065|025|江苏省南京市|江苏移动全球通卡
    26360|1898606|027|湖北省武汉市|湖北电信CDMA卡
    28709|1860802|028|四川省成都市|四川联通GSM卡
    30641|1552961|029|陕西省西安市|陕西联通GSM卡
    31700|1563007|0310|河北省邯郸市|河北联通GSM卡
    33360|1583396|0311|河北省石家庄市|河北移动全球通卡
    34825|1508122|0312|河北省保定市|河北移动全球通卡
    35363|1551235|0313|河北省张家口|河北联通GSM卡
    37700|1331326|0316|河北省廊坊市|河北电信CDMA卡
    43500|1350358|0358|山西省吕梁市|山西移动全球通卡
    43908|1553625|0359|山西省运城市|山西联通GSM卡
    44521|1335360|0370|河南省商丘市|河南电信CDMA卡
    50078|1509369|0378|河南省开封市|河南移动全球通卡
    53603|1583981|0398|河南省三门峡|河南移动全球通卡
    53916|1335897|0410|辽宁省铁岭市|辽宁电信CDMA卡
    55248|1554254|0411|辽宁省大连市|辽宁联通GSM卡
    58618|1374272|0427|辽宁省盘锦市|辽宁移动全球通卡
    58932|1554183|0429|辽宁省葫芦岛|辽宁联通GSM卡
    60268|1340475|0431|吉林省长春市|吉林移动大众卡

  • 歌词解析(不强制)

    [ti:蓝莲花]
    [ar:许巍]
    [al:留声十年绝版青春北京演唱会]
    [00:-01.70]蓝莲花
    [00:-00.70]演唱:许巍
    [00:00.00]
    [00:00.70]没有什么能够阻挡
    [00:06.01]你对自由的向往
    [00:11.43]天马行空的生涯
    [00:16.99]你的心了无牵挂
    [00:21.20]
    [02:11.55][01:50.60][00:22.63]穿过幽暗的岁月
    [02:16.93][01:55.60][00:27.81]也曾感到彷徨
    [02:22.21][02:01.09][00:33.13]当你低头的瞬间
    [02:27.62][02:06.33][00:38.32]才发觉脚下的路
    [02:31.64][02:10.23][00:42.37]
    [02:32.97][00:43.79]心中那自由的世界
    [02:38.23][00:49.50]如此的清澈高远
    [02:43.30][00:54.31]盛开着永不凋零
    [02:47.70][00:58.50]蓝莲花
    [02:53.95][03:00.06][01:05.41]

七、递归函数

  • 求阶乘

  • 斐波那契数列(1,1,2,3,5,8,13,21,34,...)

八、高级函数

  • 处理一个元素为字符串的列表,要求将字符串两边的空白去掉,然后首字母大写

  • 求列表中所有元素的乘积

  • 提取奇数,并且能被3整除的元素

九、目录操作

  • 实现一个拷贝文件的功能,提醒:要考虑超大文件问题,如:依次读取1024字节,循环读取

    1. import os
    2.  
    3. # 拷贝文件
    4. def copy(src, dst):
    5. # 此处应该有健壮性判断
    6. if os.path.abspath(src) == os.path.abspath(dst):
    7. print('源文件与目标地址相同,无法拷贝')
    8. return
    9.  
    10. # 判断是否是目录
    11. if os.path.isdir(src):
    12. print('源文件是目录文件,无法拷贝')
    13. return
    14.  
    15. # 拷贝的目标地址是目录时(没有指定文件名)
    16. if os.path.isdir(dst):
    17. # 提取源文件的文件名
    18. src_name = os.path.basename(src)
    19. # 拼接目录文件名
    20. dst = os.path.join(dst, src_name)
    21.  
    22. # 打开源文件
    23. src_fp = open(src, 'r')
    24. # 打开目标文件
    25. dst_fp = open(dst, 'w')
    26. # 读取依次内容
    27. content = src_fp.read(1024)
    28. while len(content):
    29. # 写入目标文件
    30. dst_fp.write(content)
    31. # 循环读取内容
    32. content = src_fp.read(1024)
    33. # 关闭源文件
    34. src_fp.close()
    35. # 关闭目标文件
    36. dst_fp.close()
    37.  
    38. copy('test.txt', 'abc/123.py')
  • 递归删除一个文件夹

    1. import os
    2.  
    3. def remove(file):
    4. # 判断是否存在
    5. if not os.path.exists(file):
    6. print('文件不存在,无法删除')
    7. return
    8.  
    9. # 删除普通文件
    10. if os.path.isfile(file):
    11. os.remove(file)
    12. return
    13.  
    14. # 是目录,递归删除
    15. dirs = os.listdir(file)
    16. for f in dirs:
    17. # 拼接文件名
    18. file_name = os.path.join(file, f)
    19. if os.path.isfile(file_name): # 是普通文件
    20. os.remove(file_name)
    21. else: # 是目录文件
    22. remove(file_name)
    23. # 删除空目录
    24. os.rmdir(file)
    25.  
    26. remove('abc')
  • 统计一个文件夹的大小

    1. import os
    2.  
    3. def size(file):
    4. # 判断文件是否存在
    5. if not os.path.exists(file):
    6. print('文件不存在,无法计算大小')
    7. return None
    8.  
    9. # 是普通文件
    10. if os.path.isfile(file):
    11. return os.path.getsize(file)
    12.  
    13. # 是目录文件,递归遍历统计
    14. total = 0
    15. dirs = os.listdir(file)
    16. for f in dirs:
    17. file_name = os.path.join(file, f)
    18. if os.path.isfile(file_name):
    19. total += os.path.getsize(file_name)
    20. else:
    21. total += size(file_name)
    22. return total
    23.  
    24. print(size('C:/Apache24/htdocs/code/day10/01-lianxi/'))
  • 拷贝一个文件夹

    1. import os
    2.  
    3. # 拷贝文件
    4. def copy(src, dst):
    5. # 此处应该有健壮性判断
    6. if os.path.abspath(src) == os.path.abspath(dst):
    7. print('源文件与目标地址相同,无法拷贝')
    8. return
    9.  
    10. # 判断是否是目录
    11. if os.path.isdir(src):
    12. print('源文件是目录文件,无法拷贝')
    13. return
    14.  
    15. # 拷贝的目标地址是目录时(没有指定文件名)
    16. if os.path.isdir(dst):
    17. # 提取源文件的文件名
    18. src_name = os.path.basename(src)
    19. # 拼接目录文件名
    20. dst = os.path.join(dst, src_name)
    21.  
    22. # 打开源文件
    23. src_fp = open(src, 'r')
    24. # 打开目标文件
    25. dst_fp = open(dst, 'w')
    26. # 读取依次内容
    27. content = src_fp.read(1024)
    28. while len(content):
    29. # 写入目标文件
    30. dst_fp.write(content)
    31. # 循环读取内容
    32. content = src_fp.read(1024)
    33. # 关闭源文件
    34. src_fp.close()
    35. # 关闭目标文件
    36. dst_fp.close()
    37.  
    38. # copy('test.txt', 'abc/123.py')
    39.  
    40. def copy_dir(src, dst):
    41. if os.path.abspath(src) == os.path.abspath(dst):
    42. print('源文件与目标地址相同,无法拷贝')
    43. return
    44.  
    45. if os.path.isfile(src):
    46. print(src, '源文件不是目录,无法拷贝')
    47. return
    48.  
    49. # 目标地址不存在
    50. if not os.path.exists(dst):
    51. os.makedirs(dst)
    52.  
    53. # 判断目标地址是否是目录
    54. if not os.path.isdir(dst):
    55. print('目标地址不是目录,无法拷贝')
    56. return
    57.  
    58. # 目标地址是目录,递归拷贝
    59. dirs = os.listdir(src)
    60.  
    61. for f in dirs:
    62. src_file = os.path.join(src, f)
    63. dst_file = os.path.join(dst, f)
    64. if os.path.isfile(src_file):
    65. copy(src_file, dst_file)
    66. else:
    67. copy_dir(src_file, dst_file)
    68.  
    69. copy_dir('a', 'c/a')
  • 移动一个文件夹 

    1. import os
    2. def move(src, dst):
    3. if os.path.abspath(src) == os.path.abspath(dst):
    4. print('源文件与目标地址相同,无法拷贝')
    5. return
    6.  
    7. if os.path.isfile(src): # 普通文件
    8. src_fp = open(src, 'r')
    9. dst_fp = open(dst, 'w')
    10. while True:
    11. content = src_fp.read(1024)
    12. if not content:
    13. break
    14. dst_fp.write(content)
    15. src_fp.close()
    16. dst_fp.close()
    17.  
    18. # 删除源文件
    19. os.remove(src)
    20. else: # 目录
    21. if not os.path.exists(dst):
    22. os.makedirs(dst)
    23.  
    24. dirs = os.listdir(src)
    25. for f in dirs:
    26. src_file = os.path.join(src, f)
    27. dst_file = os.path.join(dst, f)
    28. move(src_file, dst_file)
    29. # 删除源目录文件
    30. os.rmdir(src)
    31.  
    32. # move('test.py', 'test2.py')
    33. move('a', 'c')
  • 目录整理

    •   一个目录中有各种文件,也有文件夹

    •   将所有的文件夹统一放到dir目录下

    •   将没有后缀的文件统一放到others目录下将有后缀的文件放到后缀名大写的文件夹下

    •   # 处理前
      test/
        dir1/
        dir2/
        1.py
        2.py
        3.txt
        4.pdf
        123
        456

      # 处理后
      test/
        DIR/
            dir1/
            dir2/
        PY/
            1.py
            2.py
        TXT/
            3.txt
        PDF/
            4.pdf
        OTHERS/
            123
            456   

  1. import os
  2. import shutil
  3.  
  4. def deal(dir):
  5. if not os.path.isdir(dir):
  6. print(dir, '不是目录,无法整理')
  7. return
  8. dirs = os.listdir(dir)
  9.  
  10. for f in dirs:
  11. # 拼接文件名
  12. file_name = os.path.join(dir, f)
  13. # 分类处理
  14. if os.path.isdir(file_name): # 是目录
  15. # 拼接DIRS目录
  16. DIRS = os.path.join(dir, 'DIRS')
  17. # DIRS目录不存在则创建
  18. if not os.path.exists(DIRS):
  19. os.mkdir(DIRS)
  20. shutil.move(file_name, DIRS)
  21. else: # 是文件
  22. # 按照'.'进行切割
  23. lt = file_name.rsplit('.', 1)
  24. # 判断是否有后缀
  25. if len(lt) == 1: # 没有后缀
  26. OTHERS = os.path.join(dir, 'OTHERS')
  27. if not os.path.exists(OTHERS):
  28. os.mkdir(OTHERS)
  29. shutil.move(file_name, OTHERS)
  30. else: # 有后缀
  31. SUFFIX = os.path.join(dir, lt[1].upper())
  32. if not os.path.exists(SUFFIX):
  33. os.mkdir(SUFFIX)
  34. shutil.move(file_name, SUFFIX)
  35.  
  36. deal('test')

python 练习合集一的更多相关文章

  1. python知识合集

    python安装包管理  http://www.cnblogs.com/wilber2013/p/4769467.html python pip安装源管理:pypi官网的源不太好,网速慢,容易造成包下 ...

  2. python资源合集

    Python 官网: https://www.python.org/ Python2.7 doc: https://docs.python.org/2/ Python Package User Gui ...

  3. python 时间合集 一

    **以下内容均为我个人的理解,如果发现错误或者疑问可以联系我共同探讨**#### python中4种时间表示形式:1.格式化时间字符串 2.时间戳 3.时间元祖 4.时间对象- string_time ...

  4. Python——模块合集

    标准库模块 ● Python——OS(系统操作模块) ● Python——MD5(加密模块) ● Python——time(时间模块) ● Python——re(正则表达式) ● Python——sy ...

  5. Python爬虫合集:花6k学习爬虫,终于知道爬虫能干嘛了

    爬虫Ⅰ:爬虫的基础知识 爬虫的基础知识使用实例.应用技巧.基本知识点总结和需要注意事项 爬虫初始: 爬虫: + Request + Scrapy 数据分析+机器学习 + numpy,pandas,ma ...

  6. python包合集-cffi

    一.cffi cffi是连接Python与c的桥梁,可实现在Python中调用c文件.cffi为c语言的外部接口,在Python中使用该接口可以实现在Python中使用外部c文件的数据结构及函数. 二 ...

  7. python包合集-shutil

    一.简介 shutil是 python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查看等方法,还提供了对文件以及目录的路径操作.shutil模块提供了移动 ...

  8. python包合集-argparse

    一.argparse简介 argparse 是 python 自带的命令行参数解析包,可以用来方便的服务命令行参数,使用之前需要先导入包 import argparse 二.简单案例 简单使用,创建一 ...

  9. 如何自学 Python(干货合集)

    http://wenku.baidu.com/view/5108f974192e45361066f583.html

随机推荐

  1. react 路由

    react 提供了实现路由的方式,不过需要我们下载插件 react-router-dom 当我们下载好了插件,然后我们可以通过 import {} from 'react-router-dom' 来引 ...

  2. [Java]算术表达式组建二叉树,再由二叉树得到算式的后序和中序表达式

    Entry类: package com.hy; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...

  3. 私有npm计划

    为什么要建立私有npm 提高代码复用程度,增加团队沉淀 剥离项目依赖,工程更加轻量 引用全量更新,支持版本降级 建立模块文档,降低上手难度 全员把关代码质量,无需重复测试 构建工具已成趋势,优化发布流 ...

  4. 在visual studio工程设置中增加宏定义的方法

    在Solution Explorer中鼠标右键点击其project之后,Configuration(Release)->Configuration Propertity ->C++ -&g ...

  5. 使用Statement执行DML和DQL语句

    import com.loaderman.util.JdbcUtil; import java.sql.Connection; import java.sql.DriverManager; impor ...

  6. 190628 - 解决新版本LastPass没有谷歌套件时打开就闪退的问题.md

    目录 解决新版本LastPass没有谷歌套件时打开就闪退的问题 可用解决方案 可用解决方案3 可用解决方案2 可用解决方案1 尝试安装 碰到的问题列表 问题现象 解决新版本LastPass没有谷歌套件 ...

  7. js上拉加载

    <ul class="u-f-log"> <li class="u-f-log-alone" v-for="item in log& ...

  8. 《Neural Networks and Deep Learning》课程笔记

    Lesson 1 Neural Network and Deep Learning 这篇文章其实是 Coursera 上吴恩达老师的深度学习专业课程的第一门课程的课程笔记. 参考了其他人的笔记继续归纳 ...

  9. 利用SQL语句查找某数据库中所有存储过程包含的内容(转)

    Use 数据库DECLARE @ProcName varchar(50)Create Table #tmpName(Content  varchar(2000))Create Table #tmp(P ...

  10. php composer 开发自己的包

    以往都是在项目直接写自己的包文件,并没有把他放在packagist上面,以composer来管理使用. 今天没事来整一下,供大家一起学习 一,在github和packagist分别注册自己的账号,这里 ...