持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
语法
python的语法比较简单,采用缩进的方式,写出来的代码就像下面的样子:
num = int(input("请输入一个任意的数字,按回车键结束:"))
if num > 10:
print(num,"> 10")
print("if end")
else:
print(num,"<= 10")
print("else end")
运行上面的程序将会得到如下的输出:
请输入一个任意的数字,按回车键结束:100
100 > 10
if end
请输入一个任意的数字,按回车键结束:2
2 <= 10
else end
可以看到,这里没有使用常见的{}的形式包裹代码块,而是使用:和缩进的形式。虽然没有规定缩进是使用Tab还是四个空格,但是为了保持良好的编程习惯,应该坚持使用四个空格来表示缩进。
数据类型
在Python中,能够直接处理的数据类型有以下几种:
整数
Python可以处理任意大小的整数,包括负整数,在程序中的表示方法和在数学中的表示方法是一样的:100,0,-100等。
还是使用上面的代码,我们这次分别输入一个很大的整数和一个负数看一下结果:
输入一个负数
请输入一个任意的数字,按回车键结束:-100
-100 <= 10
else end
输入一个很大的正整数
请输入一个任意的数字,按回车键结束:123421432423534256436546754745634523445234123134546576586798746352412341243234523
123421432423534256436546754745634523445234123134546576586798746352412341243234523 > 10
if end
由于计算机使用的是二进制,所以有时候使用十六进制表示整数比较方便,十六进制使用0x前缀和0~9,a~f来表示,例如0x1fddd等,如下所示:
num2 = 0x100
if num2 > 100:
print(num2,"> 100")
else:
print(num2,"<= 100")
这个程序的输出如下:
256 > 100
可以看到,十六进制的0x100其实表示的是十进制的256。
对于一些很大的数,例如10000000000,很难数清楚到底有多少个0,Python允许在中间使用_进行分隔,因此这个数就可以写成10_000_000_000,对于十六进制的数也可以写成这种形式:
num3 = 10_0000_0000_0
if(num3 == 10000000000):
print(num3,"= 10000000000")
else:
print(num3,"!= 10000000000")
通过上面的代码可以看到,我们并不是必须将一个很大的数每隔三位进行分隔,任意进行分隔也是可以的,只是每隔三位进行分隔更容易阅读,上面的代码运行结果如下:
10000000000 = 10000000000
浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学计数法表示时,一个浮点数的小数点位置是可变的,比如1.29*10^9和12.9*10^8是完全相等的。浮点数可以用数学写法,例如1.23,0.02,-9.4等。但是对于很大或者很小的浮点数,则必须使用科学计数法表示,把10用e代替,比如上面的1.29*10^9就可以写成1.29e9或者12.9e8。对于很小的数比如0.000012则可以表示为1.2e-5等,如下所示:
num4 = 1.26e9
print("1.26×10^9 + 1 =",num4 + 1)
num5 = 0.0000000000000000000012
print("num5 =",num5)
运行上面的程序将会得到如下的结果:
1.26×10^9 + 1 = 1260000001.0
num5 = 1.2e-21
可以看到,对于一个很小的浮点数,在输出的时候自动帮我们转换为了科学计数法的形式。对于第一行的程序,如果这个数非常大,那么最终也会采用科学计数法的形式输出,同时这也意味着精度丢失:
num4 = 1.26e20
print("1.26×10^20 + 1 =",num4 + 1)
最终的输出为:
1.26×10^20 + 1 = 1.26e+20
可以看到,最后我们加上去的那个1被丢失了。
字符串
字符串是以单引号''或者双引号""括起来的任意文本,比如'abc',"123","a1b哈哈哈"等。需要注意的是:单引号和双引号本身只是一种表示方式,不是字符串的一部分,比如上面的'abc'其实就只包括a,b,c这三个字符。
如果我们在一个字符串中本身包含了单引号',那么就可以使用双引号""将字符串内容包起来,同样的,如果我们的字符串中包含了双引号"",那么就可以使用单引号''将字符串包起来。
str1 = '单引号包裹的字符串'
str2 = "双引号包裹的字符串"
str3 = "字符串中包含单引号,'嘿嘿嘿'"
str4 = '字符串中包含双引号,"哈哈哈哈"'
print(str1)
print(str2)
print(str3)
print(str4)
如果我们的文本中既包含单引号',又包含双引号"",此时可以使用转义字符\,如下所示:
#双引号中,单引号可以不加转义字符
str5 = "Hello \"Bob\",I'm Jack"
#单引号中,双引号可以不加转义字符
str6 = 'Hello "Bob",I\'m Jack'
#双引号中,单引号加上转义字符也没有问题
str7 = "Hello \"Bob\",I\'m Jack"
#单引号中,双引号加上转移字符也没有问题
str8 = 'Hello \"Bob\",I\'m Jack'
print(str5)
print(str6)
print(str7)
print(str8)
上面的程序输出如下:
Hello "Bob",I'm Jack
Hello "Bob",I'm Jack
Hello "Bob",I'm Jack
Hello "Bob",I'm Jack
转义字符可以转义很多字符,比如\n表示换行,\t表示制表符,如果字符\也需要被转义,那么可以使用\\来表示,如下所示:
#使用转义字符
str9 = "准备换行\n然后是制表符\t,不转义\,转义\\n"
print(str9)
上面的程序输出如下:
准备换行
然后是制表符 ,不转义\,转义\n
可以看到,对于\n会执行换行操作,但是有时候我们本身不需要换行,只是想将\n这个字符串显示出来,这个时候就可以使用\\n首先对\进行转义,之后就不会有换行的情况了。
有时候我们的文本中的特殊字符比较多,如果一个一个字符去进行转义不仅需要耗费大量的工作,还可能会出现错误,在这个时候,我们可以使用r''来表示''内部的字符不进行转义,如下的代码所示:
#不使用r''之前的操作
str10 = '\\\t\\'
print(str10)
#使用r''
str11 = r'\\\t\\'
print(str11)
#使用r""
str12 = r"\\\t\\"
print(str12)
运行上面的程序可以得到如下的输出:
\ \
\\\t\\
\\\t\\
可以看到,不使用r''之前,单引号内的字符串被转义,使用了r''之后,原样输出了我们定义的字符串。同时,r''和r""的效果是一样的。
有时候我们的字符串中可能包含多个换行,在这种情况下,除了使用\n进行转义外,我们还可以使用'''...'''三个引号来定义字符串,这样输出的内容就是我们定义的原样的字符串,包括换行,如下所示:
#使用'''...'''原样输出字符串
str13 = '''
第一行
第二行\t第二行结束
第三行\\第三行结束
第四行\n第四行结束'''
print(str13)
#测试使用""""""输出字符串
str14 = """第一行
第二行\t第二行结束
第三行\\第三行结束
第四行\n第四行结束
"""
print(str14)
运行上面的程序,输出的内容如下:
第一行
第二行 第二行结束
第三行\第三行结束
第四行
第四行结束
第一行
第二行 第二行结束
第三行\第三行结束
第四行
第四行结束
上面程序的输出说明了以下问题:
'''...'''和"""..."""的效果是一样的- 从两次第一行的输出打印可以看出,输出是从
'''之后紧接着的字符开始的,第一个第一行打印之前有换行,第二个第一行打印之前没有换行。 - 从第四行结束的打印可以看出,输出是从结尾的
'''之前紧接着的字符结束的,第一个第四行结束之后没有换行,第二个第四行结束之后有换行。 '''内部的转义字符仍然可以生效。
在上面的代码中,'''...'''内部的转义字符仍然可以生效,但是有时候我们并不希望转义字符生效,这个时候我们就可以使用r'''...'''或者r"""..."""来达到不使转义字符生效的目的,如下所示:
str15 = r'''
第一行
第二行\t第二行结束
第三行\\第三行结束
第四行\n第四行结束
'''
print(str15)
str16 = r"""
第一行
第二行\t第二行结束
第三行\\第三行结束
第四行\n第四行结束
"""
print(str16)
上面的代码输出如下:
第一行
第二行\t第二行结束
第三行\\第三行结束
第四行\n第四行结束
第一行
第二行\t第二行结束
第三行\\第三行结束
第四行\n第四行结束
布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有True和False两个值,要么是True,要么是False,在Python中,可以直接使用True或者False(注意这里的首字母大写)表示布尔值,也可以通过布尔运算计算出来,如下所示:
print(True)
print(False)
print(3 > 2)
print(3 < 2)
上面的程序输出结果如下:
True
False
True
False
布尔值也可以通过and,or和not运算得到,如下所示:
#布尔值
print(True)
print(False)
print(3 > 2)
print(3 < 2)
# and运算符前后都为True最终的结果才为True
print("and运算符的操作:")
print(True and True)
print(True and False)
print(3 > 2 and 3 > 1)
print(3 > 2 and 3 < 0)
# or运算符只要前后有一个为True,最终的结果就是True,换句话说,就是or运算符前后均为False,最终的结果才是False
print("or运算符的操作:")
print(True or True)
print(True or False)
print(False or False)
print(3 > 2 or 3 > 1)
print(3 > 2 or 3 < 0)
print(3 < 2 or 3 < 1)
# not运算是非运算,它将一个布尔值取反
print("not运算符的操作:")
print(not True)
print(not False)
print(not 3 > 2)
上面的程序输出结果如下:
True
False
True
False
and运算符的操作:
True
False
True
False
or运算符的操作:
True
True
False
True
True
False
not运算符的操作:
False
True
False
布尔值经常用在条件判断中,如:
age = (int)(input("请输入你的年龄:"))
if(age > 18):
print("成年人")
else:
print("未成年人")
上面的程序输出结果如下:
请输入你的年龄:20
成年人
空值
空值是一个特殊的值,使用None表示,需要注意的是,空值和任何具体的值是不一样的,比如0,十一一个有具体含义的值,可以认为,空值的含义就是表示一个没有具体含义的值。
defineNull = None
print("空值:",defineNull)
输出如下:
空值: None
常量
常量就是赋值之后不能再修改的变量,比如数学中的Π就是一个常量,我们通常使用全部的大写字母来表示一个常量的名称:
PI = 3.1415926
print("Π =",PI)
上面的程序输出如下:
Π = 3.1415926
然而事实上,Python并没有提供任何的保护机制来保证一个常量在定义之后不能被修改,比如上面的PI,如果我们想在定义完这个常量之后再去修改它的值也是可以做到的,但是为了代码规范,当我们定义了一个常量之后,就不能再去修改它的值。
整数的除法
在Python中向我们提供了多种关于整数的除法操作,首先是最常用的,即便是两个整数相除,也是将这两个整数转化为浮点数再去做除法,最终获得的结果一定是浮点数,如下所示:
i1 =10
i2 = 9
i3 = 3
print("10 / 3 =",(i1 / i3))
print("9 / 3 =",(i2 / i3))
上面的程序输出如下:
10 / 3 = 3.3333333333333335
9 / 3 = 3.0
还有一种除法称为地板除,两个整数的除法仍然是整数,如下所示:
print("9 // 3 =",(9 // 3))
print("5 // 2 =",(5 // 2))
print("7 //4 =",(7 // 4))
上面的程序输出如下:
9 // 3 = 3
5 // 2 = 2
7 //4 = 1
可以看到,地板除并不会使用四舍五入的方法,而是直接使用我们数学上称作的商。
另外Python中还向我们提供了取余的方法,如下所示:
print("9 % 3 =",(9 % 3))
print("5 % 2 =",(5 % 2))
print("7 % 4 =",(7 % 4))
print("7 除以 4 商",(7 // 4),"余",(7 % 4))
上面的程序输出如下:
9 % 3 = 0
5 % 2 = 1
7 % 4 = 3
7 除以 4 商 1 余 3