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)