Print 函数用法
print() 函数,用于向屏幕打印输出内容
print() 函数,一次打印输出多个数据,使用逗号分隔
print() 函数高级用法
print(值1, 值2, 值3,..., sep="分割符", end="结束符")
sep、end 是可选的
sep 用于设置分割符,默认分割符为空格 例如打印3个值,以 * 号做为分割符,效果如下
end 用于设置结束符,默认结束符是换行 例如以 2023 做为结束符,效果如下
在Python中严格区分大小写
Python中的每一行就是一条语句,每条语句以换行结束
Python中每一行语句不要过长(规范中建议每行不要超过80个字符)
一条语句可以分多行编写,多行编写时语句后边以\结尾
print('he\
aaa\
aaa')
Python是缩进严格的语言,所以在Python中不要随便写缩进
注释
单行注释
单行注释就是一个井号#
多行注释
在python中也会有注释有很多行的时候,这种情况下就需要批量多行注释符了。多行注释是用三引号''' '''包含的,或者三个双引号 """ 将注释括起来
可能有的人会说这不是和多行字符串混淆了吗,但是我看到的许多程序员也是这么用的,使用时候注意区分下就好。
单引号(''')
#!/usr/bin/python3
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello, World!")
双引号(""")
#!/usr/bin/python3
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
print("Hello, World!")
用三引号进行包裹
"""
在三引号中间写的内容,全部都是注释内容
"""
三引号如果前边有一个变量的名字,那么也表示字符串
first_str = """
当我们声明变量的时候尽量不用a、b等这种没有意义的字符
尽量使用能明确表示变量值含义的单词来进行表示
"""
print(first_str) # 结果是有输出的
变量
变量(variable)变量可以用来保存字面量,并且变量中保存的字面量是不定的。变量本身没有任何意思,它会根据不同的字面量表示不同的意思
一般我们在开发时,很少直接使用字面量,都是将字面量保存到变量中,通过变量来引用字面量Python中使用变量,不需要声明,直接为变量赋值即可
a = 10
不能使用没有进行过赋值的变量,如果使用没有赋值过的变量,会报错 NameError: name 'b' is not defined
Python是一个动态类型的语言,可以为变量赋任意类型的值,也可以任意修改变量的值
a = 10
a = 'hello'
print(a) // hello
# 当程序运行的时候,电脑会开辟一份内存,用于存储10和 hello,上面代码中表示,a 指向 10,然后又改为指向 hello,程序执行完后,释放内存
变量名命名规则
变量名区分大小写,name 和 Name 是两个不同的标识符
变量名由字母、数字、下划线组成,不能以数字开头
Python 关键字不能作为变量名,不建议使用中文字符做为变量名
变量命名方式
小驼峰命名法 :变量名由多个单词组成,第一个单词首字母小写,后面单词首字母大写,其余字母均小写,如:userName,totalScore
大驼峰命名法:变量名由多个单词组成,每个单词的首字母均大写,其余字母小写,如:UserName,TotalScore
也可以根据自己的编程习惯为变量命名,如 user_name、username、total_score 等,都是可以的,建议与开发团队保持相同的命名风格。
标识符的命名
标识符:在Python中所有可以自主命名的内容都属于标识符,比如:变量名、函数名、类名
如果使用不符合标准的标识符,将会报错 SyntaxError: invalid syntax
标识符必须遵循标识符的规范:
标识符中可以含有字母、数字、_,但是不能使用数字开头:例子:a_1 _a1 _1a
标识符不能是Python中的关键字和保留字,也不建议使用Python中的函数名作为标识符,因为这样会导致函数被覆盖
在Python中注意遵循两种命名规范:下划线命名法,所有字母小写,单词之间使用_分割:max_length min_length hello_world xxx_yyy_zzz
帕斯卡命名法(大驼峰命名法) ,首字母大写,每个单词开头字母大写,其余字母小写: MaxLength MinLength HelloWorld XxxYyyZzz
数据类型
数据类型指的就是变量的值得类型,也就是可以为变量赋哪些值
数据类型-数值
在Python数值分成了三种:整数、浮点数(小数)、复数
在Python中所有的整数都是int类型
Python中的整数的大小没有限制,可以是一个无限大的整数
a = 10
#type是检测数据类型的一个函数
print(type(a)) # 打印结果:<class 'int'>,class在这里的意思就是数据类型的意思,int就是整数的意思
b = 20
c = 999999999999999999999999999999999999999999999 ** 100
如果数字的长度过大,可以使用下划线作为分隔符
c = 123_456_789 #相当于123456789,效果是一样的
# d = 0123 10进制的数字不能以0开头
# 其他进制的整数,只要是数字打印时一定是以十进制的形式显示的
# 二进制 0b开头
c = 0b10 # 二进制的10
# 八进制 0o开头
c = 0o10
# 十六进制 0x开头
c = 0x10
# 也可以通过运算符来对数字进行运算,并且可以保证整数运算的精确
c = -100
c = c + 3
浮点数(小数),在Python中所有的小数都是float类型
c = 1.23
c = 4.56
a=6
b=2
print(a/b) #两个整数相除会变成浮点数
# 对浮点数进行运算时,可能会得到一个不精确的结果
c = 0.1 + 0.2 # 0.30000000000000004
数据类型-字符串
字符串用来表示一段文本信息,字符串是程序中使用的最多的数据类型,在Python中字符串需要使用引号引起来
s = 'hello'
# s = abc # 字符串必须使用引号引起来,不使用不是字符串
# 引号可以是双引号,也可以是单引号,但是注意不要混着用
s = 'hello'
s = "hello"
# s = 'hello" 引号不能混合使用 SyntaxError: EOL while scanning string literal
# 相同的引号之间不能嵌套
# s = "子曰:"学而时习之,乐呵乐呵!""
s = '子曰:"学而时习之,乐呵乐呵!"'
# 长字符串
# 单引号和双引号不能跨行使用
s = '锄禾日当午,\
汗滴禾下土,\
谁知盘中餐,\
粒粒皆辛苦'
# 使用三重引号来表示一个长字符串 ''' """
# 三重引号可以换行,并且会保留字符串中的格式,打印出来也有换行
s = '''锄禾日当午,
汗滴禾下土,
谁知盘中餐,
粒粒皆辛苦'''
问:当我们获取到用户从键盘中输入内容的时候,这个变量是什么数据类型? 字符串
a = input("请输入你的内容:")
print(type(a)) #<class 'str'>
数据类型-布尔类型
bool 布尔类型 布尔类型表示真假,有两种取值:True,真 False,假
res_1 = true
res_2 = false
print(type(res_1))
print(type(res_2))
比较两个数 a、b 的大小,返回结果就是布尔值
a = 100
b = 200
print(a > b) # 不成立
print(a < b) # 成立
转义字符
可以使用 \ 作为转义字符,通过转义字符,可以在字符串中使用一些特殊的内容
# 例子:
# \' 表示'
# \" 表示"
# \t 表示制表符
# \n 表示换行符
# \\ 表示反斜杠
# \uxxxx 表示Unicode编码
s = "子曰:\"学而时习之,\\\\n乐呵乐呵!\""
s = '\u2250'
print(s)
print('I\'m xiaomu') # I'm xiaomu
print("I like \"Python\"") # I like "Python"
数据类型之间的转换
整数和浮点数之间的转换
注意,浮点数转换成整数的时候,只是舍弃了小数点后的数字
a = 1
b = 1.9
print(type(a)) #<class 'int'>
print(type(b)) #<class 'float'>
print(float(a)) # 1.0
print(int(b)) # 1
数值与字符串之间转换
我们声明一个数字,是否能转成字符串
a = 1
b = 1.9
print(type(a)) #<class 'int'>
print(type(b)) #<class 'float'>
c="hongkong"
print(type(c)) #<class 'str'>
# 整数转换成字符串
d = str(a)
e = str(b)
print(type(d), d) #<class 'str'> 1
print(type(e), e) #<class 'str'> 1.9
是不是字符串不能转换成数字?必须长的像数字的字符串可以转成数字
int("字符串") ,字符串转换成 int 类型,字符串内容必须是整数,否则会报错
c="hongkong"
print(type(c)) #<class 'str'>
# print(int(c)) # invalid literal for int() with base 10: 'hongkong'
e="11"
print(int(e))
print(type(int(e)))
float("字符串") ,字符串转换成浮点型,字符串内容必须是数字,否则会报错
str_1 = "xiaomi"
# num_1 = float(str_1) # ValueError: could not convert string to float: 'xiaomi'
str_2 = "3.14"
num_2 = float(str_2)
print(type(num_2)) # <class 'float'>
自动类型转换
数字之间可以进行数学计算,在进行数学计算时若数字类型不同,会发生自动类型转换
布尔值与整数做运算,布尔值自动转换为 int 类型
整数与浮点数做运算,整数自动转换为 float 类型
布尔值与浮点数做运算,布尔值自动转换为 float 类型
a=5
b = true
c = 5.55
x=a+b # 布尔值true自动转换为
int y=a+c # 整数5自动转换为float类型
z=b+c # 布尔值True自动转换为float
print("x:", x, type(x))
print("y:", y, type(y))
print("z:", z, type(z))
运算符
% 取余数
相除的余数部分
i = 5
j = 3
print(i%j) # 5 / 3 余数是 2
** 幂运算
i = 5
j = 3
print(i**3) # 5 * 5 * 5
// 取整除
i = 5
j = 3
print(i//j) # 1 相除的整数部分
+= i=i+1 同等于 i += 1
同理可推出
-=
*=
/=
%=
**=
//=
字符串格式化
i = "python web开发"
s = "我来学习%s课程" % i # %s 这是一个占位符,后边将会用一个参数进行替代 注意这个参数是一个字符串
# s = "我%s来学习%s课程" %i %c # 不能多个参数
print(s)
print("我学习课程已经有%d个小时了" % 10)
print("我学习课程已经有%f个小时了" % 10.501)
%s 这是一个占位符,后边将会用一个参数进行替代 注意这个参数是一个字符串
%d 这是一个整数类型
%f 这是一个浮点数类型
format格式化
s = "我跟着%s,学习%s课程" % ("sky 老师","Python开发")
print(s) # 我跟着sky 老师,学习Python开发课程
s = "我跟着{},学习{}课程".format("sky老师111","Python开发1111")
print(s) # 我跟着sky老师111,学习Python开发1111课程
r = "{0}跟着{1},学习{2},{0}学习了{3}个小时".format(
"小明同学"," sky","Python开发课程",100)
print(r) # 明同学跟着 sky,学习Python开发课程,小明同学学习了100个小时
r = """{student_name}跟着{teacher_name},学习{course_name},{student_name}学习了{study_time}个小时
""".format(
teacher_name="sky",student_name="小明同学",course_name="Python开发课程",study_time=100)
print(r)
# 保留小数位的输出
print("请保留小数点后2位 {:.2f}".format(3.141592657)) # 请保留小数点后2位 3.14
# 保留符号
print("请保留小数点后2位 {:+.2f}".format(-3.141592657)) # 请保留小数点后2位 -3.14
print("请保留小数点后2位 {:+.2f}".format(+3.141592657)) # 请保留小数点后2位 +3.14
print("请保留小数点后2位 {:.0f}".format(3.141592657)) # 请保留小数点后0位 3
print("百分号的形式显示 {:.2%}".format(0.3141592657)) # 百分号的形式显示 31.42% 2 表示保留小位数
字符串操作
获取字符串中的某个字符
s = """怒发冲冠,凭栏处、潇潇雨歇。抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。莫等闲、白了少年头,空悲切。
靖康耻,犹未雪。臣子恨,何时灭。
驾长车,踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。待从头、收拾旧山河,朝天阙。
"""
print(s[1]) # 根据角标获取字符串中的某个字符
in 和 not in
s = """怒发冲冠,凭栏处、潇潇雨歇。抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。莫等闲、白了少年头,空悲切。
靖康耻,犹未雪。臣子恨,何时灭。
驾长车,踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。待从头、收拾旧山河,朝天阙。
"""
print("三十aaa" in s) # 判断某个子字符串是否在此字符串中
# in 是字符串的成员运算符
# not in
print("三十aaa" not in s)
print("三十" not in s)
字符串的查找
s = """怒发冲冠,凭栏处、潇潇雨歇。抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。莫等闲、白了少年头,空悲切。
靖康耻,犹未雪。臣子恨,何时灭。
驾长车,踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。待从头、收拾旧山河,朝天阙。
"""
print(s.find("怒发")) # 可以查找单个字符或者子字符串 ,找到了返回该字符串的角标位置
print(s.find("老师")) # 如果没有找到,返回 -1
# 我们使用find来进行字符串内容查找时,如果查找到了内容返回内容相对应的索引值
# 如果没有查找到,那么返回-1
字符串的替换
s = """怒发冲冠,凭栏处、潇潇雨歇。抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。莫等闲、白了少年头,空悲切。
靖康耻,犹未雪。臣子恨,何时灭。
驾长车,踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。待从头、收拾旧山河,朝天阙。
"""
# replace
print(s.replace(",","%", 3)) # 最后一个参数 3 表示替换的个数,替换掉前面 3 个,
基于关键字搜索做的聊天机器人案例
rebot = "小可爱"
while True:
user_meassage=input("我说:")
if "名字" in user_meassage:
print("{0}:我叫{0}".format(rebot))
elif user_meassage.find("学习")>-1:
print("{0}:我跟着老师学习呀".format(rebot))
elif user_meassage.find("老师")>-1:
print("{0}:我真鄙视你呀,你连老师都不知道!".format(rebot))
elif "水果" in user_meassage:
print("{0}:我喜欢吃的水果有很多呀,比如说香蕉苹果大鸭梨呀".format(rebot))
elif "再见" in user_meassage:
print("{0}:再见,{0}会永远想你了,欢迎你再来聊天啊".format(rebot))
break
else:
print("{0}:对不起亲爱的朋友,我没有理解你说的是什么".format(rebot))