文章目录
思维导图
前言
一、三大最最最基本函数
1、Python len()函数
2、Python input()函数
3、Python print()函数
二、格式化字符串与类型变换
1、格式化字符串
1.1. %占位符方法
1.2 format函数方法
2、数据类型转换
三、Python中的运算符
1、算术运算符
2、赋值运算符
2.1 基本赋值运算符
2.2 更多赋值运算符
3、位运算符
4、比较运算符
5、逻辑运算符
6、三目操作符
7、运算符优先级
总结
上一篇文章为大家讲解了变量和简单的数据类型,我们先回顾一下上一节内容吧!
变量主要讲了变量的概念、变量的命名规则、变量的赋值规则。
字符串主要讲了字符串的概念以及字符串的几种操作方法。
数值类型主要讲了三大类型:整型、浮点型、复数以及它们进行相互转换时的误差来源。
注释主要讲了三种注释方法:单行注释、单引号注释以及双引号多行注释。
还没有学习的铁子们可以点击此链接简单回顾一下:http://t.csdnimg.cn/PmHWL
当大伙儿学习完上一篇内容,你是否有这样的疑问:计算题好难,什么时候才可以让计算机帮我算术呀?
大家先别急,今天的内容我就带大家学习一些超级频繁使用的函数及运算符!学完本章内容,Python就可以成为你身边的算术高手,让你不再为复杂的计算烦恼!本章内容有点长,大家注意慢慢理解消化!
学过C语言的铁子们都知道,C语言中我们使用strlen()来获取字符串长度,还要包含头文件#include
len()函数的格式如下:
len(string)
举个栗子:
string = "handsome boy"
print(len(string))
#输出结果为12
但是当我们用指头一个个数的时候会惊奇地发现只有11个字母,这是因为在字符串中空格也被算作一个字符。如果你不想将空格算入,可以使用上一篇讲到过的replace函数去除空格。
然而在实际应用中,仅仅知道字符串长度是远远不够的,我们还需要获取字节数。
回顾尘封已久的大学计算机知识,我们知道:不同的字符所占的字节数不同,数字、英文字母、小数点、下划线以及空格,各占一个字节,而一个汉字可能占 2~4 个字节,这取决于采用的编码方 式。
我们可以使用使用encode()方法将字符串编码为字节字符串,然后使用leng()函数获取字节字符串的字节数
text = "点赞收藏"
byte_text = text.encode() # 将字符串编码为字节字符串
byte_count = len(byte_text) # 获取字节字符串的字节数
print(byte_count)
C语言中我们使用scanf函数来进行输入,在Python中我们则使用input()函数来获取用户输入的字符串。
举个栗子:
msg = input("请输入你的年龄:")
print(type(msg))#输出结果总是
print(msg)
type可以获取数据类型,我们会发现无论是输入何种数据类型,输出结果总说是字符串。这是因为input()返回的是字符串类型,因此读取数字时需要进行类型转换(本篇会讲解)。
age = int(input("请输入你的年龄:"))
print(type(age))#只要输入整数,输出结果总为
print(age)
用 print() 函数只输出了一个变量想必大家不再陌生,但实际上 print() 函数其实可以同时输出多个变量,而且它还具有更多功能。
将其与刚才讲过的input()函数结合起来,我们可以这样写:
name = input("你的名字:")#Hunter乔乔
age = int(input("你的年龄:"))#18
print("我的名字是:", name, "我的年龄是:", age)
#输出结果:我的名字是: Hunter乔乔 我的年龄是: 18
由于print()函数末尾自动会提行(有一个隐藏的end = "\n")如果我们不想提行,可以在末尾添加一个, end = ""
然有的铁子们可能会问:如果我想将数值添加到字符串中间呢?这就会用到格式化字符串的方法,我们立马安排!
在C语言中我们使用占位符进行格式化输出,应对多个数据填入的情况。那么在Python中,我们有两种方法进行格式化输出:%占位符方法和format函数方法
Python 提供了“%”对各种类型的数据进行格式化输出。
%占位符使用方法如下
第一部分:字符串+占位符:“我的年龄是%d”,将占位符包含在字符串中
第二部分:用%分隔开,前面是第一部分,后面是变量或表达式的值
第三部分:变量或表达式的值,age
age = 18
print("我的年龄是%d岁"%age)
#输出结果为:我的年龄是18岁
类似于“%d”这样的“格式化操作符”在字符串中相当于一 个占位符,它会被后面的变量或表达式的值代替。
name = "Hunter乔乔"
age = 18
print("我的名字是%s,我的年龄是%d岁" % (name, age))
#输出结果为:我的名字是Hunter乔乔,我的年龄是18岁
如果格式化字符串中包含多个占位符,第三部分也应该对应地提供多个变量,并且使用()将这些变量括起来。
那么除了%d这样的占位符,还有哪些占位符呢?
%s(常用) |
字符串 |
%d(常用) | 整数 |
%f(常用) | 浮点数 |
%o |
八进制整数 |
%x | 十六进制整数 |
%% | 字面上的%符号 |
%g | 智能选择使用 %f 或 %e 格式 |
%c | 格式化字符及其 ASCII 码 |
%r | 使用 repr() 将变量或表达式转换为字符串 |
当使用上面的占位符时,可指定转换后的最小宽度
在默认情况下,转换出来的字符串总是右对齐的,不够宽度时左边补充空格。Python 也允许在最小宽度之前添加一个标志来改变这种行为,Python 支持如下标志:
-:指定左对齐。
+:表示数值总要带着符号(正数带“+”,负数带“-”)
0:表示不补充空格,而是补充 0
这三个符号是可以同时存在的!
在最小宽度之后可以使用一个整数指定浮点数小数点后的数字位数;
如果转换的是字符串转换后的字符串的最大字符数。
这个整数被称为精度值,放在最小宽度之后,中间用"."隔开。
age = 18
print("我的年龄是%5d" % age)
print("我的年龄是%05d" % age)
print("我的年龄是%+05d" % age)
print("我的年龄是%-+05d" % age)
print("我的年龄是%-+05.3f" % age)
#输出结果为:我的年龄是 18(原因是右对齐,前面补充3个字符的空格)
#输出结果为:我的年龄是00018(原因是"0"要求空格被0所替换)
#输出结果为:我的年龄是+0018(原因是"+"要求带上符号,符号算作一个字符)
#输出结果为:我的年龄是+18(原因是"-"要求左对齐,无需添加空格)
#输出结果为:我的年龄是+18.000(原因是".3"要求精确到小数点后三位)
使用大括号 {} 作为占位符,在字符串中指定位置插入变量。用法结构与使用占位符相似,但是不用在意数据类型。
name = "Hunter乔乔"
age = 18
print("我的名字是{},我的年龄是{}".format(name, age))
#输出结果为:我的名字是Hunter乔乔,我的年龄是18岁
当然还可以通过索引的方式去匹配参数,但务必注意索引从0开始计算,这就允许我们打乱参数顺序。
name = "Hunter乔乔"
gender = "男"
age = 18
print("我的名字是{2},我的年龄是{0}岁".format(age, gender, name))
#输出结果为:我的名字是Hunter乔乔,我的年龄是18岁
甚至我们还可以通过参数名来匹配参数。
print("我的名字是{name},我的年龄是{age}岁".format(age=18, name="Hunter乔乔"))
#我的名字是Hunter乔乔,我的年龄是18岁
不仅如此,我们还可以将两者混合使用
age = 18
name = "Hunter乔乔"
print("我的名字是{1},我的年龄是{0}岁,我是一名{gender}生".format(age, name, gender="男"))
#我的名字是Hunter乔乔,我的年龄是18岁,我是一名男生
不过,如果我们把sex="男"放在age和name中间就会报错
age = 18
name = "Hunter乔乔"
print("我的名字是{2},我的年龄是{0}岁,我是一名{gender}生".format(age, gender="男",name))
#报错信息:位置实参位于关键字实参后面
所以这里一定要小心,我们通过参数名来匹配的参数一定要放在通过索引匹配的参数后面!
我们在前面“Python input()函数”一节中说到过,读取input()函数传来的数值时要用到类型转换。
再举一个栗子:
height = 180
print("作者身长" + height)
#警告信息:意外类型:(int)可能的类型:(LiternalString)(str)
这种报错表明:计算机识别到“作者身长”和height不是同一种数据类型,不能直接相加,那我们该怎么办呢?这就需要将两者转换为同一种数据类型。
但是转换哪一个变量或值又是一个问题!如果我们将非数字字符串强制转换为整型也会疯狂报错。这是因为在使用类型转换函数时,提供给它的数据必须是有意义的。那么我们就可以选择将数值转换为字符串。
height = 180
print("作者身长" + str(height))
#运行结果:作者身长180
这样的说法就完全正确。
那么还有哪些类型转换呢?请看下表:
int(x) | 将 x 转换成整数类型 |
float(x) | 将 x 转换成浮点数类型 |
complex(real,[,imag]) | 创建一个复数 |
str(x) | 将 x 转换为字符串 |
repr(x) | 将 x 转换为表达式字符串 |
eval(str) | 计算在字符串中的有效 Python 表达式,并返回一个对象 |
chr(x) | 将整数 x 转换为一个字符 |
ord(x) | 将一个字符 x 转换为它对应的整数值 |
hex(x) | 将一个整数 x 转换为一个十六进制字符串 |
oct(x) | 将一个整数 x 转换为一个八进制的字符串 |
看过Hunter乔乔的“分别与轮回:C语言的分支循环语句(一)”的铁子们都知道,他C语言的运算符这一章讲得相当好。今天我们在Python中也来讲讲这运算符到底是怎么个事儿?
在数学世界里,我们常用的有“+,-,×,÷,^”等等。但在Python的世界里,我们需要处理更多的数据,意味着我们的算术运算符就更多。
算术运算符是处理四则运算的符号,常用的有如下几种:
+ | x加y |
- | x减y |
* | x乘y |
/ | x除y |
% | 取余,返回x除以y余数 |
// | 整除,返回x除以y商的整数部分 |
** | 乘方,返回x的y次方 |
举几个简单的栗子:
print(15 % 4)#3
print(17 // 4)#4
print(2 ** 8)#64
赋值运算符在所有计算机语言中的用法几乎都相同,所以学会一节总比六节强!
赋值运算符可以用于将某些值赋值给变量,在运用中,我们可以直接将"="右边的值直接赋值,也可以将其进行某些运算后赋值。
当我们进行最简单的赋值时,即仅仅将值赋值给变量时,我们会用到赋值运算符“=”
但它还有一种用法,就是将变量赋值给变量,前提是赋值的变量有具体的值,这样就可以实现值的传递。我们也还可以将变量和数进行一些运算后再进行赋值
a = 3
b = a
c = a + 1
print(a, b)
#输出结果:3 3 4
在实际运用中,我们需要将变量加上某个数再赋值给它本身,例如常用于计数的变量cnt
cnt = 5
cnt += 1
print(cnt)
#输出结果为6
我们通常将算术运算符与=结合形成功能更强大的赋值运算符
运算符 | 功能 | 示例 | 展开式 |
---|---|---|---|
= | 最基本赋值 | x=y | x = y |
+= | 加赋值 | x+=y | x=x+y |
-= | 减赋值 | x-=y | x=x-y |
*= | 乘赋值 | x*=y | x=x*y |
/= | 除赋值 | x/=y | x=x/y |
%= | 取余数赋值 | x%=y | x=x%y |
**= | 幂赋值 | x**=y | x=x**y |
//= | 取整数赋值 | x//=y | x=x//y |
|= | 按位或赋值 | x|=y | x=x|y |
^= | 按位与赋值 | x^=y | x^=y |
<<= | 左移赋值 | x<<=y | x = x << y,这里的 y 指的是左移的位数 |
>>= | 右移赋值 | x >>= y | x = x >> y,这里的 y 指的是右移的位数 |
有关位运算符的概念大家是不是还很疑惑呢?请看下一节
位运算符通常在图形、图像处理和创建设备驱动等底层开发中使用。使用位运算符可以直接 操作数值的原始 bit 位。
在使用自定义的协议进行通信时,使用位运算符对原始数据进行编码和解码非常有效。
由于位运算符的概念对于初学者有些许难度,这里作者就不瞎讲了。
这里推荐CSDN博主「已注销」的博文《Python位运算符详解》(原文链接:http://t.csdnimg.cn/xuyUF)
在Python中,我们时常需要比较不等式的大小关系,并获取返回值。真为True,假为False
比较运算符 | 功能 |
---|---|
> | 大于,如果运算符前面的值大于后面的值,则返回 True |
>= | 大于或等于,如果运算符前面的值大于或等于后面的值,则返回True |
< | 小于,如果运算符前面的值小于后面的值,则返回 True |
<= | 小于或等于,如果运算符前面的值小于或等于后面的值,则返回 True |
== | 等于,如果运算符前面的值等于后面的值,则返回 True |
!= | 不等于,如果运算符前面的值不等于后面的值,则返回 True |
is | 判断两个变量所引用的对象是否相同,如果相同则返回 True |
is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回 True |
请务必注意==与is的区别!!!
== 用来比较两个变量的值是否相等,而 is 则用来比对两个变量引用的是否是同一个对象,是否为同一对象就要判断两对象引用的地址是否相同。
arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(arr1 == arr2)#True
print(arr1 is arr2)#False
print(arr1 is arr1)#True
另外,我们还可以通过id()函数来取地址,判断是否为同一对象
arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(arr1 == arr2)#True
print(arr1 is arr2)#False
print(arr1 is arr1)#True
print(id(arr1))#1807936508288
print(id(arr2))#1807936510144
由输出结果可知两者地址不同,固然不是同一对象
逻辑运算符是对真和假两种布尔值进行运算,返回值为布瓦类型
逻辑运算符 | 含义 | 基本格式 |
---|---|---|
and | 与 | a and b |
or | 或 | a or b |
not | 非 | not a |
这与C语言中的逻辑运算符虽然符号不同,但是含义却完全相同。如果还不明白的铁子们可以去看作者独家独立撰写的《分别与轮回:C语言的分支循环语句(一)》(原文链接:http://t.csdnimg.cn/CkA3k)
尽管逻辑运算符功能相似,但Python中三目操作符的功能和C语言中三目操作符的功能不相同
对比 | 符号 | 功能 |
---|---|---|
Python | exp1 if exp2 else exp3 | 判断exp2真假,真执行exp1,假执行exp3 |
C | exp1 ? exp2 : exp3 | 判断exp1真假,真执行exp2,假执行exp3 |
Python中的三目操作符可以进行嵌套
a = input("请输入a的值:")#5
b = input("请输入b的值:")#6
print("a大于b"if a > b else ("a小于b"if a < b else "a等于b"))#a小于b
Python 中运算符的运算规则是,优先级高的运算符先执行,优先级低的运算符后执行,同 一优先级的运算符按照从左到右的顺序进行。
运算符优先级:
逻辑运算符(或<与<非)
本篇内容较长,我们简单梳理一下:
首先我们讲了len(), input(), print()三大基本函数,这一块内容虽然简单但是很重要,大家务必要掌握。接着我们讲了格式化字符串,让我们能够将数据格式化地填入字符串。然而,当数据不能和字符串直接合并时,我们讲了类型转换。最后,我们讲了超多运算符,别看这些运算符在算式中只是一个个小小的符号,但是它们却却举足轻重,请大家务必复习回顾。
本篇内容作者真的花了超多时间翻阅书籍、查找资料和撰写文稿,因为这篇文章的内容实在太重要了!它的地位就如同数学中的四则运算,非常基础但是会伴随你的整个生涯。
所以拜托看到这里的各位务必熟练掌握,如果可以就给作者一个赞,感谢大家的支持!
由于作者时间有限,每篇内容也需花费较多时间撰写,后续内容将不定期更新,但频率应该会在两天一更或日更,记得关注哦~
如果发现文章中表述存在错误或有疑问,欢迎私信作者或者在评论区留言~
预祝大家新年快乐!