Python语言数据结构和语言结构(2)
1. Python预备基础
1.1 变量的命名
变量命名规则主要有以下几条:
- 变量名只能包含字母、数字和下划线,其中下划线和字母可以开头,数字不行,即info_1可以,而1_info不行;
- 变量名内不能包含空格,可以用下划线替代,即info_1,而非info 1;
- 不能与Python内置关键字和函数名重名,这条在很多语言中都是一致的;
- 变量名中要言简意赅,即可以用name替代n,student_name比s_n好;
- 慎用l和o,因为这两个字母容易与1和0混淆;
1.2 变量的使用
变量在使用时一定要保证前后一致,如
info = "Hello World!"
print(infor)
由于声明变量info,而打印输出的是infor,因此程序会提示infor未定义,出现NameError的错误!
1.3 程序注释
Python中的注释方法有多重,单巷注释可以使用“#”,多行或者段落注释可以使用三对' '或者" "来进行,下面注释是等效的:
# 单行注释
'''
多
行
注
释
'''
"""
多
行
注
释
"""
2. Python数据类型
2.1 字符串
字符串的表示
Python语言中默认输入类型是字符串,字符串的使用有两种表示方法,即
info_1 = 'Hello World!'
info_2 = "Hello World!"
print(info_1)
print(info_2)
上述两种方法打印结果相同。
- 字符串处理方法
(1) 字符串合并(拼接)方法 — +
字符串打印中,最常见的是利用 + 进行字符串连接。
first_info = "Hello"
last_info = "World"
print(first_info + " " + last_info + "!")
*****************************************************
>> Hello World!
(2) 字符串处理方法
字符串有很多处理方法,此处对常用的字符串处理方法进行简要介绍:
name = 'kung is kung'
# 字符串首字母大写
print("1:\t",name.capitalize())
>>> 1: Kung is kung
# 字符串字母计数
print("2:\t",name.count('k'))
>>> 2: 2
# 字符串字母小写转换
'''
lower()虽然也只能将ASCII字符进行转换,即'A-Z'有效,
针对其他语言字符则只有casefold()有效
'''
name_tp_1 = 'KUNG IS KUANG'
name_tp_2 = 'ß' # ß是德语单词,小写形式是ss
print("3:\t",name_tp_1.casefold(),'\n' + name_tp_2.casefold())
>>> 3: kung is kuang
ss
# 字符串居中
'''
center(width,fillchar)中,a表示字符串加上b所提供的字符总长度
将字符串居中,但存在一下几种情况:
1. width大于字符串(含空格)长度时
1.1 width为偶数,字符串长度为偶数,则在两边字符串两
边等量补齐字符fillchar;
1.2 width为偶数,字符串长度为奇数,则字符串左边会比
右边少一个字符
1.3 width为奇数,字符串长度为偶数,则字符串左边会比
右边多一个字符
2. width不大于字符串(含空格)长度时则会返回原字符串
'''
names = 'Kungs'
print("4:\t",name.center(50,'-'),'\n' + names.center(50,'-'),\
'\n' + name.center(51,'-'),'\n' + name.center(10,'-'))
>>> 4: -------------------kung is kung-------------------
----------------------Kungs-----------------------
--------------------kung is kung-------------------
kung is kung
# 字符串结尾验证添加
print("5:\t",name.endswith('ng'))
>>> 5: True
# 字符串中'\t'字符长度替换
'''
假如字符串中没有转义字符'\t',则返回原字符
'''
names = 'kung\tis kung'
print("6:\t",name.expandtabs(tabsize = 3),\
'\n' + names.expandtabs(tabsize = 3))
>>> 6: kung is kung
kung is kung
# 字符串查找
print("7:\t",name.find('i')) # 切片,返回该字符在字符串中的index
>>> 7: 5
print("8:\t",name[name.find('i')])
>>> 8: i
print("9:\t",name.find('is')) # 切片,返回所查找字符串首字符的index
>>> 9: 5
# 字符串格式化输出
names = 'my name is {name} and I am {year} old!'
print("10:\t",names.format(name = 'Kung',year = 23))
>>> 10: my name is Kung and I am 23 old!
# 字符串映射格式化输出
print("11:\t",names.format_map({'name':'Kung','year':12}))
>>> 11: my name is Kung and I am 12 old!
# 字符串数字和字母组合判断
'''
isalnum()判断范围需要只包含英文字符和数字(True)
'''
name = '1.23'
print("12:\t",name.isalnum(),('123' + 'Kung').isalnum())
>>> 12: False True
# 字符串字母判断
'''
字母范围不止英文字母
'''
print("13:\t",name.isalpha(),'ß'.isalpha())
>>> 13: False True
# 字符串十进制字符判断
'''
isdecimal()方法只存在于Unicode对象中,
因此定义十进制字符只要在字符串前加'u'即可,不加也可
'''
print("14:\t",name.isdecimal(),'54'.isdecimal(),u'54'.isdecimal())
>>> 14: False True True
# 字符串数字检查
'''
isdigit()只有字符串完全为数字时为真
'''
print('15:\t','1A'.isdigit(),'1'.isdigit())
>>> 15: False True
# 字符串合法标识符判断
'''
isidentifier()判断的字符必须以字母(大小写均可)
或者'_'开头,字符串之间不能有空格
一般可用作检查变量、函数名、类名、方法名等
'''
print('16:\t','A12'.isidentifier(),'_A12'.isidentifier(),'12'.isidentifier(),'A 12'.isidentifier())
>>> 16: True True False False
# 字符串数字判断
'''
检查数字字符串主要有isdigit()和isnumeric()
isdigit():
True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
False: 汉字数字
Error: 无
isnumeric():
True: Unicode数字,全角数字(双字节),罗马数字,汉字数字
False: 无
Error: byte数字(单字节)
'''
print('17:\t','1'.isnumeric(),'一'.isnumeric())
>>> 17: True True
# 字符串空格检查
'''
字符串只包含空格,则为True,否则为False
'''
print('18:\t',' '.isspace(),'Hello World'.isspace())
>>> 18: True False
# 字符串首字母大写检查
'''
要求首字母大写,其它为小写
'''
print('19:\t','My'.istitle(),'Kung Fu'.istitle())
>>> 19: True True
# 字符串可打印检测
'''
字符串中都是可打印字符则返回True,否则返回False
注意,字符串中包含制表符为Faluse
'''
print('20:\t','My\tname'.isprintable(),'My name'.isprintable(),\
'~'.isprintable(),'\t'.isprintable())
>>> 20: False True True False
# 字符串大写检测
'''
字符串中字符全为大写时为True,否则为False
'''
print('21:\t','MONTH'.isupper(),'MONTH DAY'.isupper(),\
'Month day'.isupper())
>>> 21: True True False
# 字符串元素连接
print('22:\t','+'.join(['1','2','3']),'\n'+' '.join(['1','2','3']),\
'\n'+''.join(['1','2','3']))
>>> 22: 1+2+3
1 2 3
123
# 字符串左对齐
'''
ljust(width,fillchar)对字符串进行左对齐,
然后在字符串右侧进行fillchar填充,使得填充
数量加上字符串长度等于width
'''
print('23:\t',name.ljust(50,'*'))
>>> 23: 1.23**********************************************
# 字符串右对齐
print('24:\t',name.rjust(50,'*'))
>>> 24: **********************************************1.23
# 字符串小写转换
names = 'My name is Kung!'
print('25:\t',names.lower())
>>> 25: my name is kung!
# 字符串大写转换
print('26:\t',names.upper())
>>> 26: MY NAME IS KUNG!
# 字符串左侧去空
'''
lstrip()可以对空格或'\n'转义字符进行去除
'''
print('27:\t'+'\nname'.lstrip())
>>> 27: name # 正常状态下name应该在下一行
# 字符串右侧去空
print('28:\t'+'name\n'.rstrip() + '\t----')
>>> 28: name ---- # 正常情况下点画线应该在下一行
print('29:\t'+'\nname\n'.strip() + '\t----')
>>> 29: name ----
# 字符串映射转换表
'''
maketrans(intab,outtab)中intab要替代的字符组成的字符串
outtab时相应的映射字符的字符串,就像密码本的功能
密码转换时使用translate(),对所新添加字符进行转换
'''
p = str.maketrans('abced','12345')
print('30:\t'+'adeb'.translate(p))
>>> 30: 1542
# 字符串替换
'''
当待替换字符在字符串中只有一个时可以直接进行替换,
当字符串中所要替换字符有多个时,可以制定位置替换
即通过指定数字要求替换第几个字符,不指定则默认全部替换
'''
print('31:\t'+'Kung fu'.replace('f','F'))
>>> 31: Kung Fu
print('32:\t'+'Kung fu'.replace('u','U',1))
>>> 32: KUng fu
print('33:\t'+'Kung fu'.replace('u','U'))
>>> 33: KUng fU
# 字符串中字符最后出现位置
'''
rfind()返回字符串中最后一次出现位置的位置
rfind(str,beg=0,end=len(string))
同时,find()方法于rfind()的使用方法相同,
但是find()返回的是首次查找到的字符的位置,
两种方法中,假如都指定了beg和end,则会检查
字符是否包含在指定范围内,如果包含查找的字
符串,则返回index,假如不包含则返回-1
'''
print('34:\t','Kung fu'.rfind('u'),'\n','Kung fu'.rfind('u',0,10),\
'\n','Kung fu'.rfind('u',10,0),'\n','Kung fu'.find('u',0,10),\
'\n','Kung fu'.find('u',10,0))
>>> 34: 6
6
-1
1
-1
print('35:\t','Kung fu'.rfind('u'),'\n','Kung fu'.rfind('u',0,5),\
'\n','Kung fu'.rfind('u',5,0),'\n','Kung fu'.find('u',0,5),\
'\n','Kung fu'.find('u',5,0))
>>> 35: 6
1
-1
1
-1
print('36:\t','Kung fu fung'.rfind('fu'),\
'\n','Kung fu fung'.rfind('fu',0,9),\
'\n','Kung fu fung'.rfind('fu',9,0),\
'\n','Kung fu fung'.find('fu',0,9),\
'\n','Kung fu fung'.find('fu',9,0))
>>> 36: 8
5
-1
5
-1
# 字符串切片
'''
字符串切片后将以列表形式返回
split()也可以指定在前几个字符分隔
'''
print('37:\t','Kung fu fung'.split('u'),\
'Kung fu fung'.split('u',2),\
'Kung fu fung'.split(),\
'Kung fu fung'.split('u')[-1],\
'Kung fu fung'.split(' '))
>>> 37: ['K', 'ng f', ' f', 'ng'] ['K', 'ng f', ' fung']
['Kung', 'fu', 'fung'] ng
['Kung', '', 'fu', '', 'fung']
# 字符串转义字符分隔
'''
splitlines([keepends])中keepends默认为False
则会去掉('\r','\r\n','\n'),如果为True,则保留换行符
'''
print('38:\t','1\n+\r\n2\n3\n+\r\n4'.splitlines(),\
'1\n+\r\n2\n3\n+\r\n4'.splitlines(True))
>>> 38: ['1', '+', '2', '3', '+', '4']
['1\n', '+\r\n', '2\n', '3\n', '+\r\n', '4']
# 字符串大小写转换
'''
不仅限于英语字符
'''
print('39:\t','Kung Fu ß'.swapcase())
>>> 39: kUNG fU SS
# 字符串首字母大小
print('40:\t','kung fu ß'.title())
>>> 40: Kung Fu Ss
# 字符串右对齐,前面补0
'''
zfill(width)通过指定width,假如字符串长度小于width,
在字符串前面补0;大于width,原样输出
'''
print('41:\t','Kung'.zfill(10),'Kung'.zfill(3))
>>> 41: 000000Kung Kung
2.2 整数
Python中由于默认输入为字符类型,因此有时需要对数据类型进行转换:
age_1 = input("please input your age :\n")
age_2 = int(age_1)
print(type(age_1),age_1)
print(type(age_2),age_2)
*****************************************************
>> please input your age :
54
<class 'str'> 54
<class 'int'> 54
保证数据类型正确后,整数四则运算必不可少:
>> 2 + 3
*****************************************************
5
>> 5 - 3
*****************************************************
2
>> 2 * 3
*****************************************************
6
>> 6 / 4
*****************************************************
1.5
>> 3 ** 2
*****************************************************
9
2.3 浮点数
>> 0.1 + 0.1
*****************************************************
0.2
>> 2 * 0.1
*****************************************************
0.2
2.4 不同数据整合
整数和浮点数同存时,整数类型自动转换为浮点类型,但浮点类型或者整数类型数据与字符串类型同存时,需要进行转换,否则将会出错,因此首先需要吧浮点类型或者整数类型数据转换为字符串类型数据,因此将用到str()。
age = 18
info = "Happy " + str(age) + "th Birthday!"
print(message)
3. Python条件语句
3.1 if语句
if mark > 60 and mark < 70:
print("Congratualaton, you get a D level!")
python语言中需要注意的是,不要忘记if最后一行的 :,另外根据条件多少,可以借助逻辑语句来限定条件范围,一般为and和or*两个用的较多。
3.2 if-else语句
if mark > 60:
print("Congratualaton, you pass the exam!")
else:
print("Sorry,you should have to study hard!")
需要注意,else后也需要加上冒号,而且注意各个代码语句间的级别关系,这个可通过缩进解决。
3.3 if-elif-else语句
当条件超过两个时,可以使用多条件判断语句:
if mark > 90:
print("Congratualaton, you can get A level!")
elif mark > 80 and mark < 90:
print("Very good, you get B level!")
elif mark > 70 and mark < 80:
print("Good, you get C level!")
elif mark > 60 and mark < 70:
print("Well, you get D level!")
else:
print("Sorry, you should have to study hard!")
当然,最后的else语句可以省略,换乘elif亦可。
4. while循环和for循环
4.1 while循环
_number = 10
while _number > 20:
_number += 1
print(_number)
while循环基本结构如上所示,也需要注意的是在判断条件后不要忘记冒号。
在使用while循环时,需要注意设置合理的终止条件,避免出现无限循环;另外在使用while循环式,注意布尔运算的使用,可以在一定程度上提高代码的效率,使得代码看起来更整洁,其中布尔值应确保首字母大写,即True和False。
_number = 52
cond = True
while cond:
guess_number = int(input("Pleaw input a number:\n"))
if guess_number > _number:
print(str(guess_number) + " is big, you can guess a small one!\n")
elif guess_number < _number:
print(str(guess_number) + " is small, you can guess a big one!\n",)
else:
print("Congratulation, you got it!")
cond = False
4.2 for循环
首先看一段代码:
# 代码1
numbers = 10
for number in range(numbers):
print("***",number)
# 代码2
numbers = 10
for number in range(0,numbers,2):
print("***",number)
# 代码3
numbers = 10
for number in range(5,numbers,2):
print("***",number)
上述三个代码片段,在代码1中,着重关注下for循环的结构,其中为了方便后期记忆和查看代码,for后的临时变量最好与range内的定义变量相关,另外,不要忘记末尾的冒号;代码2和代码3中主要变化的是关键字range的使用,其中可设置首参数,即原码中的起始数字,可设置步长,代码中设置的是2 ,未设置时,程序默认步长为1。
4.3 break和continue
break的作用是不再执行余下代码,结束当前整个循环,如果嵌套了多层循环,则break终止的是当前所在循环;相对来说continue也是不再执行余下代码,但是是继续执行下个循环。
_number = 65
count = 0
while count < 3 :
guess_number = int(input("guess_number: "))
if guess_number == _number:
print("you got it!")
break
elif guess_number > _number:
print("The number is bigger! ")
else:
print("You think smaller! ")
count += 1
if count == 3:
print("Do you want to keep guessing..? ")
continue_confirm = input("please enter yes or no:\t")
if continue_confirm == 'yes':
count = 0
elif continue_confirm == 'no':
break
else:
print("Error input")
for i in range(0,20,2):
if i < 6 :
print("loop",i)
else:
continue
print("Check")
Python有列表和字典,这些利用循环处理非常方便,总而言之,还是要先了解好数据结构和语言结构,一步步积累,才能学好下一步!
Python语言数据结构和语言结构(2)的更多相关文章
- 图的存储结构大赏------数据结构C语言(图)
图的存储结构大赏------数据结构C语言(图) 本次所讲的是常有的四种结构: 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵 概念 两个数组,一个表示顶点的信息,一个用来表示关联的关系. 如果是无 ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- 在大型项目上,Python 是个烂语言吗
Robert Love, Google Software Engineer and Manager on Web Search. Upvoted by Kah Seng Tay, I was the ...
- 第二章 R语言数据结构
R语言存储数据的结构包括:标量.向量.矩阵.数组.数据框和列表:可以处理的数据类型包括:数值型.字符型.逻辑型.复数型和原生型. 数据结构 向量 向量是用来存储数值型.字符型或逻辑型数据的一维数组.单 ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- python为什么叫胶水语言?python为什么是系统脚本?
python为什么叫胶水语言?python为什么是系统脚本? 特点是什么? python现在最广为闻名的形容大概有这些: 他是很好的胶水语言.什么是胶水语言?反正当时的我不知道. 他是新一代的系统 ...
- C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...
- C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
- 为什么说Python是一门动态语言--Python的魅力
动态语言的定义:动态编程语言是高级程序设计语言的一个类别.在计算机科学领域已被广泛应用.它是一类在执行时能够改变其结构的语言:比如新的函数.对象.甚至代码能够被引进.已有的函数能够被删除或是其它结构上 ...
随机推荐
- Test for Job (poj 3249 记忆化搜索)
Language: Default Test for Job Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9733 A ...
- 《从零開始学Swift》学习笔记(Day 52)——Cocoa错误处理模式
原创文章,欢迎转载. 转载请注明:关东升的博客 Swift错误处理模式,在Swift1.x和Swift 2.0是不同的两种模式. Swift 1.x代码错误处理模式採用Cocoa框架错误处理模式,到如 ...
- Delphi7中单元文件内各个部分的执行顺序
注:本文主要是讨论delphi程序启动时和退出时的执行顺序,期间有些知识来源于Delphi帮助,有些来自<Delphi7程序设计教程>(这本书只告诉我有initialization 和 f ...
- Spring:延迟初始化
ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化.提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并 ...
- ledisDB底层实现——本质上就是用leveldb这样的底层存储,和ssdb一样,meta里存的是hash、list等的元数据
Hash hash可以算是一种两级kv,首先通过key找到一个hash对象,然后再通过field找到或者设置相应的值. 在ledisdb里面,我们需要将key跟field关联成一个key,用来存放或者 ...
- bzoj 4521 [ Cqoi 2016 ] 手机号码 —— 数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4521 数位DP,记录好多维状态: 写了半天,复杂得写不下去了,于是参考一下TJ... 练习简 ...
- PHPExcel 使用心得
最近有个项目需要将数据导出成excel,以前都没接触过.便google一下知道了PHPExcel 这个据说很强大的类库. 写这个博文主要目的等同于做笔记 1首先看了下官方的文档.http://phpe ...
- 关于函数提升在if语句中的表现
函数声明创建的函数在现代浏览器,在if语句中函数的声明不会提升,但是在老的IE版本中,if语句中的函数声明会提升 函数表达式在不同浏览器中函数声明都不会被提升,解决了不同浏览器的兼容性问题 关于函数提 ...
- 重装系统后快速安装.NET 3.5
每一次重装系统(Windows 8.1 和Windows 10)之后,最让我头疼的一件事就是配置把一大堆软件装上了.通常我会装好SQL Server之后,把电脑放在工作组安装Visual Studio ...
- BootStrap 资源包的下载和使用
将附件中的包解压,放置webroot中,并在jsp页面中引用它们,即可以使用 bootstrap.rar (78.9 KB) 下载次数: 0