python基础2

本节内容

  1. 列表、元组操作
  2. 字符串操作
  3. 字典操作
  4. 集合操作
  5. 文件操作
  6. 字符编码与转码 

一、列表、元组操作

列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

定义列表

>>> name = ['hongpeng',21,'ops']

通过下标访问列表中的元素,下标从0开始计数

>>> name[0]
'hongpeng'

>>> name[-1]#可以倒着取
'ops'

列表操作

(1)切片:取多个元素

>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
['Tenglan', 'Eric', 'Rain']
>>> names[1:-1] #取下标1至-1的值,不包括-1
['Tenglan', 'Eric', 'Rain', 'Tom']
>>> names[0:3] 
['Alex', 'Tenglan', 'Eric']
>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
['Alex', 'Tenglan', 'Eric']
>>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
['Rain', 'Tom', 'Amy'] 
>>> names[3:-1] #这样-1就不会被包含了
['Rain', 'Tom']
>>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
['Alex', 'Eric', 'Tom'] 
>>> names[::2] #和上句效果一样
['Alex', 'Eric', 'Tom']
View Code

 

(2)追加

>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
>>> names.append("我是新来的")
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
View Code

 

(3)插入

>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.insert(2,"强行从Eric前面插入")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']>>> names.insert(5,"从eric后面插入试试新姿势")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
View Code

 

(4)修改

>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
>>> names[2] = "该换人了"
>>> names
['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
View Code

 

(5)删除

>>> del names[2] 
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
>>> del names[4]
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> 
>>> names.remove("Eric") #删除指定元素
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.pop() #删除列表最后一个值 
'我是新来的'
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
View Code

 

(6)扩展

>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
View Code

 

(7)copy

>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]>>> name_copy = names.copy()
>>> name_copy
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
View Code

 

 
name1 = [1,'hongpeng',['hello','world',8]]#列表中可以嵌套列表
name2 = name1.copy()
print(name2)
输出[1, 'hongpeng', ['hello', 'world', 8]]name1 = [1,'hongpeng',['hello','world',8]]
name2 = name1.copy()
name2[2][2] = 88
print (name1)
输出[1, 'hongpeng', ['hello', 'world', 88]]
View Code
 
what the fuck!我明明把name2中的8替换为88,为什么name1中的8也变了????name1的值和name2的值有毛的关系啊??
原因是因为列表中如果还嵌套列表,那么copy只能copy第一层,第二层name1和name2都是共享一份数据,在内存中存在同一个地方。
想要copy之后改变name2二级列表里的值却不影响name1改怎么办呢?

只能用导入copy模块。
import copy
name1 = [1,'hongpeng',['hello','world',8]]
name2 = copy.deepcopy(name1)
name2[2][2] = 88
print(name1)
print(name2)输出
[1, 'hongpeng', ['hello', 'world', 8]]
[1, 'hongpeng', ['hello', 'world', 88]]
View Code
哦也!!!
 

(8)统计

>>> names
['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
>>> names.count("Amy")
2
View Code

 

(9)获取下标

>>> names
['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
>>> names.index("Amy")
2 #只返回找到的第一个下标
View Code

 

练习:

(1)

写一个列表,列表中包含本组成员 name = ['hong','peng','alex','tom','jack','dog','cat','tiger']

往中间插入两个其他组成员名字 name.insert(-2,'hello') name.insert(-2,'world')

取出第3-6的列表  name[2:7]

删除第7个人  name.remove('xx')

把刚才加入的其他组的人一次性删除  del name[4:6]

把组长名字加上备注  name[4] = "xxxxx" 

要求每隔一个取一个   print(name[0::2])[x:x:x]步长

 

(2)name = [0,1,2,3,3,9,9,9],把列表中的9全部替换为999

name = [0,1,2,3,3,9,9,9]
if 9 in name:num_of_ele = name.count(9)#统计9的个数for i in range(num_of_ele):position_of_ele = name.index(9)#循环得到含有9的索引name[position_of_ele] = 999#替换9为999print("[%s] 9 is/are in name,position:[%s]"%(num_of_ele,position_of_ele))
View Code

 

 

二、字符串操作

去空格
username = input('name:')
if username.strip() == 'hongpeng':print('welcome')

 

分割
names = 'hong,peng,hello'
name2 = names.split(",")
print("|".join(name2))#按|把列表里的元素合成字符串
 

 

判断有无空格
name = "hong peng"
print(''in name)

判断字符串中是否含有'o'
name = "hong peng"
print name.find('o')

 

判断输入的是否是数字
password = '123'
passwd = input('input your password:')
if passwd.isdigit():print('welcome')
else:print('wrong')

 

三、字典操作

创建字典

id_db = {111111111111:{'name':'jack','age':21,'addr':'jiangsu'},111111111112:{'name':'tom','age':22,'addr':'zhejiang'}
}

 取值

print(id_db[111111111112])

id_db[111111111111]['name'] = 'alex'

id_db[111111111111]['job'] = 'it'

id_db[111111111111].pop('addr')

a = id_db.get(111111111111)
print(a)

查看元组中是否含key

a = 111111111113 in id_db
print(a)
#输出
Falseprint(dict.fromkeys([1,2],'dddd'))
#输出
{1: 'dddd', 2: 'dddd'}
#好像没什么卵用
View Code

 查看元组中的key,value

for k ,v in id_db.items():#效率低print(k,v)for k in id_db:#效率高print(key,id_db[key])

 

 

小练习:

1.购物车(循环加元组)

__author__ = 'hongpeng'
salary = input("Input your salary:")
if salary.isdigit():salary = int(salary)
else:exit("input must be a digit...")shop_car = []
dict_list = [('Iphone',6888),('Mac',10888),('cloth',300),('shoes',600),('coffee',30),('milk',3),('book',50)]
print("welcome to hongpeng shopping mall".center(50,'-'))
exit_flag = False
while not exit_flag:print("我们有以下商品:".center(50,'-'))for item in enumerate(dict_list):index = item[0]d_name = item[1][0]d_price = item[1][1]print(index,'.',d_name,d_price)user_choice = input("[q=quit,c=check]what do you want to buy?")if user_choice.isdigit():user_choice = int(user_choice)if user_choice < len(dict_list):s_item = dict_list[user_choice]if s_item[1] < salary:salary -= s_item[1]shop_car.append(s_item)print("you have buy [%s] and your salary left [%s]"%(s_item[0],salary))else:print("you don't have enough money to buy [%s]"%s_item[0])else:if user_choice == 'q' or user_choice == 'quit':print("shopping list is as follows:".center(50,'*'))for item in shop_car:print(item)print("END".center(50,'*'))print("BYE")exit_flag = Trueelif user_choice == 'c' or user_choice == 'check':print("you have buy this things:".center(50,'*'))for item in shop_car:print(item)
View Code

 2.三层菜单,选择MM(能返回上一级,每一级都能选择退出)

#_*_coding:utf-8_*_
__author__ = 'hongpeng'
menu = {'江苏':{'苏州':['昆山MM','吴中MM'],'无锡':['江阴MM','锡山MM']},'北京':{'朝阳':['三里屯MM','工体MM'],'海淀':['北京电影学院MM','中央戏剧学院MM']},'湖北':{'武汉':['武汉大学MM']}}
print('''
----这位爷,我们这里有下面几个地方的姑娘,你想选哪个地区的呀?----''')
exit_flag = False
while not exit_flag:for index,k in enumerate(menu):print(index,k)choice_1 = (input('请选择编号:'))if choice_1.isdigit():choice_1 = int(choice_1)key_1 = list(menu.keys())[choice_1]#key_1 北京while not exit_flag:for index,k in enumerate(menu[key_1]):print (index,k)#0朝阳 1海淀choice_2 = (input('请选择编号:'))if choice_2.isdigit():choice_2 = int(choice_2)key_2 = list(menu[key_1].keys())[choice_2]#朝阳elif choice_2 == 'back':breakelif choice_2 == 'quit':exit_flag = Truewhile not exit_flag:for index,k in enumerate(menu[key_1][key_2]):print(index,k)#0三里屯 1工体choice_3 = (input('请选择编号:'))if choice_3.isdigit():choice_3 = int(choice_3)key_3 = menu[key_1][key_2][choice_3]print('你选择的是%s-%s-%s'%(key_1,key_2,key_3))exit_flag = Trueelif choice_3 == 'back':breakelif choice_3 == 'quit':exit_flag = True
View Code

 3.购物三级菜单

shop_list = {'家电':{'冰箱':[('西门子',6000),('海尔',5000)],'空调':[('格力',3999),('美的',2999)]},'数码':{'手机':[('iphone6s',5888),('小米',1999)],'电脑':[('mac',10888),('Dell',6999)]},'居家':{'衣服':[('cloth',300),('shoes',666)],'牙膏':[('云南白药',38),('佳洁士',15)]}}print('welcome to shopping mall'.center(50,'-'))
print('我们有以下分类,请选择:')
for index,k in enumerate(shop_list):print(index,k)
choice_1 = int(input('please choose:'))
key_1 = list(shop_list.keys())[choice_1]
for index,k in enumerate(shop_list[key_1]):print(index,k)
choice_2 = int(input('continue choose:'))
key_2 = list(shop_list[key_1].keys())[choice_2]for i in enumerate(shop_list[key_1][key_2]):index = i[0]d_name = i[1][0]d_price = i[1][1]print(index,'.',d_name,d_price)
View Code

 

转载于:https://www.cnblogs.com/hongpeng/p/5835827.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element-ui嵌套弹框遮罩层解决

:modal-append-to-body“false” :append-to-body“true” 嵌套的 Dialog 必须指定该属性并赋值为 true <template><el-button type"text" click"outerVisible true">点击打开外层 Dialog</el-button><el-dialog title"外层 D…

Linux 串口调试工具汇总

在 linux 系统下进行串口调试或者开发时配合简单易用的串口调试工具那是必不可少。这篇博客对当前用的较多的&#xff0c;且我自己经常用的一些串口工具做一下汇总&#xff0c;大家可以参考一下。 实验环境&#xff1a; OS: Ubuntu16.04 Kernel: 4.4.0 --------------------…

[翻译] effective go 之 Names Semicolons

2019独角兽企业重金招聘Python工程师标准>>> Names Names are as important in Go as in any other language. In some cases they even have semantic effect: for instance, the visibility of a name outside a package is determined by whether its first cha…

75.Android之基本架构

转载&#xff1a;http://www.cnblogs.com/lijunamneg/archive/2013/01/18/2866953.html Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik&#xff0c;并在Dalvik虚拟机上搭建了一个JAVA的application framework&#xff0c;所有的应用程序都是基于JAVA的applicati…

TTL转485电路设计

在 TTL/CMOS 转接半双工 RS485 的电路设计中&#xff0c;由于半双工的特性&#xff0c;需要有信号来控制 485 转接芯片的发送和接收使能端&#xff0c;因此需要具体场景具体分析。 如果是使用 MCU 或者自带发送状态指示脚功能&#xff08;指示当前是否在进行串口发送&#xff0…

flash 动画

浏览着网页不知道该干些什么&#xff0c;突然看到好看的flash动画&#xff0c;其实虽然自己编程序&#xff0c;可是真的觉得很羡慕那些美工同事&#xff0c;做的东东真的很漂亮。看着讲解做着做着&#xff0c;唉&#xff0c;跟人家的对不上了&#xff0c;呵呵&#xff0c;成了另…

USB芯片选型

从 USB 芯片的使用角度来说&#xff0c;USB 系列芯片可以划分为 USB 接口芯片与内置 USB 功能的微控制器。前者对于跨平台和易用性方面比较有优势&#xff0c;无需了解芯片内部工作机制&#xff0c;按照芯片的手册以及官方例程来操作就可以了&#xff0c;而使用平台也比较开放&…

CH340安卓驱动使用教程

使用 CH340/CH341 可以很容易在 Android 平台下实现 USB 转串口的功能&#xff0c;由于 CH340/CH341 是 USB 设备&#xff0c;如果使用手机或者平板来操作该芯片的话&#xff0c;就需要满足以下需求&#xff1a; 1. 需要基于 Android 3.1 及以上的系统 2. Android 设备具有 U…

undefined reference to

关于undefined reference这样的问题&#xff0c;大家其实经常会遇到&#xff0c;在此&#xff0c;我以详细地示例给出常见错误的各种原因以及解决方法&#xff0c;希望对初学者有所帮助。 1. 链接时缺失了相关目标文件&#xff08;.o&#xff09; 测试代码如下&#xff1a; 然…

Android 系统使用USB OTG功能/打开USB Host API功能

步骤一&#xff1a;确定 Android 设备是否支持 USB Host 功能&#xff0c;具体可以通过以下步骤进行确认&#xff1a; 1. 查看手机或平板设备参数&#xff0c;或者直接联系厂家咨询&#xff1b; 2. 使用 UsbHostDiagnostics.APK 安卓应用软件直接进行检测&#xff0c;汉化版软件…

Android日志Log使用

Android开发中日志工具的使用是十分重要的&#xff0c;可以帮助我们定位和查找程序执行的问题&#xff0c;了解程序执行过程等。这里以 Eclipse 下的的安卓开发为例进行说明。 打开 LogCat 功能 首先&#xff0c;确保 Eclipse 软件中已经打开了日志工具 LogCat 功能&#xff…

Android项目目录结构

在 Eclipse 中新建或者打开一个 Android 项目&#xff0c;可以看到目录视图如下所示&#xff1a; 其实项目开发中&#xff0c;使用频率较高的并不多&#xff0c;我们只要了解清楚不同类型的文件和不同目录的对应关系就可以了。 1. src src 目录用于存放 Java 代码&#xff0…

Libusb开发教程二 API介绍与使用

背景介绍 上一篇博文主要介绍了 Libusb 在 Linux 系统下的详细安装过程&#xff0c;除了 libusb-1.0.9.tar.bz2 离线包之外&#xff0c;还安装了 libusb-compat-0.1.4.tar.bz2。顾名思义&#xff0c;第二个是先前版本的兼容包&#xff0c;因此在使用过程中&#xff0c;开发者就…

tty,串口,控制台与驱动程序

tty 设备的名称是从过去的电传打字机缩写而来&#xff0c;最初是指链接到 Unix 系统上的物理或者虚拟终端。随着时间的推移&#xff0c;当通过串行口能够建立起终端连接后&#xff0c;这个名字也用来指任何的串口设备。物理 tty 设备的例子有串口、USB 到串口的转换器&#xff…

Linux 串口编程一 一些背景

在大部分讲解 Linux 编程书籍的时候会发现没有单独的串口编程章节&#xff0c;实际上串口编程已经被概括在了“终端”或者“终端IO”章节里面。在上一篇博客中对经常出现的几个容易混淆的概念进行简单描述&#xff1a;tty&#xff0c;串口&#xff0c;控制台与驱动程序。后面会…

Linux tty驱动程序一 架构

tty 核心概览如下图所示&#xff1a; 可以看到&#xff0c;tty 架构的划分层次&#xff0c;由下至上的逻辑关系为&#xff1a;硬件 -> tty 驱动 -> tty 线路规程&#xff08;也译为行规程&#xff09;-> tty 核心 -> 用户层。 内核负责控制 tty 设备的数据流&…

Linux 串口编程二 深入了解 termios

前言 这一系列串口编程重点在应用层编程&#xff0c;但是在讲解原理与相关概念时需要对驱动框架有个基础的认识。如果只是浅尝辄止&#xff0c;以后在遇到串口驱动与应用层程序调试难免遇到瓶颈。关于 tty驱动架构参见我的其他博客&#xff1a;Linux tty驱动程序架构。有时了解…

Linux 串口编程四 串口设备程序开发

Linux 串口编程和程序相对来说是很简单的&#xff0c;之所以用博客连载来展示&#xff0c;主要是想在学会使用的基础上掌握相关背景&#xff0c;原理以及注意事项。相信在遇到问题的时候&#xff0c;我们就不会对于技术的概念和 API 的使用浅尝辄止了。下面进入具体应用案例&am…

POSIX 串口编程指南

介绍 POSIX 串口编程指南将教会你在你的 UNIX 工作站或者 PC 上面如何成功、有效以及可移植性的对串口编程。每一章提供了使用 POSIX 终端控制函数的编程例程&#xff0c;可以基本不经修改地工作在 IRIX, HP-UX, SunOS, Solaris, Digital UNIX, Linux 以及其他大多数 UNIX 操作…

快速解决 Android SDK Manager 无法下载或者下载速度慢

在这里以 Windows 下的 Android SDK Manager 为例&#xff0c;其他系统下与此类似&#xff0c;只会存在部分工具栏名称不同的情况&#xff0c;不明之处可以追问。下面就进入具体配置流程&#xff1a; 1. 选择 Tools->Options 进入代理设置。 代理设置选项&#xff0c;在 H…