python--day2--基础数据类型与变量
笔者:QQ: 360212316
python控制语句
for循环语句示例:
for i in range(10): print(i)
for循环语句示例1:
for i in range(10): print(i) else: print("for循环正常完成")
多层for循环语句示例:
for i in range(10): for j in range(10): print(i, j)
for循环猜年龄示例:
feng_age = 39 for i in range(3): guess_age = int(input("年龄:")) if guess_age == feng_age: print("猜对了") break elif guess_age >= feng_age: print("猜大了") elif guess_age <= feng_age: print("猜小了 ")
break:跳出整个循环
continue:跳出当前层的循环,执行下一个程序
exit():退出整个程序
变量:
变量的作用:保存状态(程序的运行本质是一系列状态变化,变量的目的就是用来保存状态,变量值的变化就构成了程序的不通结果)
数据类型:
什么是数据类型及数据类型分类:
程序的本质就是驱使计算机去处理各种状态变化,这些状态分为很多种:
例如:
张三-------------------------------------------------->字符串
1000------------------------------------------------->数字
衣服,鞋子,帽子-------------------------------------->列表
python中的数据类型
python使用对象模型来存储数据,每一个数据类型都是一个内置的类,每建设一个数据,实际就是在初始化生成一个对象,即所有数据都是对象。
对象的三个特性:
身份:内存地址,可以用id()获取
类型:决定了该对象可以保存什么类型值,可执行何种操作,遵循什么规则,可用type()
值:对象保存的真实数据
注意:我们定义的数据类型,只需要这样a=1,内部生成1这样的对象会自动触发,我们无需关心
这里定义的字符串、数字、列表等都是数据类型(用来描述某中状态),除此之外还有很多其他数据类型,处理不同的类型就要需定义不同的数据类型:
标准类型 | 其他类型 |
数字 | 类型type |
字符串 | null |
列表 | 文件 |
元组 | 集合 |
字典 | 函数 /方法 |
类 | |
模块 |
标准数据类型
数字:
定义 a=1
特性:
1、只能存放一个值
2、一经定义,不可更改
3、直接访问
数字分类:整型,布尔,浮点,复数
整型:
python中的整型分为长整型和整型,python2.7是分整型和长整型之分,python3中不区分长整型和短整型。
布尔值bool:
Ture和Flase
1和0。
非0的值都为真,0为假。
浮点数float:
python的浮点数就是小学中的小数,类似C语言中的double.
在运算中,整数与浮点数运算的结果是浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学计数法来表示时,一个浮点数的小数点位置是可变的,比如1.23*109和12.3*108是相等的。浮点数可以用数学写法,比如1.23、3.1415,-9.88,等等。但是对于很大或者很小的浮点数,就必须需用科学计数法表示,把10用e代替1.23*109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的而浮点数运算则可能会有四舍五入的误差。
复数complex:
复数是由实数部分和虚数部分组成,一般形式为x+yj,其中的x是实数部分,y是复数的虚数部分,这里的x和y都是实数。
注意:虚数部分的字母j大小写都可以。
例子:
C:\Users\xiaofeng>python Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 1.3 + 2.5j == 1.3 + 2.5j True >>>
数字相关内建函数:
函数名 | 功能 | 示例 |
int | 当传入参数为小数时,直接去掉小数部分 | int(3.5) 去掉小数部分得3 |
round | 四舍五入去小数 | round(3.5) 结果得4 |
math.floor | 类似int,离取原小数最近但大于原小数的数 | math.floor(3.5) 结果得4 |
float | 浮点型工程函数 | 略 |
complex | 复数工厂函数 | 略 |
bool | 布尔型工程函数 | 传入参数非空,非0,非None均返回Ture |
abs | 绝对值工程函数 | abc(-1)得1 |
coerce | 接受两个参数,把数据转成相同类型的,返回一个元组 | corece(-1,3,2)得(-1.0,3,2) |
divmod | 返回元组,包含商和余数 | divmod(93,10)得(9,3) |
pow | 取平房 | pow(2,3,3)相当于2**3%3得2, pow(2,3)等同于2**3 |
hex | 十进制转16进制 | hex(10),得0xa,0x开头表示16进制 |
oct | 十进制转8进制 | oct(10),得012,0开头代表8进制 |
ord | 根据ASCII表,将字符转换成十进制 | ord('a'),得97 |
chr | 根据ASCII表,将十进制转换成字符 | char('97')得'a' |
字符串:
定义:它是一个有序的字符的集合,用于存储和表示基本的文本信息,‘’或“”或''' '''中间包含的内容称为字符串
特性:
1、只能存放一个值
2、不可变
3、按照从左到右的顺序定义的字符集合,下边从0开始顺序访问,有序
注意:
1、字符串的单引号和双引号都无法取消特定字符的含义,如果想让引用内所有的字符均取消特殊含义,就需要在引号前面加r,例如:name=r'zhang\tsan'
2、unicode字符串与r连用,r必须在前面,如name=ur'zhang\tsan'
字符串的创建:
'hello word' "hello word" '''hello word''' """hello word"""
字符串常用操作:
移除空白:
例子:
msg6 = ' name ' print(msg6.strip()) # strip去除两边空格 结果: name
切片:
例子1:
name = 'hello world' print(name[::2]) 结果: hlowrd
例子2
name = 'hello world' print(name[:3:2]) 结果: hl
例子3
name = 'hello world' print(name[1:3]) 结果: el
索引:
例子:
name = 'hello world' print(name.index('l')) 结果: 2
长度:
例子:
name = 'hello world' print(len(name)) 结果: 11
字符串的各种操作:
name = "Pan Feng" print(name.capitalize()) #字符串首字母大写 结果: Pan feng =============================================================
name = "Pan Feng" print(name.center(50,'-')) #输出结果总长度50,两边用自定义符号补全 结果: ---------------------Pan feng--------------------- =========================================================== name = "Pan Feng" print(name.casefold()) #大写转小写 结果: pan feng
============================================================
name = "Pan Feng" print(name.count('n')) #统计字符串中的字母n出现了几次 结果: 2 可选参数: sub -- 搜索的子字符串 start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。 end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。 ========================================================= name = "Pan Feng" print(name.encode()) #字符串转二进制 结果: b'Pan Feng' =========================================================== name = "Pan Feng" print(name.endswith('g')) #检测字符串是否以字母"g"结尾,如果是则返回TRYE,如果不是返回flase 结果: True 可选参数: suffix -- 该参数可以是一个字符串或者是一个元素。 start -- 字符串中的开始位置。 end -- 字符中结束位置。 =========================================================
name = "Pan \tFeng" print(name.expandtabs(tabsize=20)) #如果字符串中加入了\t参数,可可以使用expandtebs执行table的长度 结果: Pan Feng name = "Pan Feng" print(name.find('n')) #查找字符'n'在字符串中出现的位置,字符串也可以且切片 结果: 2 可选参数: str -- 指定检索的字符串 beg -- 开始索引,默认为0。 end -- 结束索引,默认为字符串的长度。
========================================================
name = "Pan Feng" print(name[2]) #字符串切片 结果: n names = "my name is {name},age is {age}" print(names) print(names.format(name="panfeng",age="22")) 占位符,站位符必须在字符串中定义,定义必须使用大括号,.format()中的变量名是大括号之中的内容 ========================================================= name = "Pan Feng 2" print(name.isalnum()) #阿拉伯数字和字母的组合,并且不能有空格和特殊字符,如果有特殊字符,结果为flase, 结果: False 相反: name = "PanFeng2" print(name.isalnum()) True ======================================================== name = "PanFeng" print(name.isalpha()) #判断纯英文字母为true,并且不能有空格 结果: True =====================================================
name = "Pan Feng" print(name.isalpha()) 结果: True ===================================================== name = "12" print(name.isdecimal()) #判断字符串是否是十进制,十进制结果为True 结果: True name = "panfeng" print(name.isdecimal()) 结果: False ====================================================== name = "Pan Feng" print(name.isdigit()) #判断字符串是否为整数,是整数结果为True,反之flase 结果: False ================================================== print("A_23".isidentifier()) 判定字符串是否是一个合法的标识符,如果是返回结果True,反之flase 结果: True ================================================== name= "pan feng" print(name.islower()) #判断字符串是否全部是小写,如果是返回结果Ture,反之Flase 结果: Ture ================================================ name= "PAN FENG" print(name.isupper()) #判定字符串是否全部是大写,如果是返回结果Ture,反之Flase 结果: True ================================================== name= "Pan Feng" print(name.istitle()) #判定字符串首字母是不是大写,如果是则返回Ture,反之Flase。 如果一个单词中有两个大写字母,结果也是flase 结果: True =============================================== print(" ".isspace()) #判断字符串是否全部是空格,如果是则返回Ture,反之Flase。 结果: True ========================================= name= "Pan Feng" print(name.index('e')) #索引字母e的位置,从0开始数,空格也算,一个空格占一位 结果: 5 ============================================= name= "Pan Feng" print("abc12".isnumeric()) ============================================== print(''.join(['1','2','3','4'])) 结果: 1234 #返回通过指定字符连接序列中元素后生成的新字符串。 print('+'.join(['r','a','b','b'])) 结果: r+a+b+b #返回通过指定字符连接序列中元素后生成的新字符串。 s1 = "-" s2 = "" seq = ("r", "u", "n", "o", "o", "b") # 字符串序列 print (s1.join( seq )) print (s2.join( seq )) ============================================== name = "pan feng" print(name.ljust(50,'*')) #字符串左对齐,50是整个字符串长度,不都用‘-’补全,不指定用空格补全 结果: pan feng****************************************** 可选参数: width -- 指定字符串长度。 fillchar -- 填充字符,默认为空格。 ================================================ name = "pan feng" print(name.rjust(50,'-')) ##字符串左对齐,50是整个字符串长度,不都用‘-’补全,不指定用空格补全 结果: ------------------------------------------pan feng 可选参数: width -- 指定字符串长度。 fillchar -- 填充字符,默认为空格。 ====================================================== 用于截掉字符串左边的空格或指定字符。 name = " pan feng" print(name.lstrip()) #左边去掉空格回车 str = " this is string example....wow!!! "; print( str.lstrip() ); str = "88888888this is string example....wow!!!8888888"; print( str.lstrip('8') ); 结果: pan feng this is string example....wow!!! this is string example....wow!!!8888888 ============================================================= p = str.maketrans("abcde","12345") #定义字符串与数字的对应表 name = "pan feng" print(name.translate(p)) 将定定义对应表和字符串替换 结果: p1n f5ng ======================================================== name = "Pan Feng" print(name.lower()) #大写转小写 结果: pan feng =================================================== name = "- --Pan Feng---- --" print(name.replace("P","z")) #替换单个字符 结果: - --zan Feng---- -- ================================================= name = "- --Pan Feng---- --" print(name.rjust(50,'-')) 结果: ------------------------------ --Pan Feng---- -- ================================================= name = "- --Pan Feng---- --" print(name.rfind('g')) 结果: 12 ============================================== name = "- --Pan Feng---- --" print(name.rindex('g')) 结果: 12 ========================== name = " - --Pan Feng---- -- " print(name.rsplit()) 结果: ['-', '--Pan', 'Feng----', '--'] =============================================== name = " - --Pan Feng---- -- " print(name.rstrip()) #右边去掉空格回车 结果: - --Pan Feng---- -- ======================================== name = " - --Pan Feng---- -- " print(name.lstrip()) #去掉左边空格 结果: - --Pan Feng---- -- ========================================== 以空格划分生成列表,默认 name = " - --Pan Feng---- -- " print(name.split()) 结果: ['-', '--Pan', 'Feng----', '--'] ===================================== 判断字符串以什么开头 name = " - --Pan Feng--\n-- -- " print(name.startswith('F')) 结果: False ====================================== 大小写互换,小写变大写,大写变小写 name = " - --Pan Feng--\n-- -- " print(name.swapcase()) 结构: - --pAN fENG-- ======================================== 去掉两边空格 name = " - --Pan Feng---- -- " print(name.strip()) 结果: - --Pan Feng---- -- ====================================== name = " - --Pan feng---- -- " print(name.title()) 结果: - --Pan Feng---- -- ========================================== name = " - --Pan feng---- -- " print(name.zfill(50)) 结果: 0000000000000000000000000 - --Pan feng---- --
列表中最常用的操作
去除空格
切片
长度
索引
数据运算符
算数运算符:
以下例子a=10,b=20
运算符 | 描述 | 示例 |
+ | 加法运算 | a + b 得 30 |
- | 减法运算 |
a - b 得 -10 |
* | 乘法运算 | a * b 得 200 |
/ | 除法运算 | b / a 得 2 |
% | 取模 - 将%号左边的值除以%号右边的值并且将得到的结果的余数返回 | 10%5得0 ,10%3 得1, 20%7 得6 |
** |
幂 - 返回x的y次幂,就是返回多少次方 |
2**8 得256 |
// | 取整除 - 返回x除以y的商的整数部分 | 9//2得4 , 9.0//2.0得4.0 |
比较运算符:
运算符 | 描述 | 示例 |
== | 判定两个对象是否相等 | (a == b) is not true. |
!= | 判断两个对象是否不相等 | (a != b) is true. |
> | 大于 返回a是否大于b | (a > b) is not true. |
< | 小于 返回a是否小于b | (a < b) is true. |
>= | 大于等于 返回a是否大于等于b | (a >= b) is not true. |
<= | 小于等于 返回a是否小于等于b | (a <= b) is true. |
赋值运算符:
运算符 | 描述 | 示例 |
= | 赋值,将右边的值赋值个左边的变量名 | c = a + b 将会把a+b的结果赋值给c |
+= | 自加赋值,将+=左边的值与+=右边的值相加,然后再把结果赋值给+=左边的值 | c += a相当于 c = c + a |
-= | 自减赋值 | c -= a相当于 c = c - a |
*= | 自乘赋值 |
c *= a 相当于 c = c * a |
/= | 自除赋值 | c /= a 相当于 c = c / a |
%= | 自取模赋值 | c %= a 相当于 c = c % a |
**= | 自求冥赋值 |
c **= a 相当于 c = c ** a |
//= | 自取正赋值 |
c //= a 相当于 c = c // a |
位运算:
下表中a=60,b=13
运算符 | 描述 | 实例 |
& | 按位与运算符:参与运算的两个值,如果两个相应位都是1,则该位的结果为1,否则为0 | (a & b)输出结果为12,二进制解释0000 1100 |
| | 按位或运算,只要对应的两个二进制位有一个为1时,结果位就为1 | (a|b)输出结果61,二进制解释0011 1101 |
^ | 按位异或运算,当两对应的二进制位相异,结果为1 | (a^b)输出结果为49,二进制解释0011 0001 |
~ | 按位取反运算,对数据的每个二进制位取反,及把1变为0,把0变为1 | (~a)输出结果为-61,二进制解释:11000011在一个有符号二进制的补码形式 |
<< | 左移动运算符:运算数的各二进制位全部左移动若干位,由<<右边的数指定移动的位数,高位丢弃,低位补0 | a<<2,结果为240,二进制解释:1111 0000 |
>> | 又移动运算符,把>>左边的运算数的各二进制位全部右移动若干位,<<右边的数指定移动的位数 | a>>2,结果为15,二进制解释:0000 1111 |
逻辑运算:
以下例子a=10,b=20
运算符 | 逻辑表达式 | 描述 | 实例 |
and | x and y | 布尔“与”,如果x为flase, x and y返回false,否则返回y的计算值 | (a and b)返回20 |
or | x or y | 布尔“或”,如果x是非0,它返回x的值,否则它返回y的计算值 | (a or b)返回10 |
not | not x | 布尔'非',如果x为true,返回flase,如果x为flase,则返回Ture | not(a and b)返回flase |
成员运算符:
运算符 | 描述 | 实例 |
in | 如果在指定的序列中找到值返回Ture,否则返回Flase | x在y的序列中,如果x在y的序列中,则返回Ture |
not in | 如果在指定的序列中没有找到值,返回Ture,否则返回Flase | x不再y的序列中,如果x不再y的序列中,则返回flase |
运算符优先级,由上到下,优先级从高到低
运算符 | 描述 |
** | 指数(最高优先级) |
~+- | 按位反转,一元加号和减号 |
*/%// | 乘、除、取模、取整数 |
+- | 加减法 |
>> << | 右移左移运算符 |
& | 位‘and’ |
^| | 位运算符 |
<=、<、>、>= | 比较运算符 |
==、!== | 等于不等于 |
=、 %=、 /=、 //=、 -=、 +=、 *=、 **= | 赋值运算符 |
is 、is not | 身份运算符 |
in、not in | 成员运算符 |
not or and | 逻辑运算符 |
列表
列表的创建
names = ['aaa', 'bbb', 'ccc']
列表的用法例子:
# 定义列表 names = ['aaa', 'bbb', 'ccc'] print(names) # 列表的增加 names.append('ddd') print(names) # 列表的插入 names.insert(3,'111') print(names) # 列表的删除 # 方法1 names.remove('111') print(names) # 方法2 names.pop(3) print(names) # 方法3 del names[2] print(names) names[3] = "111" print(names) # 列表的统计 print(names.count("111")) # 列表的扩展 names1 = ["xiao1", "xiao2"] names.extend(names1) print(names) # 列表的反转 names.reverse() print(names) # 列表的排序 names.sort() print(names) # 列表的下标获取 print(names.index('aaa')) # 列表的切片 print(names[0:3])
购物车程序
product_list = [ ["iphone", 5800], ["mac", 12800], ["coffer", 30], ["bike", 2000] ] shopping_list = [] gong_zi = input("工资:") if gong_zi.isdigit(): gong_zi = int(gong_zi) while True: for i, items in enumerate(product_list): print(i,items[0],items[1]) user_chose = input("商品编号:") if user_chose.isdigit(): user_chose = int(user_chose) if user_chose < len(product_list) and user_chose >= 0: p_items = product_list[user_chose] if p_items[1] <= gong_zi: gong_zi -= p_items[1] shopping_list.append(p_items) print("您购买的商品是\033[31;1m%s\033[0m,您的余额是\033[31;1m%s\033[0m" % (p_items[0],gong_zi)) else: print("\033[32;1m购买不起,你的余额:\033[0m\033[31;1m%s\033[0m" % gong_zi) else: print("\033[41;1m商品不存在\033[0m") elif user_chose == 'quit': print("-----shopping-------") for shopp in shopping_list: print(shopp) print("您的余额是\033[31;1m%s\033[0m" % gong_zi)