python笔记

以下为学python以来知识点及练习记录,用于个人知识点复习


DAY01-02 介绍、变量、格式化输出

1.python是编译型语言还是解释性语言,两种类型的语言的程序有什么不同?

答:解释型。

py文件”编译“完的结果是字节码,cpu还是执行不了,依然借助Python虚拟机解释执行。

但放宽了说,将高级语言转换为比它低级的语言再去解释执行(比如将源码翻译为字节码),也可以称之为编译过程的话,那么Python就不仅仅是解释型的语言

2.python相对与其他语言有什么优点和缺点?

优点:简单、易学、免费、开源、可移植性、解释性、面向对象、可拓展性、丰富的库、规范的代码

缺点:运行速度、国内市场小、中文资料匮乏、架构多

3.Python应用场景有哪些

web后端开发、网络爬虫与数据分析、人工智能等

4.注释:提高代码可读性

分为单行注释#                快捷键:    ctr+/

多行注释"""  """

5.变量:可用来存储数据,如字符串、数字等,可复用

每一个变量都存储这一种类型的数据,该数据的类型就是该变量的类型

6.标示符可以理解成是一套命名规则

常见的标示符的命名规则: 大驼峰命名法、小驼峰命名法,下划线连接命名法

7.格式化是指将数据按照预先定义好的格式处理数据的结构

格式化输出可以让开发者很方便的处理数据的,组装数据,然后将其输出

8.python交互模式:终端输入python

linux上通过vi、sublime、gedit等编辑器实现,文件后缀,py

9.注释单行#

多行

"""

注释内容       

"""

10.变量的命名规则

      1.只能由下划线、数字和字母组成

      2.不能以数字开头

      3.不能与关键字同名

      4.应尽量避免与引用到的函数或库同名

注意,通过以下命令可以查看 Python 中的关键字

import keyword

print(keyword.kwlist)

# 判断是不是关键字

print(keyword.iskeyword('None'))

out(1): True

11.python的数据类型:

数字型: 整型 (int)

            浮点型(float)

            布尔型(bool)

真 True 数学运算时表示 1

假 False 数学运算时表示 0

            复数型 (complex),基本不用

非数字型:

            字符串

            列表

            元组

            字典

12.进入python3交互模式,定义任意个变量,使用并查看其类型

>>> name="杜锦航"

>>> type(name)

<class 'str'>

>>>

13.大驼峰:

MyName="杜锦航"

小驼峰:

myName="杜锦航"

14.int(x)         将x转换为一个整数    

long(x )        将x转换为一个长整数    

float(x )               将x转换到一个浮点数    

complex(real [,imag ])  创建一个复数    

str(x )                 将对象 x 转换为字符串    

repr(x )                将对象 x 转换为表达式字符串    

eval(str )              用来计算在字符串中的有效Python表达式,并返回一个对象    

tuple(s )               将序列 s 转换为一个元组    

list(s )                将序列 s 转换为一个列表    

chr(x )                 将一个整数转换为一个字符    

unichr(x )              将一个整数转换为Unicode字符    

ord(x )                 将一个字符转换为它的整数值    

hex(x )                 将一个整数转换为一个十六进制字符串    

oct(x )                 将一个整数转换为一个八进制字符串   

15. 取商://

取余:%

16.>>> print(name)

杜锦航

>>> age=18

>>> height=173.00

>>> print("name is %s,age is %d,height is %.2f"%(name,age.height)

... )

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'int' object has no attribute 'height'

>>> print("name is %s,age is %d,height is %.02f"%(name,age.height)

... print("name is %s,age is %d,height is %.02f"%(name,age.height))

  File "<stdin>", line 2

    print("name is %s,age is %d,height is %.02f"%(name,age.height))

        ^

SyntaxError: invalid syntax

>>> print("name is %s,age is %d,height is %.02f"%(name,age.height))

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'int' object has no attribute 'height'

>>> print(height)

173.0

>>> print("name is %s,age is %d,height is %2f"%(name,age.height))

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'int' object has no attribute 'height'

>>> print("name is %s,age is %d,height is %f"%(name,age.height))

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'int' object has no attribute 'height'

>>> print("name is %s,age is %d,height is %f"%(name,age,height))

name is 杜锦航,age is 18,height is 173.000000

>>>

打错符号,,,,,,,查了半天

17.

"""

编写一个cart.py(打印名片)程序

运行程序后,分别输入姓名、性别、年龄、单位、联系方式等数据,并用变量分别接收

输入完成后,最后打印出姓名、性别、年龄、单位、联系方式等信息,输出的格式自行设定,尽量美观

输出需使用上格式化输出

"""

name = input('请输入姓名')

company = input('请输入公司')

title = input('请输入职位')

phone = input('请输入电话')

email = input('请输入邮箱')

print(company)

print("*" * 30)

print("姓名:%s" % name)

print("职位:%s" % title)

print("联系电话:%s" % phone)

print("邮箱:%s" % email)

print("*" * 30)

结果:

F:\python\python.exe F:/pycharm/project/day01/cart.py

请输入姓名杜锦航

请输入公司宇通

请输入职位液压工程师

请输入电话15734039106

请输入邮箱15734039106@163.com

宇通

******************************

姓名:杜锦航

职位:液压工程师

联系电话:15734039106

邮箱:15734039106@163.com

******************************

DAY03 条件语句

1.# 练习: 定义一个整数变量 age,编写代码判断年龄是否正确,要求人的年龄在 0-120 之间

age = 19

if age >= 0 and age <= 120:

    print("1")

else:

    print("2")

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!注意符号和字母必须英文格式输入!!!!!!!!!!!!!!!!!!!!!!!!!

2.random()函数

import random

import string

# 随机整数:

print random.randint(1,50)

# 随机选取0到100间的偶数:

print random.randrange(0, 101, 2)

# 随机浮点数:

print random.random()

print random.uniform(1, 10)

# 随机字符:

print random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')

# 多个字符中生成指定数量的随机字符:

print random.sample('zyxwvutsrqponmlkjihgfedcba',5)

# 从a-zA-Z0-9生成指定数量的随机字符:

ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))

print ran_str

# 多个字符中选取指定数量的字符组成新字符串:

print ''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5))

# 随机选取字符串:

print random.choice(['剪刀', '石头', '布'])

# 打乱排序

items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

print random.shuffle(items)

注意:输出需要print,试了好几次,忘了print,还纳闷怎么不出来随机数

DAY04 循环语句

1.

#!/usr/bin/python

# 定义一个行变量

row = 1

while row <= 5:

    print("*"*row)

    row += 1

2.在默认情况下,print 函数输出内容之后,会自动在内容末尾增加换行

如果不希望末尾增加换行,可以在 print 函数输出内容的后面增加 , end=""

其中 "" 中间可以指定 print 函数输出内容之后,继续希望显示的内容

语法格式如下:

# 向控制台输出内容结束之后,不会换行

print("*", end="")

# 单纯的换行

print("")

故,序号1也可:

#!/usr/bin/python

# 在控制台连续输出五行 *,每一行星号的数量依次递增

row = 1

while row <= 5:

    rol = 1

    while rol <= row:

        print("*",end="")

        rol += 1

    print("")

    row += 1

结果为:

F:\python\python.exe F:/pycharm/project/day01/XingXing.py

*

**

***

****

*****

3.九九乘法表

转义字符 描述

\ 反斜杠符号

\' 单引号

\" 双引号

\n 换行

\t 横向制表符

\r 回车

#!/usr/bin/python

# 在控制台连续输出五行 *,每一行星号的数量依次递增,把*换成行列相乘

row = 1

while row <= 9:

    rol = 1

    while rol <= row:

        print(("%d*%d=%d")%(rol,row,row*rol),end="\t")       #不换行         \t 对齐

    print("")        #手动换行

    row += 1

结果:

F:\python\python.exe F:/pycharm/project/day01/XingXing.py

1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

1*4=4 2*4=8 3*4=12 4*4=16

1*5=5 2*5=10 3*5=15 4*5=20 5*5=25

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

Process finished with exit code 0

4.运算符

运算符 描述                 实例

= 简单的赋值运算符     c = a + b 将 a + b 的运算结果赋值为 c

+= 加法赋值运算符     c += a 等效于 c = c + a

-= 减法赋值运算符     c -= a 等效于 c = c - a

*= 乘法赋值运算符     c *= a 等效于 c = c* a

/= 除法赋值运算符     c /= a 等效于 c = c / a

//= 取整除赋值运算符     c //= a 等效于 c = c // a

%= 取 模 (余数)赋值运算符 c %= a 等效于 c = c % a

**= 幂赋值运算符             c **= a 等效于 c = c** a

运算符优先级

运算符                         描述

**                                 幂 (最高优先级)

* / % //                         乘、除、取余数、取整除

+ -                                 加法、减法

<= < > >=                         比较运算符

== !=                         等于运算符

= %= /= //= -= += = *= 赋值运算符

not or and                 逻辑运算符

DAY05 列表、元祖

1.

列表用 [] 定义,数据 之间使用 , 分隔

例:a=[2,4,5]

b=['data','frog','python']

for 实现列表的遍历

例如:

for name in name_list:

    循环内部针对列表元素进行操作

    print(name)

2.

测量列表中元素的个数  len()

获取列表的某个元素     

列表[索引] 向列表中添加元素       append() 、 extend() 、 insert()

如何删除列表中的某个元素? del pop() remove()

如何修改列表中的某个元素? 直接根据索引来修改 列表[要修改的元素的索引] = 值

如何去查找列表中某个元素所对应的下标? 列表.index(元素)

升序排列:列表名.sort()

降序排列:列表名.sort(reverse=True)

3.

元组用 () 定义

例如:

a=(2,4,5)

b=('data','frog','python')

查询:

元组[索引]         根据索引取值,索引不存在会报错

元组.index(数据) 根据值查询索引,返回首次出现时的索引,没有查到会报错

元组.count(数据) 数据在元组中出现的次数

len(列表)                 元组长度

if 数据 in 元组:         检查元组中是否包含某元素

4.

使用 list 函数可以把元组转换成列表          list(元组)

使用 tuple 函数可以把列表转换成元组      tuple(列表)

5.

# 编写代码设计简易计算器,可以进行基本的加减乘除运算。

num1 = int(input("请输入第一个数字:"))

symbol = input("请输入运算符")

num2 = int(input("请输入第二个数字:"))

if symbol == "+":

    print("%d+%d=%d"%(num1,num2,num1*num2))

elif symbol == "-":

    print("%d-%d=%d"%(num1,num2,num1-num2))

elif symbol == "*":

    print("%d*%d=%d"%(num1,num2,num1*num2))

elif symbol == "/":

    print("%d/%d=%d"%(num1,num2,num1/num2))

else:

    print("请输入正确的运算符")

结果:

F:\python\python.exe F:/pycharm/project/day05/高级变量.py

请输入第一个数字:10

请输入运算符/

请输入第二个数字:5

10/5=2

Process finished with exit code 0

6.

# 使用while循环输出*

row = 1

while row <= 5:

    print("*"*row)

    row += 1

结果:

F:\python\python.exe F:/pycharm/project/day05/xingxing.py

*

**

***

****

*****

DAY06 字典

1.字典用 {key:value,...} 定义

例如:xiaoming = {"name": "小明",

                                "age": 18,

                                "gender": True,

                                "height": 1.75}

常用操作:

序号分类关键字 / 函数 / 方法说明

     1增加字典[键] = 数据键不存在,会添加键值对;键存在,会修改键值对的值

     2删除del 字典[键]删除指定的键值对

     字典.pop(键)删除指定键值对,返回被删除的值

     字典.clear清空字典

     3修改字典[键] = 数据键不存在,会添加键值对;键存在,会修改键值对的值

     字典.setdefault(键,数据)键值对不存在,添加键值对;存在则不做处理

     字典.update(字典2)取出字典2的键值对,键值对不存在,添加键值对;存在则修改值

     4查询字典[键]根据键取值,键值对不存在会报错

     字典.get(键)根据键取值,键值对不存在不会报错

     字典.keys()可进行遍历,获取所有键

     字典.values()可进行遍历,获取所有值

     字典.items()可进行遍历,获取所有(键,值)

2.字典应用场景

使用 多个键值对,存储 描述一个 物体 的相关信息 —— 描述更复杂的数据信息

将 多个字典 放在 一个列表 中,再进行遍历,在循环体内部针对每一个字典进行 相同的处理

字典的遍历:字典.keys()、字典.values()、字典.items()

3.字符串

注意:如果字符串内部需要使用 ",可以使用 ' 定义字符串

          如果字符串内部需要使用 ',可以使用 " 定义字符串

          可以使用 索引 获取一个字符串中 指定位置的字符,索引计数从 0 开始

          也可以使用 for 循环遍历 字符串中每一个字符

例:

string = "Hello Python"

for c in string:

    print(c, end="")

结果:

Hello Python

常用操作;

判断

方法说明

string.isalpha()如果 string 至少有一个字符并且所有字符都是字母则返回 True

string.isdecimal()如果 string 只包含数字则返回 True

string.islower()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True

string.isupper()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True

string.startswith(str)检查字符串是否是以 str 开头,是则返回 True

string.endswith(str)检查字符串是否是以 str 结束,是则返回 True

查找和替换

方法说明

string.find(str, start=0, end=len(string))检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1

string.rfind(str, start=0, end=len(string))类似于 find(),不过是从右边开始查找

string.index(str, start=0, end=len(string))跟 find() 方法类似,不过如果 str 不在 string 会报错

string.rindex(str, start=0, end=len(string))类似于 index(),不过是从右边开始

string.replace(old_str, new_str, num=string.count(old))返回一个新字符串,把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次

拆分和连接

方法说明

string.partition(str)返回元组,把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面)

string.rpartition(str)类似于 partition() 方法,不过是从右边开始查找

string.split(str="", num)返回列表,以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 '\r', '\t', '\n' 和空格

string.splitlines()返回列表,按照行('\r', '\n', '\r\n')分隔

string1 + string2拼接两个字符串

string.join(seq)返回字符串,以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

大小写转换

方法说明

string.lower()返回新字符串,转换 string 中所有大写字符为小写

string.upper()返回新字符串,转换 string 中的小写字母为大写

文本对齐

方法说明

string.ljust(width)返回新字符串,基于原字符串左对齐,并使用空格填充至长度 width

string.rjust(width)返回新字符串,基于原字符串右对齐,并使用空格填充至长度 width

string.center(width)返回新字符串,基于原字符串居中,并使用空格填充至长度 width

去除空白字符

方法说明

string.lstrip()返回新字符串,截掉 string 左边(开始)的空白字符

string.rstrip()返回新字符串,截掉 string 右边(末尾)的空白字符

string.strip()返回新字符串,截掉 string 左右两边的空白字符

4.切片

切片方法适用于字符串、列表、元组

字符串[开始索引:结束索引:步长]

注意:指定的区间属于左闭右开型 [开始索引, 结束索引) 对应

开始索引 <= 范围 < 结束索引

从头开始,开始索引 数字可以省略,冒号不能省略

到末尾结束,结束索引 数字和冒号都可以省略

步长默认为 1,如果元素连续,数字和冒号都可以省略

例如:

截取从 2 ~ 5 位置 的字符串

截取从 2 ~ 末尾 的字符串

截取从 开始 ~ 5 位置 的字符串

截取完整的字符串

从开始位置,每隔一个字符截取字符串

从索引 1 开始,每隔一个取一个

截取从 2 ~ 末尾 - 1 的字符串

截取字符串末尾两个字符

字符串的逆序(面试题)

答案:

num_str = "0123456789"

# 1. 截取从 2 ~ 5 位置 的字符串

print(num_str[2:6])

# 2. 截取从 2 ~ `末尾` 的字符串

print(num_str[2:])

# 3. 截取从 `开始` ~ 5 位置 的字符串

print(num_str[:6])

# 4. 截取完整的字符串

print(num_str[:])

# 5. 从开始位置,每隔一个字符截取字符串

print(num_str[::2])

# 6. 从索引 1 开始,每隔一个取一个

print(num_str[1::2])

# 倒序切片

# -1 表示倒数第一个字符

print(num_str[-1])

# 7. 截取从 2 ~ `末尾 - 1` 的字符串

print(num_str[2:-1])

# 8. 截取字符串末尾两个字符

print(num_str[-2:])

# 9. 字符串的逆序(面试题)

print(num_str[::-1])

5.公用语法

内置函数

函数描述备注

len(item)计算容器中元素个数

del(item)删除变量del 有两种方式

max(item)返回容器中元素最大值如果是字典,只针对 key 比较

min(item)返回容器中元素最小值如果是字典,只针对 key 比较

注意:字符串 比较符合以下规则: "0" < "A" < "a"

切片

描述Python 表达式结果支持的数据类型

切片"0123456789"[::-2]"97531"字符串、列表、元组

运算符

运算符Python 表达式结果描述支持的数据类型

+[1, 2] + [3, 4][1, 2, 3, 4]合并字符串、列表、元组

*["Hi!"] * 4['Hi!', 'Hi!', 'Hi!', 'Hi!']重复字符串、列表、元组

in3 in (1, 2, 3)True元素是否存在字符串、列表、元组、字典

not in4 not in (1, 2, 3)True元素是否不存在字符串、列表、元组、字典

> >= == < <=(1, 2, 3) < (2, 2, 3)True元素比较字符串、列表、元组

注意:

in 在对 字典 操作时,判断的是 字典的键

in 和 not in 被称为 成员运算符

完整for循环语法

for 变量 in 集合:

    循环体代码

else:

    没有通过 break 退出循环,循环结束后,会执行的代码

例子:

students = [

    {"name": "阿土",

    "age": 20,

    "gender": True,

    "height": 1.7,

    "weight": 75.0},

    {"name": "小美",

    "age": 19,

    "gender": False,

    "height": 1.6,

    "weight": 45.0},

]

find_name = "阿土"

for stu_dict in students:

    print(stu_dict)

    # 判断当前遍历的字典中姓名是否为find_name

    if stu_dict["name"] == find_name:

        print("找到了")

        # 如果已经找到,直接退出循环,就不需要再对后续的数据进行比较

        break

else:

    print("没有找到")

print("循环结束")

结果:

{'name': '阿土', 'age': 20, 'gender': True, 'height': 1.7, 'weight': 75.0}

找到了

循环结束

6.登陆信息存入字典

"""

注册的校验程序:

A)实现循环从键盘输入用户名和密码

B)如果用户名或者密码任一一个输入的是“QUIT”直接退出程序。

C)判断用户名长度为6-20,用户名开头必须以字母开头。

D)密码长度至少6位,不能为纯数字,不能有空格。

E)如果不符合上述规则、打印出不符合的原因、提示重新输入。并跳转到用户名输入阶段。

F)将正确的用户名和密码存入字典里,并打印校验成功字样。

"""

user_info = {}

while True:

    # 获取用户名和密码

    username = input("input your username:")

    password = input('input your password:')

    # 如果用户名或密码任意一个是QUIT 直接退出

    if username == 'QUIT' or password == 'quit':

        break

    # 判断用户名长度在6-20

    elif len(username) < 6 or len(username) >20:

        print('用户名长度不在6-20范围内')

        break

    # 用户名开头字母判断

    elif not username[0].isalpha():

        print('用户名必须以字母开头')

        break

    # 密码格式判断

    elif len(password) < 6 or password.isdigit() or " " in password:

        print("密码长度至少6位,不能为纯数字,不能有空格。")

        break

    else:

        user_info[username] = password

    print("校验成功")

    print(user_info)

结果为:

input your username:dujinhang

input your password:djh123456

校验成功

{'dujinhang': 'djh123456'}

input your username:zhangsan

input your password:zs123456

校验成功

{'dujinhang': 'djh123456', 'zhangsan': 'zs123456'}

input your username:wangmazi

input your password:wmz123456

校验成功

{'dujinhang': 'djh123456', 'zhangsan': 'zs123456', 'wangmazi': 'wmz123456'}

input your username:wangmaz

input your password:123456

密码长度至少6位,不能为纯数字,不能有空格。

注意:更改break位置可以实现一直循环输入,删除后面3个break可以实现一直循环输入。删除后最后新增一个break可以在正确输入用户名和密码后结束

7.登陆

d = {'阿杜': 123456}

while True:

    name = input('请输入您的用户名:')

    if name in d:

        break

    else:

        print('您输入的用户名不存在,请重新输入')

        continue

count = 5

while count:

    password = int(input('请输入您的密码:'))

    if d[name] == password:

        print('进入系统')

        break

    else:

        count -= 1

        print('您输入的密码不正确,还有{}次输入机会'.format(count))

        continue

请输入您的用户名:阿杜

请输入您的密码:12345

您输入的密码不正确,还有4次输入机会

请输入您的密码:123456

进入系统

8.

# 从键盘获取5个学生的名字,然后随机抽出一名学生去打扫卫生

import random

name_list = []

i = 0

while i < 5:

    name = input('输入学生姓名')

    name_list.append(name)

    i += 1

a = random.randint(0, 4)

print('打扫卫生的学生是%s' % name_list[a])

结果:

输入学生姓名张三

输入学生姓名里斯

输入学生姓名王麻子

输入学生姓名郭达

输入学生姓名杰森

打扫卫生的学生是杰森

注意:循环体要缩进,后续不循环的记得不要缩进!

DAY07 函数操作

1.定义函数的格式如下:

def 函数名():    函数封装的代码

    ……

注释:

在开发中,如果希望给函数添加注释,应该在 定义函数的下方,使用 连续的三对引号,这种注释是给函数用的,方便给调用的人知道函数是怎么用的;

在连续的三对引号之间编写对函数的说明文字;

在函数调用位置,用使用鼠标点击函数名后,然后使用快捷键 CTRL + Q 可以查看函数的说明信息。

2.函数参数

形参:定义 函数时,小括号中的参数,是给真实数据占位用的,在函数内部 作为变量使用

实参:调用 函数时,小括号中的参数,是传递到 函数内部 的 真实数据

例子:

a = 5

def test1(a):

    # 这里 a 是形参,是在函数内部定义的,作用域只在函数内部

    a += 1

    print("%d" % a)

test1(2)

# 这里因为形参的作用域不到这里,所以这个 a 是外面的 a

print("%d" % a)

结果:

3

5

注意,函数内部形参最好不要与外部变量同名

3.返回值

在程序开发中,有时候,会希望 一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理

在函数中使用 return 关键字可以返回结果

调用函数一方,可以使用变量来接收函数的返回结果,也可以不接收只调用。注意没有返回值,也有返回值,是 None

注意:return 表示返回,后续的代码都不会被执行

例子:

def func_sum():

    """求和 1+2"""

    sum_num = 1 + 2

    print(sum_num)

    return

    # 这行代码不会执行了

    print('不会执行这行代码')

res=func_sum()

print(res)

结果为;

3

None

例2:

# 计算1~num的累积和

def calculate_num(num):

    result = 0

    i = 1

    while i <= num:

        result = result + i

        i += 1

    return result

result = calculate_num(100)

print('1~100的累积和为:%d' % result)

4.函数的嵌套使用

定义一个函数能够打印 5 行 的分隔线,分隔线要求任意符号任意行数

def print_line(a, b):

    print(a * b)

def print_lines(c, d):

    row = 0

    while row < 5:

        print_line(c, d)

        row += 1

print_lines("*", 30)

运行结果:

******************************

******************************

******************************

******************************

******************************

练习:

1.

# 设计一个程序,计算出 0-n 之间所有整数的和,并将计算的值返回。

def get_sum_num(n):

    i = 0

    sum_num = 0

    while i <= n:

        sum_num += i

        i += 1

    return sum_num

sum_num = get_sum_num(100)

print(sum_num)

注意:函数定义和循环体的冒号:

2.

"""

定义一个函数,要求输入大于0的数字n,判断传入数字的奇偶性,如果是奇数返回 "n是奇数",否则返回 “n是偶数”,否则 返回“请输入大于0的整数”

"""

def jiou(n):

    if n > 0:

        if n/2 == 0:

            return '%d是偶数' % n

        else:

            return '%d是奇数' % n

    else:

        return '请输入大于零的整数'

result = jiou(135)

print(result)

结果:

135是奇数

3.

"""

编写一个程序,通过键盘循环获取5个学生的信息,将学生信息组成字典保存到列表中,最终将学生信息列表打印出来。(学生信息包括 name 、age、id)

"""

stu_list = []

stu_dict={}

i = 0

while i < 5:

    stu_dict = {}

    name = input("请输入姓名:")

    age = input("请输入年龄:")

    id_stu = input("请输入学号:")

    stu_dict["name"] = name

    stu_dict["age"] = age

    stu_dict["id"] = id_stu

    stu_list.append(stu_dict)

    i += 1

print(stu_list)

运行结果:

请输入姓名:张三

请输入年龄:12

请输入学号:123456

请输入姓名:李四

请输入年龄:23

请输入学号:234567

请输入姓名:王五

请输入年龄:34

请输入学号:456789

请输入姓名:周六

请输入年龄:45

请输入学号:567891

请输入姓名:刘七

请输入年龄:56

请输入学号:678912

[{'name': '张三', 'age': '12', 'id': '123456'}, {'name': '李四', 'age': '23', 'id': '234567'}, {'name': '王五', 'age': '34', 'id': '456789'}, {'name': '周六', 'age': '45', 'id': '567891'}, {'name': '刘七', 'age': '56', 'id': '678912'}]

DAY08 模块和匿名函数

1.模块

模块是 Python 程序架构的一个核心概念

模块就好比是 工具包,要想使用这个工具包中的工具,就需要导入 import 这个模块

每一个以扩展名 py 结尾的 Python 源代码文件都是一个模块

在模块中定义的 全局变量、函数都是模块能够提供给外界直接使用的工具

例子:

新建 info.py,代码如下

name = "datafrog"

def func():

    print('info_func')

再新建 get_info.py 文件,并且编写以下代码:

import info

print(info.name)

info.func()

2.列表推导式:轻量级循环创建列表

例子:

a=[x for x in range(1,7) if x%2==0]

b=[x for x in range(1,7) if x%2!=0]

c=[x for x in range(1,7,2)]

print(a)

print(b)

print(c)

注意:第一个x可以是含x的参数

例2

d=[(x,y) for x in range(1,4) for y in range(3,5)]

输出结果:

[(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)]

3.匿名函数:用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤

例:

sum = lambda arg1, arg2: arg1 + arg2

# 调用sum函数

print("Value of total : %s" % sum( 10, 20 ))

print("Value of total : %s" % sum( 20, 20 ))

以上实例输出结果:

Value of total :  30

Value of total :  40

例2:

下面的数据如何指定按age或name排序?

stus = [

    {"name": "zhangsan", "age": 18},

    {"name": "lisi", "age": 19},

    {"name": "wangwu", "age": 17}

]

按name排序:

stus.sort(key = lambda x: x['name'])

print(stus)

输出结果:

[{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}]

按age排序:

stus.sort(key = lambda x: x['age'])

print(stus)

输出结果:

[{'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}, {'age': 19, 'name': 'lisi'}

DAY09 函数高级

1.局部变量、全局变量

局部:函数内部定义

全局:函数外部定义

如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错

例子:

a = 10

def test():

    global a

    a = 5  # 修改全局变量

    print("函数内a:%d" %a)

test()

print("函数外a:%d" %a)

运行结果:

函数内a:5

函数外a:5

2.函数返回值

例子:

def func2():

    return 1, 1.5

a = func2()

print(a)

a, b = func2()

print(a)

print(b)

a, b, c = 2, 2.5, "hello"

print(a)

print(b)

print(c)

结果 :

(1, 1.5)

1

1.5

2

2.5

hello

3.函数参数

默认参数:调用函数时,如果没有传入默认参数对应的实参,则实参使用默认值。

关键字参数:调用函数时,实参可以指定对应的形参,称为关键字参数

例子:

def printinfo(name, age):

  # 打印任何传入的字符串

  print("Name: %s"% name)

  print("Age: %s"% age)

printinfo(age=9,name="miki" )

结果:

Name: miki

Age: 9

可变参数

(1)、元祖:args

函数可以定义 可变参数,用于接收任意数量的参数

可变参数的前边需要添加*,用于提示python解释器该参数为可变参数

使用可变参数直接用args即可(不需要加*)

可变参数的本质是 将传递的参数包装成了元组

(2)、字典:kwargs

可变参数还有一种形式 可以接收不存在的关键字参数

定义参数时需要在变量名前添加两个*

这种可变参数会将 不存在的关键字参数包装成字典

例子:

def sum_num(a, b, *args, **kwargs):

    print(a)

    print(b)

    print(args)

    print(kwargs)

    test(*args, **kwargs)

def test(*args, **kwargs):

    print(args)

    print(kwargs)

sum_num(1, 2, 3, mm=5, nn=6)

结果为:

1

2

(3,)

{'mm': 5, 'nn': 6}

(3,)

{'mm': 5, 'nn': 6}

例2:

#计算n到m的和,调用时可以不传,或传递1个或传递两个参数,默认计算1-100的和

def func3(n=1, m=100):

    i = n

    sum = 0

    while i <= m:

        sum += i

        i += 1

    return sum

print(func3(2, 5))

结果:

14

例3:#除法

def div(a, b, *args):

    # 如果b=0,就让结果为a

    if b == 0:

        ret = a

    else:

        ret = a / b

        if args:

            for i in args:

                if i == 0:

                    # 如果i=0,就跳过

                    continue

                ret = ret / i

    return ret

print(div(50, 2, 4))

例4:

# 使用不定长参数定义一个函数max_min,接受的参数类型是数值,最终返回这些数中的最大值和最小值

def max_min(*args):

    if len(args) == 0:

        return 0, 0

    elif len(args) == 1:

        return args(0), args(0)

    else:

        max = args[0]

        min = args[0]

        for i in args:

            if max < i:

                max = i

            if min > i:

                min = i

        return max, min

print(max_min(1,2,5,6,8,5,25,))

例5:

# 定义一个函数,返回n的阶乘的最后结果,并打印出如5阶乘"5!=120"的效果

def num_factorial(a):

    ret = 1

    for i in range(a):

        ret = ret * (i + 1)

    print("%d!=%d" % (a, ret))

num_factorial(5)

例6

# 定义一个函数,返回由n(包含n)以内的奇数或者偶数组成的列表,默认返回全是奇数的列表

def jiou(n, type="jishu"):

    res = []

    if type == "jishu":

        for i in range(1, n + 1):

            if i % 2 != 0:

                res.append(i)

    if type == "oushu":

        for i in range(i, n + 1):

            if i % 2 == 0:

                res.append(i)

    return res

print(jiou(15))

运行结果

[1, 3, 5, 7, 9, 11, 13, 15]

例7:

"""

定义函数findall,实现对字符串find方法的进一步封装,要求返回符合要求的所有位置的起始下标,

如字符串"helloworldhellopythonhelloc++hellojava",需要找出里面所有的"hello"的位置,

最后将返回一个元组(0,10,21,29),即将h的下标全部返回出来,而find方法只能返回第一个

"""

def find_all(str1, date, start, end):

    list1 = []

    while start <= end:

        i = str1.find(date, start, end)

        if i == -1:

            break

        else:

            start = i + 1

            list1.append(i)

    return tuple(list1)                      #元祖形式输出

str1 = "helloworldhellopythonhelloc++hellojava"

date = "hello"

end = len(str1)

print(find_all(str1, date, 0, end))

运行结果

(0, 10, 21, 29)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 1. Python的hello-world: print ("Hello, Python!")、 完了 摇就完事儿...
    LunarShade阅读 1,368评论 0 0
  • 基础1.r''表示''内部的字符串默认不转义2.'''...'''表示多行内容3. 布尔值:True、False(...
    neo已经被使用阅读 1,660评论 0 5
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,446评论 0 13
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,730评论 0 8
  • Python简介 Python历史 Python 是由 Guido van Rossum 在八十年代末和九十年代初...
    莫名其妙的一生阅读 1,040评论 0 2