01-Python-变量、数据类型和数据运算
1、变量命名规范
- 变量名只能包含字母、数字和下划线。变量名可以字母或者下划线开头,但不能以数字开头。例如,variable_1合法,但是1_variable就是非法的变量命名。
- 变量名不能包含空格,但可以使用下划线来分割单词。例如,Hello_World合法,但是Hello World就非法。
- 不能将关键字以及函数名作为变量名。
- 变量名应该既简短又具有描述性。
- 变量名对大小写敏感。
- 慎用容易混淆的字母和数字。例如,字母l和数字1,字母o和数字0。
1.1、 变量的赋值
1 name = "Druid chen" 2 name2 = name 3 4 print(name,name2) #打印结果为Druid chen Druid chen 5 6 7 name = "Druid" #改变变量的值 8 9 print(name,name2) #打印结果为Druid Druid chen
2、数据运算
2.1、数字类型
常见的有整数、浮点型。对于浮点数的运算结果,小数位数可能是不确定的(精度损失问题戳我了解详情)。
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。python浮点型默认精度为17,如果想要获取高精度浮点型,可以使用"decimal模块(默认28位) + getcontext().prec = 位数" 来实现。
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
2.2、布尔值
真或假(1 或 0。1代表为真,0代表为假)。可用bool()方法来判断真假。
2.3、字符串
字符串就是一系列的字符。在Python中,用引号(单引号'...',双引号"..."皆可)括起来的都是字符串。字符串不能修改。
2.3.1、修改字符串大小写
name = "ada lovelace" print(name.title()) #title()以首字母大写的方式显示字符串中的每个单词。
name = "Ada Lovelace" print(name.upper()) #输出全为大写 print(name.lower()) #输出全为小写
2.3.2、合并(拼接)字符串
1 first_name = "ada" 2 last_name = "lovelace" 3 full_name = first_name + " " + last_name #使用+来合并first_name、空格和last_name 4 5 print("Hello, " + full_name.title() + "!" ) 6 7 '''message = "Hello, " + full_name.title() + "!" 8 print(message)'''
这里的连接符“+”会在内存中新开辟一块内存空间,因此因该避免此种用法。
2.3.3、制表符、换行符
空白泛指任何非打印字符,例如空格、制表符和换行符。\t为制表符,\n为换行符。
2.3.4、删除空白
1 language = 'Python ' 2 language #'Python ' 3 language #'Python' 4 5 language.rstrip() #'Python'。rstrip()方法可以去掉末尾空格,但只是暂时的,language的值没有被改变。 6 language #'Python '。空格仍然在。 7 8 language = language.rstrip() #要永久删除字符串中的空白,则可以将结果保存在变量中。 9 language #'Python' 10 11 #lstrip()方法可以删除字符串左边的空格;#strip()方法删除字符串左右的空格。
2.3.5、常用方法
1 name.capitalize() #首字母大写 2 name.casefold() #大写全部变小写 3 name.center(50,"-") #输出 '---------------------Alex Li----------------------' 4 name.count('lex') #统计 lex出现次数 5 name.encode() #将字符串编码成bytes格式 6 name.endswith("Li") #判断字符串是否以 Li结尾 7 "Alex\tLi".expandtabs(10) #输出'Alex Li', 将\t转换成多长(10)的空格 8 name.find('A') #查找A,找到返回其索引, 找不到返回-1
2.3.6、字符串格式化
1 #format方法 2 msg = "my name is {}, and age is {}" 3 msg.format("alex",22) #'my name is alex, and age is 22' 4 5 msg = "my name is {1}, and age is {0}" 6 msg.format("alex",22) #'my name is 22, and age is alex' 7 8 msg = "my name is {name}, and age is {age}" 9 msg.format(age=22,name="alex") #'my name is alex, and age is 22' 10 11 _username = input("请输入你的用户名:") 12 _age = input("请输入你的年龄:") 13 print("你好:{name},你的年龄:{age}".format(name=_username,age=_age)) 14 15 #format_map 16 msg = "my name is {name}, and age is {age}" 17 msg.format_map({'name':'alex','age':22}) #'my name is alex, and age is 22' 18 19 #使用% 20 'Hello, %s' % 'world' #'Hello, world' 21 22 'Hi, %s, you have $%d.' % ('Michael', 1000000) #'Hi, Michael, you have $1000000.' 23 24 #格式化整数和浮点数还可以指定是否补0和整数与小数的位数: 25 '%2d-%02d' % (3, 1) #' 3-01',第一个2的意思为两位,0的意思为用数字0占一位,第二个2的意思为两位 26 '%.2f' % 3.1415926 #'3.14',取小数点后两位 27 28 #有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%: 29 'growth rate: %d %%' % 7 #'growth rate: 7 %'
那么我们应该用什么%还是format呢?看下面的例子:
c = (250, 250) # 定义一个坐标值 s1 = "敌人坐标:%s" % c # 使用%来格式化 print(s1) # 代码会报typeerror错误 ---》TypeError: not all arguments converted during string formatting
怎么解决该问题呢?
c = (250, 250) # 定义一个坐标值 s1 = "敌人坐标:%s" % (c, ) # 用该格式 print(s1) # 正常输出结果 ---》敌人坐标: (250, 250)
而如果我们使用format,那么就不会存在该问题:
c = (250, 250) s1 = "敌人坐标: {}".format(c) print(s1) # 正常输出结果 ---》敌人坐标: (250, 250)
因此在日常使用中应该选format方法。
补充:在Python3.6中新增加了f-strings方法
name = "Druid" age = 8 t = f" My Name is {name}, I'm {age} years old " print(t) # 输出结果 ---》 My Name is Druid, I'm 8 years old
3、数据运算
3.1 运算符
算术运算:
比较运算:
赋值运算:
逻辑运算:
成员运算:
身份运算:
位运算:
按位取反运算规则详解猛击我
3.2 运算符优先级
4、 使用函数str()避免类型错误
1 age = 23 2 msg = "Happy " + age + "rd Birthday" 3 4 print(msg) #会报'age'的类型错误。 5 6 #使用下面的方法可避免该错误 7 8 age = str(23) #将int类型的23转换为字符串,以字符2和3处理。 9 msg = "Happy " + age + "rd Birthday" 10 11 print(msg)
5、逻辑运算
- and:如果X为False, 则X and Y返回False,否则返回Y的值。(短路运算)
- or:如果X为True,则X and Y返回True,否则返回Y的值。(短路运算)
- not:如果X为True,则not X返回False。
6、三元运算
result = value1 if 条件 else value2
- 如果条件为真:result = value1
- 如果条件为假:result = value2
1 a,b,c = 1,2,3 2 3 d = c+1 if a < b else c #如果判断条件为真,则返回d=c+1 4 print(d) #结果为4 5 6 d = c+1 if a > b else c #否则返回c 7 print(d) #结果为3