Python练习:数据类型篇

一、逻辑推理练习

   1、在不运行下面程序的前提下,说出答案。
 
1. 4.0 == 4
2. "4.0" == 4
3. bool("1")
4. bool("0")
5. str(32)
6. int(6.26)
7. float(32)
8. float("3.21")
9. int("434")
10. int("3.42")
11. bool(-1)
12. bool("")
13. bool(0)
14. "wrqq" > "acd"
15. "ttt" == "ttt "
16. "sd"*3
17. "wer" + "2322"

答案如下:

1.	True
2.	False
3.	True
4.	True
5.	'32'
6.	6
7.	32.0
8.	3.21
9.	434
10.	会报错
11.	True
12.	False
13.	False
14.	True
15.	False
16.	"sdsdsd"
17.	'wer2322'

对以上答案有所困惑,不妨看看下面对一些知识点的讲解:

(1)bool函数转换规则
        bool函数进行转换时,其结果取决于传入参数与True和False的等价关系,只需记住一点即可。0,空字符串,None在条件判断语句中等价于False,其他数值都等价于True,bool函数在做数据类型转换时遵循该原则
(2)int("3.42")为什么会报错
        字符串"3.42"可以转成foat类型数据3.42,3.42可以转成int类型数据3,但是字符串"3.42"却不可以直接使用int函数转成3,讲实话,我也觉得这个函数有些不灵活,或许是语言的发明老有自己的考虑吧,咱们对这种问题,不必深究,先做到知道它是什么,将来再去研究为什么
(3)字符串大小比较规则
两个字符串在比较大小时,比的不是长度,而是内容
字符串左对齐后,逐个字符依次比较,直到可以分出胜负
(4) "sd"*3
''sd"*3 的意思是sd重复3次,生成一个新的字符串

2、请根据下列题目编写代码

1.	3的5次⽅
2.	7对2求模
3.	9除5,要求有⼩数部分
4.	9除5,要求没有⼩数部分
5.	⽤程序计算根号16,也就是16的2分之⼀次⽅

答案如下:

1.	3**5
2.	7%2
3.	9/5
4.	9//5
5.	import	math
	math.sqrt(16)

知识点:

(1).幂运算用两个 " * " ,2的2次方表示为2**2;
(2).求模运算用%,其实就是求余数;
(3).除法中,希望结果有小数部分时用 ' / ',希望只保留整数部分时用 ' // ';
(4).开根号,要用到 math 模块的 sqrt() 方法,这个题目需要你自己去百度或是谷歌,第一次明
确的建议你,一定要好好利用搜索引擎,不会用搜索引擎的程序员,永远是菜鸟。

二、字符串练习

1、编写程序完成下列问题:

1.将字符串"abcd" 转成大写
2.计算字符串“cd"在 字符串"abcd"中出现的位置
3.字符串“a,b,c,d",请用逗号分割字符串,分割后的结果是什么类型的?
4."{name}喜欢{fruit}".format(name="李雷")"执行会出错,请修改代码让其正确执行
5.string ="Python is good",请将字符串里的Python替换成 python,并输出替换后的结果
6.有一个字符串 string ="python修炼第一期.html",请写程序从这个字符串里获得.html
前面的部分,要用尽可能多的方式来做这个事情
7.如何获取字符串的长度?
8."this is a book",请将字符串里的book替换成apple
9. "this is a book",请用程序判断该字符串是否以this开头
10."this is a book",请用程序判断该字符串是否以apple结尾
11. "This lS a book",请将字符串里的大写字符转成小写字符
12. "This lS a book",请将字符串里的小写字符,转成大写字符
13."this is a book\n",字符串的末尾有一个回车符,请将其删除

答案如下:

1.	"abcd".upper()
2.	"abcd".find('cd')
3.	"a,b,c,d".split(',')
4.	"{name}喜欢{fruit}".format(name="李雷",	fruit='苹果')
5.	string.replace('Python',	'python')
6.	string[0:string.find('.html')]	或者string[0:-5]
7.	使⽤len函数
8.	"this	is	a	book".replace('book',	'apple')
9.	"this	is	a	book".startswith('this')
10.	"this	is	a	book".endswith('apple')
11.	"This	IS	a	book".lower()
12.	"This	IS	a	book".upper()
13.	"this	is	a	book\n".strip()

至于最终答案,希望大家自己去实践以下,加深对各个函数用法的印象。

2、字符串的逻辑推理练习

        请回答下列问题:

string ="Python is good" #字符串的长度为14,正数0~13,倒数-1~-14
1. string[1:20]
2. string[20]
3. string[3:-4]
4. string[-10:-3]
5. string.lower()
6. string.replace("o","0")
7. string.startswith('python')
8. string.split()
9. len(string)
10.string[30]
11. string.replace(" ",")

答案如下:

1.	'ython	is	good'
2.	报错
3.	'hon is	'
4.	'on	is	g'
5.	'python	is	good'
6.	'Pyth0n	is	g00d'
7.	False
8.	['Python',	'is',	'good']
9.	14
10.	报错
11.	'Pythonisgood'

提示:

第2题和第10题都报错,是因为超出了索引范围,字符串长度为14,你去20和30的位置取
值,当然会报错

知识点:

        关于切片操作,只需要知道从哪里开始到哪里结束就一定能推导出答案,以string[3:-4]为例,3是开始的位置,-4是结束的位置,但这个范围是左闭右开的,从3开始没错,但不会到-4,而是到-5,更前面的一个位置,python支持负数索引,或者说是反向索引,从右向左从-1开始逐渐减小。
第一题中,做切片的时候是从1开始,到20结束,即便是右开,直到19,也仍然超出了索引范围,为什么不报错呢,这就是语言设计者自己的想法了,切片时,不论是开始位置还是结束位置,超出索引范围都不会报错,由于切片是一个范围操作,这个范围内有值就切出来,没值返回空字符串就好了。

3、列表与元组

(1).列表基础练习

lst = [1,2,3,4,5]
1.求列表的长度
2.判断6 是否在列表中
3.lst +[6,7,8]的结果是什么?
4.lst*2 的结果是什么
5.列表里元素的最大值是多少
6.列表里元素的最小值是多少
7.列表里所有元素的和是多少
8.在索引1的后面新增一个的元素10
9.在列表的末尾新增一个元素20

答案:

1.	len(lst)
2.	6	in	lst
3.	[1,2,3,4,5,6,7,8]
4.	[1,	2,	3,	4,	5,	1,	2,	3,	4,	5]
5.	max(lst)
6.	min(lst)
7.	sum(lst)
8.	lst.insert(1,10)
9.	lst.append(20)

(2).元组基础练习

写出下面代码的执行结果和最终结果的类型
1.(1, 2)*2
2.(1, )*2
3.(1)*2

答案:

1.	(1,	2,	1,	2)
2.	(1,	1)
3.	2

       第2题和第3题,元组里只有一个数据时,必须有逗号,如果没有逗号,就变成了第3题的形式,第3题本质上是1*2,那对小括号就如同我们小学学过的小括号一样,只是为了体现运算优先级而已,当元组只有一个数据时,如果不省略了逗号,那么小括号的作用就不再是表示元组,而是表示运算优先级。

(3).列表合并

lst = [1,2,3]
lst2 = [4,5,6]
不使用 +号运算符,将lst2合并到lst的末尾,并思考,这个过程中,是否产生了新的列表

答案:

lst.extend(lst2)

 这个过程中不会产生新的列表,最直观的检验方式就是print(id(lst)),合并前后,lst的内存地址都没有发生变化,只是列表里的内容发生了变化。

(4).统计练习

lst	= [2, 5, 6, 7, 8, 9, 2, 9, 9]
1.找出列表里的最大值
2.找出列表里的最小值
3.找出列表里最大值的个数
4.计算列表里所有元素的和
5.计算列表里元素的平均值
6.计算列表的长度
7.找出元素6在列表中的索引

答案:

1.	max(lst)
2.	min(lst)
3.	lst.count(max(lst))
4.	sum(lst)
5.	sum(lst)/float(len(lst))
6.	len(lst)
7.	lst.index(6)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值