小技巧:上注释使用(ctrl+/)
print("") 输出的时候是,输出的就是“”内的内容
如果是使用变量的话,不加””双引号,才可以输出变量的内容。
eg:num = 111 而使用print("num")所输出的也就是num,调用变量不要加“” 而且print是没有结果输出的,只是打印的功能;
print("我","是") print可以多个输出内容中间用逗号隔开!!! (需要全部是英文的符号!)
type()是看数据里的类型 例如type("奥特曼") ;type(123.2) ;type(123) 分别为 str ; float ; int
下面是数据类型的一个转换案例
num_str = str(11)
print(type(num_str),num_str)
输出内容为
这样就将一个int的类型 转变为了一个字符串str的类型
引号括起来的就是字符串,所以万物皆可用字符串表示,带个双引号就是字符串,但是字符串可不能转为其他的。(比如想把字符串转为数字,得确保内容也是数字才行)
浮点数转整数,要注意精度丢失
标识符命名中,只允许出现:
英文;中文;数字;下划线 (_); 这四类元素。
其余任何内容都不被允许。
注意
1.不推荐使用中文
2.数字不可以开头(a;a_b;_a;_a_b;这些是ok的) 1a就是错的a1可以
以定义变量为例:
Andy=“安迪1”
andy=“安迪2
字母a的大写和小写,是完全能够区分的。
Python中有一系列单词,称之为关键字关键字在Python中都有特定用途我们不可以使用它们作为标识符
变量名;类名;方法名
不同的标识符,有不同的规范
我们目前只接触到了:变量。所以,目前学习:变量的命名规范。
见名知意
明了:尽量做到,看到名字,就知道是什么意思
简洁:尽量在确保“明了”的前提下,减少名字的长度
下划线命名法
多个单词组合变量名,要使用下划线做分隔。
英文字母全小写
命名变量中的英文字母,应全部小写:
**表示平方
字符串在Python中有多种定义形式:(常用的是双引号定义法)
三引号定义法,和多行注释的写法一样,同样支持换行操作。
使用变量接收它,它就是字符串;
不使用变量接收它,就可以作为多行注释使用。
在python中常用的是双引号定义变量法
如果我想要定义的字符串本身,是包含:单引号、双引号自身呢? 如何写?
单引号定义法,可以内含双引号;( ‘ “ ” ’ )
双引号定义法,可以内含单引号;( “ ‘ ’ ” )
可以使用转意字符 ( \ )来将引号解除效用,变成普通字符串,写在符号前面!
输出结果
注意:如果是变量拼接的话,在print后的括号里面的变量是不能上引号的,因为print的作用就是输出引号内的东西,你上了引号就不输出变量的包含的意思了。
无法和非字符串类型进行拼接。(也就是拼接的变量类型只能是字符串,也就是上引号的内容)
我们会发现,这个拼接字符串也不好用啊
1变量过多,拼接起来实在是太麻烦了;
2.字符串无法和数字或其它类型完成拼接。
%s (是在变量内占位置的)
%变量(是在引号外的)
其中的,%s
%表示:我要占位
s表示:将变量变成字符串放入占位的地方所以,综合起来的意思就是:我先占个位置,等一会有个变量过来,我把它变成字符串放到占位的位置
多个变量占位变量要用括号括起来
并按照占位的顺序填入,并且使用逗号隔开~
数字类型也是可以的
基于上面小红书的股票价格发现,12.11的浮点数没有控制精度导致以12.110000输出了。
我们可以使用辅助符号"m.n"来控制数据的宽度和精度
m,控制数字总个数,要求是数字(很少使用),设置的宽度小于数字自身,不生效
.n,控制小数点精度,要求是数字,会进行小数的四舍五入
示例:
%5d:表示将整数的宽度控制在5位,如数字11,被设置为5d,就会变成:[空格][空格][空格]11,用三个空格补足宽度。(这个5就是m,没有.n的体现)
%5.2f:表示将宽度控制为5,将小数点精度设置为2,小数点和小数部分也算入宽度计算。如,对11.345设置了%7.2f后,结果是:[空格][空格]11.35。2个空格补足宽T度,小数部分限制2位精度后,四舍五入为.35
%.2f:表示不限制宽度,只设置小数点精度为2,如11.345设置%.2f后,结果是11.35
格式 f {} 前面有一个就行~ 写到双引号外面
简洁快速;不要求字段的格式;不要求数据精度;优雅简介!
大括号就行占位,里面填入对应的变量即可~
1.可以通过
f”(变量){变量)”的方式进行快速格式化
2.这种方式
不理会类型
不做精度控制
适合对精度没有要求的时候快速使用
刚刚的演示,都是基于变量的
可是,我想更加优雅些,少写点代码,直接对“表达式”进行格式化是否可行呢?
那么,我们先了解一下什么是表达式。
表达式:一条具有明确执行结果的代码语句
如:
1+1、5*2,就是表达式,因为有具体的结果,结果是一个数字
又或者,常见的变量定义:
name=“张三" age = 11 + 11
表达式是什么?
表达式就是一个具有明确结果的代码语句,如1+1、type(“字符串”)、35等在变量定义的时候,如age=11+11,等号右侧的就是表达式,也就是有具体的结果,将结果赋值给了等号左侧的变量
如格式化表达式?
f“{}”
%s\%d\%f%(表达式、表达式、表达式)
name = "小红书"
stock_price = 17.33
stock_code = "00123"
stock_price_daily_factor = 1.2
growth_days = 12
print(f"公司名称为:{name},股票代码为:{stock_code},当前股价为:{stock_price}")
print("每日的增长系数为:%2.1f,经过12天的增长,股价达到了:%.1f"%(stock_price_daily_factor,stock_price_daily_factor**growth_days))
这个地方有一个bug点:数字不能以0开头,所以只能使用字符串“00293”
input语句(函数)
我们前面学习过print语句 (函数),可以完成将内容(字面量、变量等)输出到屏幕上。
在Python中,与之对应的还有一个input语句,用来获取键盘输入。
数据输出:print
数据输入:input
使用上也非常简单:
使用input()语句可以从键盘获取输入
使用一个变量接收(存储)input语句获取的键盘输入数据即可(变量 = input())
然后再使用print函数把 存储input从键盘输入的数据 的变量打印出来
print("你的银行卡密码是多少?")
secrt = input("你的银行卡密码是多少?")
print(f"系统检测你的密码为:{secrt}")
在前面的代码中,输出”请告诉我你是谁?“的print语句其实是多余的
input()语句其实是可以在要求使用者输入内容前,输出提示内容的哦,直接在input的括号内输入的字句就是提醒,类似print的方式,方式如下:
注意:input默认接受的数据类型都是:字符串,如果需要转换数据类型的话,需要自行转换(浮点数或者数字)
1.input()语句的功能是,获取键盘输入的数据
2.可以使用:input(提示信息),用以在使用者输入内容之前显示提示信息。
3.要注意,无论键盘输入什么类型的数据,获取到的数据永远都是字符串类型
课后练习:
user_name = input("请输入你的名字:")
user_type = input("请输入你的类型:")
print(f"您好,尊贵的{user_name},您是{user_type},啊哈哈哈")
掌握布尔类型用于表示:真和假
掌握比较运算符用于计算: 真和假
布尔类型的字面量: 有且只有这两个,在python里需要大写首字母
True 表示真(是、肯定)
False 表示假 (否、否定)
定义变量存储布尔类型数据:
变量名称 = 布尔类型字面量
布尔类型不仅可以自行定义同时也可以通过计算的来。
也就是使用比较运算符进行比较运算得到布尔类型的结果
在python中,==也是表示比较的,常见的比较运算符有:
掌握逻辑判断语句(if)的基本语法格式
掌握布尔类型数据,在判断语句中的作用
Python有点类似yaml文件,书写格式方面,通过缩进来判断归属的。
4个空格的归属来判断是不是归属于if
判断语句的结果,必须是布尔类型True或 False
True会执行if内的代码语句False则不会执行
归属于if判断的代码语句块,需在前方填充4个空格缩进Python通过缩进判断代码块的归属关系。
结合前面学习的input输入语句,完成如下案例:
欢迎来到黑马儿童游乐场,儿童免费,成人收费请输入你的年龄:30您已成年,游玩需要补票10元祝您游玩愉快。
提示: 您已成年,需要补票的信息输出,来自if判断
print("欢迎来到黑马游乐场,儿童免费,成人收费")
age = input("请输入您的年龄:")
age = int(input("请输入您的年龄:"))
if age >= 18:
print(f"您的年龄为{age},类型为,{type(age)},您需要缴纳费用99元")
else:
print("小朋友是不收钱哒,免费玩")
print("祝您游玩愉快")
这个是age上的字符串,所以我使用引号括起来了。
这个我使用的是数字,转换了一下类型为int,age也不需要上引号,当字符串了。
这样也行
if满足条件会执行相应的代码语句,如果不满足呢?
有没有不满足的情况下,可供执行的代码呢?
if else 语句可以实现
If 和else是同级的~
1.if else 语句,其中
if和其代码块,条件满足时执行
else搭配if的判断条件,当不满足的时候执行
2.if else语句的注意事项:
else不需要判断条件,当if的条件不满足时,else执行
else的代码块,同样要4个空格作为缩进
某些场景下,判断条件不止一个,可能有多个。
(elif可以有无数个,后面和if一样跟条件)
且要注意,if和elif是互斥的,if满足条件了,elif就没用了
Else 是if和elif都没有满足之后的最后选择
比如这个满足了身高小于120,即便输入了vip级别,但是也和if互斥了,没有用处。
变量 = 判断条件
Elif语句可以书写多个~
stature = int(input("请输入您的身高 :"))
vip_stat =int(input("您是几级工程师(1-5):"))
day_time = int(input("请回答今天是周几(1-7:)"))
print("欢迎来到北京动物园")
if int(input("请输入您的身高 :")) < 120:
print("您的身高不高于120,不需要买票")
elif int(input("您是几级工程师(1-5):")) > 3:
print("级别大于2,可以免费玩")
elif int(input("请回答今天是周几(1-7:)")) == 1:
print("今天是周一,可以免费玩")
else:
print("不好意思都不满足,需要买票")
print("祝你游玩愉快")
互斥且有顺序
空格缩进同样不可省略
节省代码量的写法:
elif可以写多个
判断是互斥且有序的,上一个满足后面的就不会判断了
可以在条件判断中,直接写input语句,节省代码量
import random
num = random.randint(1, 10)
guess_num = int(input("输入你要猜测的数字:"))
if guess_num == num:
print("恭喜你,第一次就猜中了")
else:
if guess_num > num:
print("你猜的数字大于随机的数字")
else:
print("你猜的数字小于于随机的数字")
guess_num = int(input("请第二次输入你要猜测的数字:"))
if guess_num == num:
print("恭喜你,第二次猜中了")
else:
if guess_num > num:
print("你猜的数字大于随机的数字")
else:
print("你猜的数字小于于随机的数字")
guess_num = int(input("请第三次输入你要猜测的数字:"))
if guess_num == num:
print("恭喜你,第三次猜中了")
else:
print("三次机会没了")
print(f"数字是{num}")
有很多场景,不仅仅是多个并列条件,还会有满足前置条件才会二次判断的多层判断需求。
简单嵌套实例:
判断有2层
当外层if满足条件(图中编号1)时,才会执行内层if判断( 图中编号2)
当外层if( 编号1)不满足,直接执行外层esle
比如:
小练习,发奖金需要满足条件:
1.必须是大于等于18岁小于30岁的成年人
2.同时入职时间需满足大于两年,或者级别大于3才可领取
写代码记得,先随便设置个变量,再去简单勾勒大纲,再去逐渐优化~
案例需求:定义一个数字(1~10,随机产生),通过3次判断来猜出来数字
案例要求:
1.数字随机产生,范围1-10
2.有3次机会猜测数字,通过3层嵌套判断实现
3.每次猜不中,会提示大了或小了
提示,通过如下代码,可以定义一个变量num,变量内存储随机数字;
可以使用print(num)去看
import random
num = random.randint(1, 10)
guess_num = int(input("输入你要猜测的数字:"))
if guess_num == num:
print("恭喜你,第一次就猜中了")
else:
if guess_num > num:
print("你猜的数字大于随机的数字")
else:
print("你猜的数字小于于随机的数字")
guess_num = int(input("请第二次输入你要猜测的数字:"))
if guess_num == num:
print("恭喜你,第二次猜中了")
else:
if guess_num > num:
print("你猜的数字大于随机的数字")
else:
print("你猜的数字小于于随机的数字")
guess_num = int(input("请第三次输入你要猜测的数字:"))
if guess_num == num:
print("恭喜你,第三次猜中了")
else:
print("三次机会没了")
print(f"数字是{num}")
循环普遍存在于日常生活中,同样,在程序中,循环功能也是至关重要的基础功能。
1.while的条件需得到布尔类型(True表示继续循环,False表示结束循环)
2.需要设置循环终止的条件,如i+= 1配合i< 100,就能确保100次后停止,否则将无限循环
3.空格缩进和if判断一样,都需要设置
计算案例:1-100的和
设置一个范围1-100的随机整数变量,通过while循环,配合input语句,判断输入的数字是否等于随机数
无限次机会,直到猜中为止
每一次猜不中,会提示大了或小了
猜完数字后,提示猜了几次
提示:
无限次机会,终止条件不适合用数字累加来判断
可以考虑布尔类型本身(True or False}
需要提示几次猜中,就需要提供数字累加功能
Count每输入一次数字就记录一次;if还做了嵌套查询~
i = 1
while i <= 100:
print(f"今天是第{i}天,准备表白......")
j = 1
while j <= 10:
print(f"送给小美第{j}只玫瑰花")
j+= 1
print("小美,我喜欢你")
i+=1
print(f"坚持到第{i - 1}天,表白成功")
注意:
同判断语句的嵌套一样,循环语句的嵌套,要注意空格缩进
基于空格缩进来决定层次关系
注意条件的设置,避免出现无限循环
默认print语句输出内容会自动换行,如下图:
在即将完成的案例中,我们需要使用print语句,输出不换行的功能,非常简单,实现方式如下:
在print后的括号里加入一个end=’’就可以了
在字符串中,有一个特殊符号: t,效果等同于在键盘上按下:tab键。
它可以让我们的多行字符串进行对齐。
练习案例-打印九九乘法表
通过while循环,输出如下九九乘法表内容
i = 1
while i <= 9:
j = 1
while j <= i:
print(f"{i} * {j} = {i * j}\t",end = '')
j += 1
i += 1
print()
除了while循环语句外,Python同样提供了for循环语句。
两者能完成的功能基本差不多,但仍有一些区别:
while循环的循环条件是自定义的,自行控制循环条件
for循环是一种”轮询”机制,是对一批内容进行”逐个处理'
生活案例
洗碗,一个个洗干净
剥蒜,个个剥干净
送快递,一个个送达
程序中的for循环
代码表示:一个一个取字符
可以看出,for循环是将字符串的内容:依次取出
所以,for循环也被称之为: 遍历循环
for循环注意点
# 定义字符串name
name = "itheima”
# for循环处理字符串
for x in name:
print(x)
同while循环不同,for循环是无法定义循环条件的只能从被处理的数据集中,依次取出内容进行处理。
所以,理论上讲,Python的for循环无法构建无限循环(被处理的数据集不可能无限大)
小练习
In后的序列可以使用变量来充当
这样不需要去定义a
for 临时变量 in待处理数据集
循环满足条件时执行的代码
语法中的:待处理数据集,严格来说,称之为:序列类型
序列类型指,其内容可以一个个依次取出的一种类型,包括:
字符串
列表
元组
尽管除字符串外,其它的序列类型目前没学习到,但是不妨碍我们通过学习range语句,获得一个简单的数字序列
一般rang是配合for来使用的!
For x in rang(10):
语法1从0开始,到num结束(不含num本身)
语法2从num1开始,到num2结束(不含num2本身)
语法3从num1开始,到num2结束(不含num2本身)步长以step值为准(默认为1)
count = 0
for i in range(90,100):
if i % 2 == 0:
count += 1
print(f"90 到 100之间不包含100有{count}个偶数")
临时变量,在编程规范上,作用范围(作用域),只限定在
for循环内部如果在for循环外部访问临时变量:实际上是可以访问到的
在编程规范上,是不允许、不建议这么做的(缩进!)
For 和 while的嵌套使用~
如果是while的话,它设置的变量要在上面,不能位于最上面for的前面。
思考:无论是while循环或是for循环,都是重复性的执行特定操作在这个重复的过程中,会出现一些其它情况让我们不得不
对于这种场景,Python提供continue和break关键字
用以对循环进行临时跳过和直接结束
continue关键字用于: 中断本次循环,直接进入下一次循环
continue可以用于:for循环和while循环,效果一致
案例
到了语句2的时候就结束了
嵌套循环
案例分析:
这个的循环:外部循环,输出一个语句1,然后进入到内层循环,输出一个语句2,当往下走语句3的时候,continue了,不输出语句3了,继续输出语句2,循环如此,每次都到了语句3就不输出,循环5次语句2,然后输出一个外层循环的语句4。 这样按照5次的外部就结束。(结果:一个语句1,5个语句2,一个语句4......这样基于外层一共5次)
break关键字用于:直接结束循环
break可以用于:for循环和while循环,效果一致
对比continue和break
先是外部循环一个语句1,然后进到内层循环出一个语句2,碰到break,整体循环结束,(不像continue,只是跳过语句3,还要执行语句2得100次,这次直接退出内部循环),然后输出一个外层的语句4,然后继续这么外部的10次结束。
money = 10000
for i in range(1,21):
import random
score = random.randint(1,10)
if score < 5:
print(f"员工{i}不满足绩效,不发工资,下一位")
continue
if money >= 1000:
money -= 1000
print(f"员工{i}满足绩效分,发工资1000,工资余额{money}元")
else:
print(f"公司余额不足,剩余{money}元,不发了")
break
函数:是组织好的,可重复使用的,用来实现特定功能的代码段
例子:
因为,len()是Python内置的函数:
- 是官方提前写好的
- 以重复使用
- 实现统计长度这一特定功能的代码段
定义一个测试字符串长度的函数:
def my_len(abc):
count = 0
for i in abc:
count += 1
print(f"字符串{abc}的长度为{count}")
str1 = "sdfs"
my_len(str1)
为了得到一个针对特定需求、可供重复利用的代码段提高程序的复用性,减少重复性代码,提高开发效率
函数体:就是要做的事情
目前不需要去管传入参数以及return返回值,后续章节会讲到。
目前:def 函数名 函数体
比如
包括 def 函数名(参数):
注意这里没有定义参数,但是调用参数的话,需要写上函数名
参数如不需要,可以省略(后续章节讲解)
返回值如不需要,可以省略(后续童节讲解)
函数必须先定义后使用
1.函数的定义语法
2.函数使用步骤:
先定义函数
后调用函数
3.注意事项:
参数不需要,可以省略
返回值不需要,可以省略
掌握函数传入参数的使用
传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据
函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数。
参数之间使用逗号进行分隔
函数调用中,提供的5和6,称之为: 实际参数(实参),表示函数执行时真正使用的参数值。
传入的时候,按照顺序传入数据,使用逗号分隔
传入参数的数量是不受限制的。
可以不使用参数
也可以仅使用任意N个参数
1.函数的传入参数的作用是?
在函数运行的时候,接受外部传入的数据
2.使用方法(如上)
3.注意事项
函数定义中的参数,称之为形式参数
函数调用中的参数,称之为实际参数
函数的参数数量不限,使用逗号分隔开
传入参数的时候,要和形式参数一一对应,逗号隔开
def safetem(data):
if data >= 37.5:
print(f"您的体温为{data},需要接受隔离")
else:
print(f"您的体温小于{37.5},不需要隔离")
safetem(37)
语法:
意思就是return的作用是将传参后的结果给了返回值;
有了这个return就可以去使用变量去接收返回值,最后print的就是变量了
如图,变量就能接收到函数的返回值
语法就是: 通过return关键字,就能向调用者返回数据
总结
1什么是函数返回值?
函数在执行完成后,返回给调用者的结果
2.返回值的应用语法
使用关键字: return 来返回结果
3.注意:
函数体在遇到return后就结束了,所以写在return后的代码不会执行。
思考:如果函数没有使用return语句返回数据,那么函数有返回值吗?
实际上是:有的。
python中有一个特殊的字面量: None,其类型是:
无返回值的函数,实际上就是返回了:None这个字面量 None表示:空的、无实际意义的意思函数返回的None)就表示,这个函数没有返回什么有意义的内容也就是返回了空的意思
这个return后用none去做返回值,和上面返回的结果是一致的。
None类型的应用场景
None作为一个特殊的字面量,用于表示:空、无意义,其有非常多的应用场景。
相反的话
在if判断中,None等同于False;
一般用于在函数中主动返回None,配合if判断做相关处理
3.用于声明无内容的变量上
定义变量,但暂时不需要变量有具体值,可以用None来代替
总结
1.什么是None
None是类型'NoneType'的字面量用于表示:空的、无意义的
2.函数如何返回None
不使用return语句即返回None
主动return None
3使用场景
函数返回值
if判断
变量定义
掌握通过注释对函数进行解释说明
函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。
我们可以给函数添加说明文档
辅助理解函数的作用
语法如下:
param:参数
通过多行注释的形式,对函数进行说明解释,内容应写在函数体之前
1.函数说明文档的作用是?
对函数进行说明解释,帮助更好理解函数的功能;
2.定义语法
如上所示
:param用于解释参数
:Retun用干解释返回值
所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数;
如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次函数A执行的位置
1.什么是嵌套调用
在一个函数中,调用另外一个函数
2.执行流程
函数A中执行到调用函数B的语句,会将函数B全部执行完成后,继续执行函数A的剩余内容
变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)主要分为两类:局部变量和全局变量
所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效;
这里的testA()已经调用完成,下面的print(num)已经用不了销毁的num变量了。
局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量
所谓全局变量,指的是在函数体内、外都能生效的变量
思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办?
答:将这个数据存储在一个全局变量里面
思考:“testB函数需要修改变量num的值为200,如何修改程序?
正常思路:我们想让num去取上200,因为print(num)是在test_b下面执行的,但是看样子不行,testb里的数值num成了具备变量了,那么如何去操作呢?
num = 100
def test_a():
print(f"test_a :{num}")
def test_b():
global num
num = 200
print(f"test_b :{num}")
test_a()
test_b()
print(num)
使用global去声明一下,现在某个函数内的变量为全局变量了,改了之前函数外面的全局变量的值!
1.什么是局部变量
作用范围在函数内部,在函数外部无法使用
2.什么是全局变量
在函数内部和外部均可使用
3如何将函数内定义的变量声明为全局变量
使用global关键字,global 变量
需求
我写的
money = 50
while True:
name = input("请输入您的姓名:")
#查询余额
def check_momey(x):
print(f"您当前的余额为{money}元")
menu()
# 存款
def save_momey(y):
global money
cu_money = int(input("输入存款金额:"))
money = cu_money + money
print(f"您成功存入{cu_money}元,当前余额为{money}元")
menu()
#取款
def take_money(z):
global money
qu_money = int(input("输入取款金额:"))
money = money - qu_money
print(f"您成功取出{qu_money}元,当前余额为{money}元")
menu()
#退出
#主菜单函数
def menu():
print("主菜单\t")
print("1:查询账户余额\t")
print("2:存款\t")
print("3:取款\t")
print("4:退出\t")
options = int(input(f"{name},欢迎来到奥特曼ATM,请选择操作您要执行的操作:"))
if options == 1:
check_momey(options)
elif options == 2:
save_momey(options)
elif options == 3:
take_money(options)
else:
sys.exit(0)
老师写的
这个就未打印query函数的表头,穿入了false的参数,导致if判断为错
Continue跳出循环,从头来,break是终止循环