Python学习日记(三)——Python基本数据类型(运算符、int、str、tuple、dict、range)
运算符
1、算数运算
2、比较运算
3、赋值运算
4、逻辑运算
5、成员运算
基本数据类型
1、数字
int(整型)
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
#加法实际上是调用__add__,先了解
n1 = 123
n2 = 456
print(n1 + n2)
print(n1.__add__(n2)) #ret——获取可表示的二进制最短位数
n1 = 4 #0000 0100
ret = n1.bit_length()
print(ret)
2、布尔值
"hello world"
- 索引
- 切片
#——索引——
s = "alex"
print(s[0])
print(s[1])
print(s[2])
print(s[3])
# print(s[4])
# 超出范围会报错:IndexError: string index out of range #显示范围
ret = len(s)
print(ret) #——切片——
s = "alex"
# 0=< 0,1 < 2
print(s[0:2]) #——for循环——
s = "alex"
for item in s:
print(item)
- 其它——移除空白,分割,长度
a1 = "sullivan"
#capitalize——首字母大写
ret = a1.capitalize()
print(ret)
#输出结果:Sullivan a1 = "sullivan"
#center(self, width, fillchar=None):
#内容居中,width:总长度;fillchar:空白处填充内容,默认无
ret = a1.center(20,'*')
print(ret)
#输出结果:******sullivan****** a1 = "sullivan is sulli"
#count——子序列的个数
ret = a1.count("a")
print(ret)
#输出结果:1
ret = a1.count("su")
print(ret)
#输出结果:2
ret = a1.count("su",0,4)
print(ret)
#输出结果:1 a1 = "sullivan"
#endwith——是否已 xxx 结束
#startwith——是否已 xxx 起始
print(a1.endswith('n'))
#输出结果:True
print(a1.endswith('u'))
#输出结果:False
#获取字符串大于等于0,小于2的位置,
print(a1.endswith('u',0,2))
#输出结果:True #content——将Tab键转换为空格
content = "hello\t999"
print(content)
print(content.expandtabs())
print(content.expandtabs(20)) #find——寻找子序列位置,如果没找到,返回 -1
#rfind——从右向左找
s = "sullivan is sulli"
print(s.find("ll")) #format——字符串格式化,动态参数,将函数式编程时细说
s = "hello {0},age {1}"
print(s)
#{0} 占位符
new1 = s.format('sullivan',19)
print(new1)
#输出结果:hello sullivan,age 19 #index——寻找子序列位置,如果没找到,报错
#和find功能一样,且find不报错,忽略掉就行
"""
都不用传参数
isalnum——判断是否是数字和字母
isalpha——判断是否是字母
isdigit——判断是否是数字
isspace——判断是否全是空格
istitle——判断是否是标题,首字母是否大写
isupper——判断是否全是大写
islower——判断是否全是小写
title——变标题
upper——变大写
lower——变小写
"""
a = "sullivan1"
print(a.isalnum())
print(a.isalpha())
print(a.isdigit())
print(a.isspace())
print(a.istitle())
print(a.isupper())
print(a.islower()) #join——连接
#li = ["prime","sullivan"] #列表类型中括号
li = ("prime","sullivan") #元组类型小括号
print("".join(li))
print("_".join(li))
print("***".join(li)) #ljust——内容左对齐,右侧填充
#rjust——内容右对齐,左侧填充
s = "Sullivan"
set = s.ljust(20,'_')
print(set)
#输出结果:Sullivan____________
set = s.rjust(20,'_')
print(set)
#输出结果:____________Sullivan #lstrip——去除左边的空格
#rstrip——去除右边的空格
#strip——去除左右两边的空格
s = " sulli "
news = s.lstrip()
print(news)
news = s.rstrip()
print(news)
news = s.strip()
print(news) #partition——按指定字符分割为前,中,后三部
#rpartition——从右向左找
s = "i love you"
ret = s.partition('love')
print(ret)
#输出结果:('i ', 'love', ' you') 元组类型 #replace——替换
s = "i love you"
ret = s.replace("i","I")
print(ret)
#输出结果:I love you #split——按指定字符分割
#rsplit——从右向左
s = "sullisulli"
ret = s.split("l")
print(ret)
#输出结果:['su', '', 'isu', '', 'i']
ret = s.split("l",1)
print(ret)
#输出结果:['su', 'lisulli']
ret = s.rsplit("l",1)
print(ret)
#输出结果:['sullisul', 'i'] #swapcase——大写变小写,小写变大写
s = "Sullivan"
print(s.swapcase())
#输出结果:sULLIVAN
4、列表
创建列表
name_list = ['alex', 'seven', 'eric']
或
name_list = list(['alex', 'seven', 'eric'])
基本操作
- 索引
- 切片
- 循环
name_list = ["prime","cirila","sullivan"] #——索引——
print(name_list[0])
#输出结果:prime #——切片——
print(name_list[0:2])
#输出结果:['prime', 'cirila'] print(name_list[2:len(name_list)])
#输出结果:['sullivan'] #——循环——
for i in name_list:
print(i)
"""
输出结果:
prime
cirila
sullivan
"""
- 追加
- 删除
- 长度
- 包含
name_list = ["prime","cirila","sullivan"] #append——向后追加
name_list.append('seven')
name_list.append('seven')
name_list.append('seven')
print(name_list) #count——元素出现的次数
print(name_list.count('seven')) #extend——扩展,批量添加数据
temp = [111,222,33,44]
name_list.extend(temp)
print(name_list) #index——获取指定元素的索引位置
print(name_list.index('cirila')) #insert——向指定索引位置插入数据
name_list.insert(1,'SB')
print(name_list) #pop——在原列表中移除掉最后一个元素,并将移除的元素赋值给a1
a1 = name_list.pop()
print(name_list)
print(a1) #remove——移除从左边数第一个元素
name_list.remove('seven')
print(name_list) #reverse——翻转
name_list.reverse()
print(name_list) #sort——排序
# name_list.sort()
# print(name_list)
#因为数字和字符都存在所以出错,了解即可 #del——删除指定索引位置
print(name_list)
del name_list[1]
print(name_list)
del name_list[2:3]
print(name_list)
上面程序的输出结果
['prime', 'cirila', 'sullivan', 'seven', 'seven', 'seven']
3
['prime', 'cirila', 'sullivan', 'seven', 'seven', 'seven', 111, 222, 33, 44]
1
['prime', 'SB', 'cirila', 'sullivan', 'seven', 'seven', 'seven', 111, 222, 33, 44]
['prime', 'SB', 'cirila', 'sullivan', 'seven', 'seven', 'seven', 111, 222, 33]
44
['prime', 'SB', 'cirila', 'sullivan', 'seven', 'seven', 111, 222, 33]
[33, 222, 111, 'seven', 'seven', 'sullivan', 'cirila', 'SB', 'prime']
[33, 222, 111, 'seven', 'seven', 'sullivan', 'cirila', 'SB', 'prime']
[33, 111, 'seven', 'seven', 'sullivan', 'cirila', 'SB', 'prime']
[33, 111, 'seven', 'sullivan', 'cirila', 'SB', 'prime']
5、元组
创建元组
ages = (11, 22, 33, 44, 55)
或
ages = tuple((11, 22, 33, 44, 55))
特点
1、元组和列表几乎是一样的
2、列表是可以进行修改的,元组是不能修改的
- 索引
- 切片
- 循环
- 长度
- 包含
name_tuple = ('prime','cirila') #——索引——
print(name_tuple[0])
#len,因为长度是2,但是字符的排序是从0开始的
print(name_tuple[len(name_tuple)-1]) #——切片——
print(name_tuple[0:1]) #——循环——
for i in name_tuple:
print(i) #count——计算元素出现的个数
print(name_tuple.count('prime')) #index——获取指定元素的索引位置
print(name_tuple.index('prime')) #删除
#del name_tuple[0],不支持删除
#TypeError: 'tuple' object doesn't support item deletion
上面程序的输出结果
prime
cirila
('prime',)
prime
cirila
1
0
6、字典(无序)
创建字典
person = {"name": "mr.hou", 'age': 18}
或
person = dict({"name": "mr.hou", 'age': 18})
常用操作:
- 索引
- 新增
- 删除
- 键、值、键值对
- 循环
- 长度
user_info = {
"name":"ciri",
"age":16,
"gender":'W'
}
#——索引——
print(user_info['name']) #——切片——,不能用。因为切片是连续的,自己定义的key没有连续性 #——循环——,默认输出所有的key
for i in user_info:
print(i)
for i in user_info.keys():
print(i)
"""
输出结果都是
name
age
gender
""" #输出所有的值
for i in user_info.values():
print(i)
"""
输出结果
ciri
16
W
""" #输出所有的键值对
for k,v in user_info.items():
print(k,v)
"""
输出结果
name ciri
age 16
gender W
""" #获取所有的键key,值value,键值对
print (user_info.keys())
print (user_info.values())
print (user_info.items())
"""
输出结果
dict_keys(['name', 'age', 'gender'])
dict_values(['ciri', 16, 'W'])
dict_items([('name', 'ciri'), ('age', 16), ('gender', 'W')])
""" #clear——清楚所有的内容
user_info.clear()
print(user_info) #get——根据key获取值,如果key不存在,可指定一个默认值,不指定会返回None
val = user_info.get('age')
print(val)
val = user_info.get('age111')
print(val)
val = user_info.get('age111','123')
print(val)
"""
输出结果
16
None
123
"""
#索引取值时key不存在,会报错;get则会返回none,所以推荐用get #has_key 检查字典中指定key是否存在,python3里没有了,但是可以用in代替
ret = 'age' in user_info.keys()
print(ret) #update——更新
print(user_info)
test = {
"a1": 123,
"a2": 456
}
user_info.update(test)
print(user_info)
"""
输出结果
{'name': 'ciri', 'age': 16, 'gender': 'W'}
{'name': 'ciri', 'age': 16, 'gender': 'W', 'a1': 123, 'a2': 456}
""" #del——删除指定索引的键值对
del test['a1']
print(test) #pop——获取并在字典中移除,可以传参数,移除指定的值
#popitem——不能传参数,从尾部移除
set = user_info.popitem()
print(set)
print(user_info)
set = user_info.pop('name')
print(set)
print(user_info)
"""
输出结果
('gender', 'W')
{'name': 'ciri', 'age': 16}
ciri
{'age': 16}
"""
其它
1、for循环
li = [11,22,33,44]
for item in li:
print item
2、enumrate
为可迭代对象添加序号
enumerrate在循环的时候会加上一列,相当于变成了键值对
li = ["电脑","鼠标垫","U盘","游艇"]
for key,item in enumerate(li,start=1):
print(key,item)
inp = input("请输入商品:")
#字符串(str)转换成数字(int)
inp_num = int(inp)
print(li[inp_num-1])
3、range和xrange
指定范围生成指定的数字
python2.7
range在2.7里,创建指定范围里的所有数
xrang只在2.7里面有,不会一次性创建所有的数
python3
在python3中只有range,且效果等同于27里的xrange
print range(1, 10)
# 结果:[1, 2, 3, 4, 5, 6, 7, 8, 9] print range(1, 10, 2)
# 结果:[1, 3, 5, 7, 9] print range(30, 0, -2)
# 结果:[30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2]
练习题
一、元素分类
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
#写法一
li = [11,22,33,44,55,66,77,88,99,90]
l1 = []
l2 = []
for i in li:
if i <= 66:
l1.append(i)
else:
l2.append(i) temp = {"k1": l1,"k2": l2}
print(temp) #写法二
li = [11,22,33,44,55,66,77,88,99,90]
dic = {
"k1": [],
"k2": [],
}
for i in li:
if i <=66:
dic['k1'].append(i)
else:
dic['k2'].append(i)
print(dic)
二、查找
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:
b = i.strip()
b = b.title()
if b.endswith("c") and b.startswith("A"):
print(b) for i in tu:
b = i.strip()
b = b.title()
if b.endswith("c") and b.startswith("A"):
print(b) for i in dic.values():
b = i.strip()
b = b.title()
if b.endswith("c") and b.startswith("A"):
print(b)
三、输出商品列表,用户输入序号,显示用户选中的商品
li = ["电脑","鼠标垫","U盘","游艇"]
for i,j in enumerate(li,start=1):
print(i,j)
inp = input("请输入商品:")
num = int(inp)
len_li = len(li)
if num > 0 and num <= len_li:
print(li[num-1])
else:
print("商品不存在!")
四、购物车
功能要求:
- 要求用户输入总资产,例如:2000
- 显示商品列表,让用户根据序号选择商品,加入购物车
- 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
- 附加:可充值、某商品移除购物车
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
car_list = {} #{"商品名":{"价格" : 699,"个数" : 1}}
i1 = input("请输入您的总资产:")
asset_all = int(i1)
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
for i in goods:
print(i["name"],i["price"])
#输出商品列表
#循环购物
while True:
i2 = input("请选择商品,按y退出")
if i2 == "y":
break
for item in goods:
if item["name"] == i2:
name = item["name"]
#判断购物车是否有此类商品
if name in car_list.keys():
car_list[name]["num"] = car_list[name]["num"] + 1
else:
car_list[name] = {"num":1,"single_price":item["price"]}
print("购物车:",car_list)
#结算
all_price = 0
for k,v in car_list.items():
n = v["single_price"]
m = v["num"]
all_sum = m * n
all_price = all_price + all_sum
if all_price > asset_all:
print("购买失败——穷逼")
else:
print("购买成功")
五、用户交互,显示省市县三级联动的选择
dic = {
"河北": {
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
},
"河南": {
"郑州": ["中原", "惠济", "金水"],
"开封": ["龙庭", "金明", "顺河"],
},
"山西": {
"太原": ["小店", "迎泽", "杏花岭"],
"大同": ["南郊", "新荣", "阳高"],
} }
dic = {
"河北": {
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
},
"河南": {
"郑州": ["中原", "惠济", "金水"],
"开封": ["龙庭", "金明", "顺河"],
},
"山西": {
"太原": ["小店", "迎泽", "杏花岭"],
"大同": ["南郊", "新荣", "阳高"],
} }
#循环输出所有的省
for x in dic:
print(x)
i1 = input("请输入省份:")
#循环输出选择省的市
a = dic[i1]
for y in a:
print(y)
i2 = input("请输入市:")
#循环输出选择市的区
a = dic[i1][i2]
for z in a:
print(z)
i3 = input("请输如区:")
print("地址为:",i1,i2,i3)
Python学习日记(三)——Python基本数据类型(运算符、int、str、tuple、dict、range)的更多相关文章
- Python学习(三) —— 基本数据类型
基本数据类型 一.整数类型(int) 32位机器,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647 64位机器,整数的位数是64位,取值范围位 ...
- Python学习日记(三) 学习使用dict
数据按类型可划分为: 不可变数据类型(可哈希):元祖.string.int.bool 可变数据类型(不可哈希):dict.list 集合本身是可变数据类型,元素是不可变数据类型 字典中的key必须是不 ...
- Python学习日记(三十六) Mysql数据库篇 四
MySQL作业分析 五张表的增删改查: 完成所有表的关系创建 创建教师表(tid为这张表教师ID,tname为这张表教师的姓名) create table teacherTable( tid int ...
- Python学习日记(三十三) Mysql数据库篇 一
背景 Mysql是一个关系型数据库,由瑞典Mysql AB开发,目前属于Oracle旗下的产品.Mysql是目前最流行的关系型数据库管理系统之一,在WEB方面,Mysql是最好的RDBMS(Relat ...
- Python学习日记(三十八) Mysql数据库篇 六
Mysql视图 假设执行100条SQL语句时,里面都存在一条相同的语句,那我们可以把这条语句单独拿出来变成一个'临时表',也就是视图可以用来查询. 创建视图: CREATE VIEW passtvie ...
- Python学习日记(三十九) Mysql数据库篇 七
Mysql函数 高级函数 1.BIN(N) 返回N的二进制编码 ); 执行结果: 2.BINARY(str) 将字符串str转换为二进制字符串 select BINARY('ASCII'); 执行结果 ...
- Python学习日记(三十四) Mysql数据库篇 二
外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...
- Python学习日记(三十七) Mysql数据库篇 五
pymsql的使用 初识pymysql模块 先在数据库中创建一个用户信息表,里面包含用户的ID.用户名.密码 create table userinfo( uid int not null auto_ ...
- Python学习日记(三十五) Mysql数据库篇 三
使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...
- Python学习日记(三十二) hmac检验客户端的合法性和socketsever模块
Hmac模块 其实这个模块类似hashlib模块,它能将一些重要的信息通过算法加密成密文,让信息更具有安全性. 关于hmac加密算法的了解:它的全名是哈希运算消息认证码(Hash-based Mess ...
随机推荐
- GDB数据库SQL操作平台
GDB数据库SQL操作平台 开发本软件的初衷:由于计算数据库要素层属性的时候,涉及到要计算多个字段,或者要根据代码计算名称,得一个一个的筛选并计算,过程比较繁琐,于是就想能不能通过像处理SQLServ ...
- 转录组测序(RNA-seq)技术
转录组是某个物种或者特定细胞类型产生的所有转录本的集合.转录组研究能够从整体水 平研究基因功能以及基因结构,揭示特定生物学过程以及疾病发生过程中的分子机理,已广泛应 用于基础研究.临床诊断和药 ...
- maven项目打包和编译跳过单元测试和javadoc
代码中可能由于单元测试.注释(方法中的参数)或者maven javadoc插件的问题导致无法打包,影响工作,为避免这两种情况可以在打包时输入命令: mvn clean install -Dmaven. ...
- 编程模型&编程思想
编程模型 1.面向对象编程OOP 2.面向切面编程AOP Java静态接口,Java动态代理,字节码提升. 面向切面的两个方面: 拦截判断:方法,注解,参数,异常 拦截执行:前置,后置,返回,异常 3 ...
- nodejs入门API之path模块
Path模块在各个系统上的差异 Path模块API解析 一.Path模块在各个系统上的差异 path模块提供用于处理文件路径和目录路径的使用工具. let path = require('path') ...
- Java 之 HashMap 集合
一.HashMap 概述 java.util.HashMap<k,v> 集合 implements Map<k,v> 接口 HashMap 集合的特点: 1.HashMap 集 ...
- pcntl
<?php function my_pcntl_wait($childProcessCode){ $pid = pcntl_fork(); if($pid>0){ pcntl_wait($ ...
- vim文件时自动添加作者、时间、版权等信息
在工作中,搞运维的工程师往往会编写或完善自动化脚本时,都会手动添加表头注释,例如版权声明.作用.时间等信息提示,如果每次都手动编辑添加会大大消耗时间,所有我们可以利用快捷方法来节省时间,一种是手动在家 ...
- 第五章、Celery分布式系统
Celery 官方 Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/la ...
- java与.net_20190726
特性与注解 方法首字母 Java没有ref和out关键字 Java的main方法与C#的Main方法不一样: Java的io类和C#不一样. java的jsp和aspx还是很类似的. Java的ser ...