Python全栈开发之2、运算符与基本数据结构
运算符
一、算数元算:
读者可以跟着我按照下面的代码重新写一遍,其中需要注意的是,使用除的话,在python3中可以直接使用,结果是4没有任何问题,但是在python2中使用的话,则不行,比如 9/2 在pytnon2中 得出的结果则是4,如果要修正这一结果,读者需要在代码上加上一句 from __future__ import division 即可。
a=20
b=10
print('a+b=%s' %(a+b))
print('a-b=%s' %(a-b))
print('a*b=%s' %(a*b))
print('a/b=%s' %(a/b))
print('a%b={}'.format(a%b))
print('b**a=%s' %(b**a))
print('9//2=%s' %(9//2))
二、比较运算
比较运算的结果返回的值是bool值,为True和False,一般用来控制程序执行的流程,比如说下面的代码:
if a<=b:
# 执行xxx
else:
# 执行×××
三、赋值运算符
赋值运算比较简单,基本跟算数元算一样,读者感觉有什么疑惑的话可以自行跟着上面的例子敲一遍代码。
四、逻辑运算
逻辑运算返回的值也是bool值,True或False,一般也是根据返回值来控制程序流程
五、成员运算
成语运算主要用来判断某一元素是否在某种元素集合中,可以看下下面的例子加深体会
a="abcdefg"
b="d"
if b in a :
print("d元素在a字符串中")
else:
print("d元素不在a字符串") c=[1,2,3,4]
d=5
if 5 in c :
print("1在c列表")
else:
print("1不在c列表")
数据类型
一、数字(int)
Python可以处理任意大小的正负整数,但是实际中跟我们计算机的内存有关,在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1。对于int类型,需要掌握的方法不多,看下面的几个例子:
a=4
print(a.bit_length()) # 4在二进制中可以用最少3位 100 来表示4,所以输出3
print(int('4')) #将字符串4转换成整数4 # int还可下面的将二进制的字符串转换成整数, base=2 代表前面的字符串是二进制。
print(int('1010',base=2)) # 输出10
二、字符串(str)
字符串的常用功能太多了,这里我例举几种常见的功能,具体请看下面的代码
s="abcdef ghg k"
print(s.title()) #将字符串转换成标题,输出 Abcdef Ghg K print(s.capitalize()) #将字符串首字母大写,输出 Abcdef ghg k print(s.count('d',0,len(s))) #计算出子串 'd'在母串中出现的次数,默认是在整个母串中查找,
#可以在后面跟两个参数指定起始位置查找,这里我指定了在(0,len(s))中查找,
#其中len(s)代表获取字符串长度 print(s.startswith('a')) #判断字符串是否以什么开头,这里输出True, print(s.find('g',0,len(s))) #查找子串第一次在母串中出现的位置,这里输出7,同样可以自己指定位置范围来搜查 print(s.upper()) #将字符串转换成大写,这里输出ABCDEF GHG K print(s.join(['a','b','c'])) #用字符串 s 来连接列表['a','b','c'] 输出 aabcdef ghg kbabcdef ghg kc print(s.strip()) #移除两侧空格 print(s.split()) #分割字符串,返回一个列表 这里输出['abcdef', 'ghg', 'k'] print(s.replace('g','G',1)) #替换,默认全部替换,可以设置为1,只替换一次,这里只替换一次输出abcdef Ghg k print(s[0:4]) #切片,[0:4]代表将字符串s的前面4位取出来,这里输出 abcd
三、列表(list)
列表是Python内置的一种数据类型是列表,是一种有序的集合,可以随时添加和删除其中的元素。
l=['a','b','cc',4] #定义一个列表 l.append(5) #添加一个元素,l=['a', 'b', 'cc', 4, 5] l.pop() #从尾部删除一个元素,l=['a', 'b', 'cc', 4] l.remove('a') #从列表中移除 'a',l=['b', 'cc', 4] l.extend(['gg','kk']) #添加一个列表['gg','kk'], l=['b', 'cc', 4, 'gg', 'kk'] l.reverse() #反转一个列表,l=['kk', 'gg', 4, 'cc', 'b'] print(l.count('kk')) #某元素出现的次数 输出 1 print(l.index('gg')) #元素出现的位置,输出 1 for i in l: #循环输出列表元素
print(i) print(l[0:4:2]) #列表切片,以步长2递增,输出['kk', 4]
四、元组(tuple)
tuple和list非常类似,但是tuple一旦初始化就不能修改,tuple也是有序的,tuple使用的是小括号标识。
t=('a','b','b','c') #定义一个元组 print(t.index('b')) #索引出元素第一次出现的位置,还可以指定在某一范围里查找,这里默认在整个元组里查找输出1 print(t.count('b')) #计算元素出现的次数,这里输出2 print(len(t)) #输出远组的长度,这里输出4 for i in t:
print(i) #循环打印出元组数据 print(t[1:3]) #切片 输出('b','b')
五、字典(dict)
字典是无序的,使用键-值(key-value)存储,具有极快的查找速度。
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} d.get('Bob') #根据key获取values,如果不存在返回None,这里输出75 d.pop('Bob') #根据键删除某一元素 d={'Michael': 95, 'Tracy': 85} d['Jason']=99 #新增元素 d={'Michael': 95, 'Tracy': 85, 'Jason': 99} print(len(d)) #输出字典长度,这里输出3 print('Jason' in d) #python3 中移除了 has_key,要判断键是否存在用in for i in d:
print(i) #循环默认按键输出 for i in d.values(): #循环按值输出
print(i) for k,v in d.items(): #循环按键值输出
print(k,v)
补充
一 、enumrate
为一个可迭代的对象添加序号,可迭代的对象你可以理解成能用for循环的就是可迭代的。默认是编号是从0开始,可以设置从1开始
li = ["手机", "电脑", '鼠标垫', '游艇']
for k, i in enumerate(li,1):
print(k,i)
1 手机
2 电脑
3 鼠标垫
4 游艇
二、range和xrange
在python2中有xrange和range,其中range会一次在内存中开辟出了所需的所有资源,而xrange则是在for循环中循环一次则开辟一次所需的内存,而在Python3中没有xrange,只有range ,但是python3的range代表的就是xrange。range用来指定范围,生成指定的数字。
for i in range(10): #循环输出所生成的 0-9
print(i) for i in range(1,10,2): #输出所生成的 1 3 5 7 9
print(i)
课后习题
一、元素分类
有如下值集合 [11,22,33,44,55,66,77,88,99],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
l= [11,22,33,44,55,66,77,88,99]
bignum=[]
smallnum=[]
dir={}
for num in l:
if num>66:
bignum.append(num)
if num<66:
smallnum.append(num)
else:
pass
dir['k1']=bignum
dir['k2']=smallnum
print(dir)
二、查找
li = ["alec", " aric", "Alex", "Tony", "rain"]
tu = ("alec", " aric", "Alex", "Tony", "rain")
dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"} for i in li:
if i.strip().capitalize().startswith('A') and i.strip().endswith('c'):
print(i)
for i in tu:
if i.strip().capitalize().startswith('A') and i.strip().endswith('c'):
print(i)
for i in dic.values():
if i.strip().capitalize().startswith('A') and i.strip().endswith('c'):
print (i)
三、输出商品列表,用户输入序号,显示用户选中的商品
#方法一
l1=[1,2,3,4]
l2=["手机", "电脑", '鼠标垫', '游艇']
d=dict(zip(l1,l2))
print(d)
num=input("请输入商品编号:")
print("你选择的商品为 %s" %d[int(num)]) #方法二
li = ["手机", "电脑", '鼠标垫', '游艇']
for k, i in enumerate(li):
print(k,i)
k=input("请输入商品编号:")
print("你选择的商品为 %s" % li[int(k)])
四、购物车
功能要求:
- 要求用户输入总资产,例如:2000
- 显示商品列表,让用户根据序号选择商品,加入购物车
- 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
- 附加:可充值、某商品移除购物车
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
gouwuche={"电脑":0,"鼠标":0,"游艇":0,"美女":0} #购物车中商品数量
jiage={"电脑":1999,"鼠标":10,"游艇":20,"美女":998} #商品价格表
sum=0 #购物车中商品总价
flag=True
total=int(input("请输入您的资产: "))
for k, i in enumerate(goods):
print(k,i)
while flag:
n=input("购买商品请输入1,购买完成请输入2,离开请输入3: ")
if 1==int(n):
k=input("请输入你要购买的商品编号: ")
num = input('请输入你要购买商品的数量:')
if int (k)>3:
print("你输入的商品编号有误,请重新操作!")
continue
else:
print("你选择的商品%s已添加到购物车" % goods[int(k)]['name'])
gouwuche[goods[int(k)]['name']]+=int(num)
for k,v in gouwuche.items():
sum+=jiage[k]*v
elif 2==int(n):
while 1:
if total < sum:
print("你的余额不足,请充值,或者移除某些商品!")
n = input("充值请输入1,移除商品请输入2: ")
if 1 == int(n):
k = input("请输入充值面额: ")
total += int(k)
elif 2 == int(n):
k = input("请输入要移除商品的编号:")
num = input("请输入要移除商品的数量:")
if gouwuche[goods[int(k)]['name']] < int(num):
print("你输入的数量大于购物车中商品的数量,请重新操作!")
continue
else:
sum-=jiage[goods[int(k)]['name']]*int(num)
else:
print("你输入的数字有误,请重新操作!")
break
else:
print("操作成功,你的余额还剩%s" % (total - sum))
flag=False
break
elif 3==int(n):
break
else:
print("你输入的数字有误请重新操作!")
continue
五、用户交互,显示省市县三级联动的选择
dic = {
"河北": {
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
},
"湖南": {
"长沙":['a','b','c'],
"株洲":['d','e','f']
},
"湖北": {
"武汉":['g','h','i'],
"黄石":['j','k','l']
}
}
for k in dic.keys():
print(k)
flag=True
while flag:
n=input("请输入你所在省:")
for k in dic.keys():
if n in dic.keys():
if k == n:
for i in dic[n].keys():
print(i)
w = input("请输入你所在的城市:")
for i in dic[n].keys():
if w in dic[n].keys():
if i == w:
for k in dic[n][w]:
print(k)
s=input("请输入你所在的县:")
for j in dic[n][w]:
if s in dic[n][w]:
if j==s:
print("你所在的位置是:%s省%s市%s县" % (n,w,s))
flag = False
break
else:
print('不存在,请重新输入')
break
else:
print('不存在,请重新输入')
break
else:
print('不存在,请重新输入')
break
Python全栈开发之2、运算符与基本数据结构的更多相关文章
- 战争热诚的python全栈开发之路
从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...
- python全栈开发之OS模块的总结
OS模块 1. os.name() 获取当前的系统 2.os.getcwd #获取当前的工作目录 import os cwd=os.getcwd() # dir=os.listdi ...
- Python全栈开发之MySQL(二)------navicate和python操作MySQL
一:Navicate的安装 1.什么是navicate? Navicat是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设.它的设计符合数据库管理员.开发人员及中小 ...
- Python全栈开发之14、Javascript
一.简介 前面我们学习了html和css,但是我们写的网页不能动起来,如果我们需要网页出现各种效果,那么我们就要学习一门新的语言了,那就是JavaScript,JavaScript是世界上最流行的脚本 ...
- Python全栈开发之1、输入输出与流程控制
Python简介 python是吉多·范罗苏姆发明的一种面向对象的脚本语言,可能有些人不知道面向对象和脚本具体是什么意思,但是对于一个初学者来说,现在并不需要明白.大家都知道,当下全栈工程师的概念很火 ...
- Python全栈开发之MySQL(三)视图,存储过程触发器,函数,事务,索引
一:视图 1:什么是视图? 视图是指存储在数据库中的查询的SQL语句,具有简单.安全.逻辑数据独立性的作用及视点集中简化操作定制数据安全性的优点.视图包含一系列带有名称的列和行数据.但是,视图并不在数 ...
- Python全栈开发之21、django
http://www.cnblogs.com/wupeiqi/articles/5237704.html http://www.cnblogs.com/wupeiqi/articles/5246483 ...
- Python全栈开发之17、tornado和web基础知识
一.web基础知识 学习web框架之前,先来看一下web基础知识,首先要明白其本质就是socket,用户对应一个socket客户端,但是如果从socket开始开发web应用程序那么效率太了,正确的做法 ...
- python全栈开发之路
一.Python基础 python简介 python数据类型(数字\字符串\列表) python数据类型(元组\字典) python数据类型(集合) python占位符%s,%d,%r,%f prin ...
随机推荐
- python析构函数
class Test(object): def __init__(self, name): self.name = name print('这是构造函数') def say_hi(self): p ...
- spring boot 2.0.3+spring cloud (Finchley)5、路由网关Spring Cloud Zuul
Zuul作为微服务系统的网关组件,用于构建边界服务,致力于动态路由.过滤.监控.弹性伸缩和安全. 为什么需要Zuul Zuul.Ribbon以及Eureka结合可以实现智能路由和负载均衡的功能:网关将 ...
- 「LibreOJ β Round #4」子集
https://loj.ac/problem/526 题目描述 qmqmqm有一个长为 n 的数列 a1,a2,……,an,你需要选择集合{1,2,……,n}的一个子集,使得这个子集中任意两个元素 i ...
- HDU 3977 斐波那契循环节
这类型的题目其实没什么意思..知道怎么做后,就有固定套路了..而且感觉这东西要出的很难的话,有这种方法解常数会比较大吧..所以一般最多套一些比较简单的直接可以暴力求循环节的题目了.. /** @Dat ...
- 816B. Karen and Coffee 前缀和思维 或 线段树
LINK 题意:给出n个[l,r],q个询问a,b,问被包含于[a,b]且这样的区间数大于k个的方案数有多少 思路:预处理所有的区间,对于一个区间我们标记其(左边界)++,(右边界+1)--这样就能通 ...
- Linux rpm yum 等安装软件
任何程序都是先写代码,拿到源码去编译得到一个目标程序. 1 编译的过程复杂有需要准备编译的环境,和硬件有关,32位64位,内核的不同等等所以需要编译多次 Java特殊但是他需要安装jvm, ...
- MySQL的连接类型
首先我们来创建两个数据表: 结构: 我们用内连接来查看一下: select * from test1 join test2 on test1.aid=test2.aid; 由于内连接是等值连接,所 ...
- python 版本zabbix_sender
python版本的zabbix_sender: 使用方法: 1.导入 : from zbx_send import info 2.实例化: test=info() 3.支持 ...
- 26、Python的可变类型和不可变类型?
Python的每个对象都分为可变和不可变 可变:列表.字典 不可变:数字.字符串.元祖 对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其 ...
- Network POJ - 3694 (LCA+tarjan+桥)
题目链接:https://vjudge.net/problem/POJ-3694 具体思路:首先可以通过缩点的方式将整个图变成一个树,并且树的每条边是桥,但是我们可以利用dfn数组将整个图变成树,这样 ...