likes
comments
collection
share

欢迎来到 Python 的世界,已开通笔记&功能实践的双进程【玩转 Python】

作者站长头像
站长
· 阅读数 4

正餐来了

之前在 AI 助手"伴读"下写了几个功能,与其说在学习,更像是在体验 AI 助手的辅导能力。

在上篇的"背包问题"的解题中,发现对 Python 的语法不够熟悉,会反过来影响解题思路。

我认真思考了一下,还是得系统的学习一下 Python。不过,仅是学习语法等知识点,肯定是不够的,最好有阶段性的功能实践。

正好《Python编程:从入门到实践》中每节的后面都有"动手试一试"的编程练习环节,可以帮助实验"学以致用"的效果。

今天这篇主要分享 Python 数据类型及其操作的相关知识点,每节都附有练习题及解答。

接下来让我们一起进入 Python 的世界。

数据类型

字符串

介绍

字符串就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。

str = "This is a string."
strSec ='This is also a string.'

笔记

在字符串中插入变量的值

1、Python 3.6 引入的 f 字符串,要在字符串中插入变量的值,可在前引号前加上字母 f ,再将要插入的变量放在花括号内:

first_name = "叶"
last_name = "一一"
full_name = f"{first_name}{last_name}"
print(full_name)

输出结果

叶一一

2、Python 3.5 或更早的版本,需要使用 format() 方法。上面的 full_name 变量赋值方式变成了下面的代码,输出的结果不变:

full_name = "{}{}".format(first_name, last_name)

删除空白

有时候额外的空白会带来不必要的麻烦,比如对比两个字符串的是否相同时,额外的空格会得到失败的结果。这个时候需要先将额外的空格删除。

1、删除字符串左右两侧的空格

  • rstrip():用于移除字符串右侧(尾)指定的字符(默认为空格或换行符)或字符序列。
  • lstrip():用于移除字符串左侧(头)指定的字符(默认为空格或换行符)或字符序列。
  • strip() :用于移除字符串两侧(头尾)指定的字符(默认为空格或换行符)或字符序列。

下面有三个字符串变量,分别是包含左侧空格、右侧空格,两侧空格的字符串。

word_f = 'I '
word_s = ' love'
favorite_language = " python "
full_sentence = f"{word_f}{word_s}{favorite_language}"
print(full_sentence)

连接三个变量,运行一下结果

I  love python 

我们分别使用三个方法去除空格

full_sentence = f"{word_f.rstrip()}{word_s.lstrip()}{favorite_language.strip()}"

再次运行结果

Ilovepython

2、删除字符串全部空格

除了左右两侧空格,有时候可能字符串中间也包含空格,这个时候上面的三种方法就不好使了。

如果想去掉字符串中间的空格,有几种思路:

(1)使用replace将所有空格替换掉。

full_sentence = "I  love python "
print(full_sentence.replace(' ', ''))

运行结果

Ilovepython

(2)逐个使用 strip() 去掉两侧空格。

full_sentence = "I  love python "
full_sentence.strip()
res = ''.join([i.strip(' ') for i in full_sentence])
print(res)

(3)使用 split 按照空格截取字符串得到一个列表,将列表中所有的空格对象去掉,最后列表重新生成字符串。

full_sentence = "I  love python "
sentence_split = full_sentence.split(' ')
sentence_List = [i for i in sentence_split if i != '' ]
sentence_str = ''.join(sentence_List)

练一练

所有练一练的题目,大家可以先自行尝试实现。而我自己实现的代码可能跟习题答案也不太一样,仅供参考。

练习2-4:调整名字的大小写

题目:

调整名字的大小写 用变量表示一个人的名字,再以小写、大写和首字母大写的方式显示这个人名。

实现:

这个题目还是很简答的,Python 提供了修改字符串大小写的方法。

name_s = 'ye yiyi'
print(name_s.lower())
print(name_s.upper())
print(name_s.title())

打印:

ye yiyi
YE YIYI
Ye Yiyi

练习2-5:名言

题目:

找一句你钦佩的名人说的名言,将其姓名和名言打印出来。输出应类似于下面这样(包括引号)。Albert Einstein once said, “A person who never made a mistake never tried anything new.”

实现:

这个题目主要注意表示字符串类型的引号最近的引号类型相同时,导致的语法错误的问题。需要使用不同引号。

print('Einstein once said, "A person who never made a mistake never tried anything new."')

打印:

Einstein once said, "A person who never made a mistake never tried anything new."

整数和浮点数

介绍

Python将所有带小数点的数称为浮点数。

float_1 = 0.1+0.1
print(float_1)
>>> 0.2

python2中分为整数、长整数,python3中统称为整数。

# 十进制
int_1 = 10
print(int_1)
>>> 10

# 八进制
int_o = 0o10
print(int_o)
>>> 8

# 十六进制
int_x = 0x10
print(int_x)
>>> 16

笔记

浮点数小数位数的不确定性

浮点数进行算数运算时,结果出现以下情况:

float_2 = 0.2+0.1
print(float_2)
>>> 0.30000000000000004

后面再介绍怎么处理多余的小数位的方式。

前端也存在这个问题,所以我并不陌生。

任意两个数运算结果总是浮点数

将任意两个数相除时,结果总是浮点数,即便这两个数都是整数且能整除

int_1 = 10
int_2 = 5
print(int_1/int_2)
>>> 2.0

无论是哪种运算,只要有操作数是浮点数,Python 默认得到的总是浮点数,即便结果原本为整数也是如此。

int_2 = 5
float_1 = 2.0
print(int_2*float_1)
>>> 10.0

数中的下划线

Python使用了一种称为"长整数"的技术来处理大整数。长整数是一种特殊的数据类型,它可以存储任意大小的整数,并且可以进行高效的运算。

遇到大整数时,可使用下划线将其中的数字分组,使其更清晰易读:

int_long = 123_400_500_600
print(int_long)
>>> 123400500600

注:

1、这种表示方式,需要Python 3.6和更高的版本支持。

2、Python 的大整数运算是十分高效的,可以用于处理密码学、数论、计算机代数和其他需要处理大整数的领域。

"约定俗成"的全大写常量表示方式

还有一类数据类似变量,但其值在程序的整个生命周期内保持不变,称之为变量。

Python 没有内置的常量类型,但一般"约定俗成"的用全大写来指定某个变量为常量,其值应始终不变:

MAX_CONTANT = 12345

练一练

练习2-8:数字8

编写四个表达式,分别使用加法、减法、乘法和除法运算,但结果都是整数8。

print(4+4)
>>> 8
print(2*4)
>>> 8
print(int(32/4))
>>> 8
print(12-4)
>>> 8

我将题目稍作了变化,改成了"整数8",对于前面提到的两数相除会得到浮点数,所以这里用了int方法,保证得到整数。

列表

介绍

列表由一系列按特定顺序排列的元素组成。

word_list = ['i', 'love', 'python']
print(word_list)
>>> ['i', 'love', 'python']

笔记

使用列表中的各个值

使用f字符串根据列表中的值来创建消息。

word_list = ['i', 'love', 'python']
msg=f"{word_list[0].title()} {word_list[1]} {word_list[2].title()}."
print(msg)
>>> I love Python.

在列表末尾添加元素

使用方法 append() 可以将元素'very'、'much'依次添加到列表末尾。

word_list = ['i', 'love', 'python']
word_list.append('very')
word_list.append('much')
print(word_list)
>>> ['i', 'love', 'python', 'very', 'much']

在列表中任意位置插入元素

使用方法 insert() 可在列表的任何位置添加新元素。

insert() 包含两个入参:index (插入位置)和 element (插入元素)。

word_list = ['i', 'love', 'python']
word_list.insert(1,'really')
print(word_list)
>>> ['i', 'really', 'love', 'python']

使用del语句删除任意位置元素

使用 del 语句,可以删除想要删除的确定位置的元素。

word_list = ['i', 'just', 'love', 'python']
del word_list[1]
print(word_list)
>>> ['i', 'love', 'python']

使用方法 pop() 删除元素

方法 pop() 可以删除列表末尾的元素,并让你能够接着使用它。

word_list = ['i', 'love', 'python', 'not relly']
word_pop = word_list.pop()
print(word_list)
>>> ['i', 'love', 'python']
print(word_pop)
>>> not relly

方法 pop() 也可以删除列表中任意位置的元素,只需在圆括号中指定要删除元素的索引即可。

word_list = ['i', 'just', 'love', 'python']
word_pop = word_list.pop(1)
print(word_list)
>>> ['i', 'love', 'python']
print(word_pop)
>>> just

根据值删除元素

方法 remove() 可以根据要删除的元素的值删除对应元素。

word_list = ['i', 'just', 'love', 'python']
word_list.remove('just')
print(word_list)
>>> ['i', 'love', 'python']

注意,对于不存的值,使用 remove() 进行删除会报错。

word_list.remove('so')
>>> ValueError: list.remove(x): x not in list

使用方法 sort() 对列表永久排序

方法 sort() 可以对列表进行排序,从小到大,且是永久性地修改列表元素的排列顺序。

sort_list = [2, 11, 8, 55, 6, 7, 23, 33, 5, 6]
sort_list.sort()
print(sort_list)
>>> [2, 5, 6, 6, 7, 8, 11, 23, 33, 55]

如果想得到从大到小排序,只需向 sort() 方法传递参数 reverse=True 即可。

sort_list.sort(reverse=True)
>>> [55, 33, 23, 11, 8, 7, 6, 6, 5, 2]

使用函数 sorted() 对列表临时排序

方法 sorted() 可以实现特定顺序显示列表元素,即保留列表元素原来的排列顺序,同时以特定的顺序呈现它们。

sort_list = [2, 11, 8, 55, 6, 7, 23, 33, 5, 6]
print(sorted(sort_list))
>>> [2, 5, 6, 6, 7, 8, 11, 23, 33, 55]
print(sort_list)
>>> [2, 11, 8, 55, 6, 7, 23, 33, 5, 6]
print(sort_list[1])
>>> 11

方法 sorted() 包括三个参数:

iterable:表示指定的序列;

key:可以自定义排序规则;

reverse:指定以升序(False,默认)还是降序(True)进行排序。

word_list = ['i', 'love', 'python', 'so', 'much']
print(sorted(word_list, key=lambda x: len(x)))
>>> ['i', 'so', 'love', 'much', 'python']

倒着打印列表

方法 reverse() 可以反转列表元素的排列顺序。

word_list = ['i', 'love', 'python']
word_list.reverse()
print(word_list)
>>> ['python', 'love', 'i']

如果还想恢复原来的列表顺序,只需要对列表再调用一次 reverse()

word_list.reverse()
print(word_list)
>>> ['i', 'love', 'python']

练一练

练习3-4:嘉宾名单

如果你可以邀请任何人共进晚餐(无论是故去的还是在世的),你会邀请哪些人?请创建一个列表,其中包含至少三个你想邀请的人;然后,使用这个列表打印消息,邀请这些人来与你共进晚餐。

name_list = ['zhang san', 'shang ying yan', 'wang wu', 'ning zai chun', 'ning jie']
print("花径不曾缘客扫,蓬门今始为君开。")
print(f"欢迎,{name_list[1].title()}")
print(f"欢迎,{name_list[3].title()}")
print(f"欢迎,{name_list[4].title()}")
>>> 花径不曾缘客扫,蓬门今始为君开。
>>> 欢迎,Shang Ying Yan
>>> 欢迎,Ning Zai Chun
>>> 欢迎,Ning Jie

练习3-4:添加嘉宾

你刚找到了一个更大的餐桌,可容纳更多的嘉宾。向嘉宾名单中间位置和末尾分别添加一位嘉宾。

打印一系列消息,向名单中的每位嘉宾发出邀请。

name_list = ['zhang san', 'shang ying yan', 'wang wu', 'ning zai chun', 'ning jie']
name_list.insert(4,'lily')
name_list.append('chai popo')
print("花径不曾缘客扫,蓬门今始为君开。")
print(f"欢迎,{name_list[1].title()}")
print(f"欢迎,{name_list[3].title()}")
print(f"欢迎,{name_list[4].title()}")
print(f"欢迎,{name_list[5].title()}")
print(f"欢迎,{name_list[6].title()}")
>>> 花径不曾缘客扫,蓬门今始为君开。
>>> 欢迎,Shang Ying Yan
>>> 欢迎,Ning Zai Chun
>>> 欢迎,Lily
>>> 欢迎,Ning Jie
>>> 欢迎,Chai Popo

操作列表

笔记

遍历整个列表

使用 for 循环打印每一个好友的名字:

name_list = ['lily', 'shang ying yan', 'chai paopao', 'ning zai chun', 'ning jie']

for name in name_list:
    print(name)
>>> lily
>>> shang ying yan
>>> chai paopao
>>> ning zai chun
>>> ning jie

注意,位于 for 语句后面且属于循环组成部分的代码行,一定要缩进。否则,会报错:

for name in name_list:
print(name)
>>> IndentationError: expected an indented block

使用 range() 创建数字列表

函数 range() 可以生成一系列数,可以使用 for 循环进行打印。

num_list_2 = range(1, 6)
for num2 in num_list_2:
    print(num2)
>>> 1
>>> 2
>>> 3
>>> 4
>>> 5

注意,使用 range() 方法生成的序列,包含开始的数字,但是不包含结尾的数字。

也可以通过索引得到对应的元素。

print(num_list_2[0])
>>> 1

还有一种创建数字列表的方式,使用函数 list()range() 的结果直接转换为列表。

num_list = list(range(1, 6))
print(num_list)
>>> [1, 2, 3, 4, 5]

我们再试一下循环:

num_list = list(range(1, 6))
for num1 in num_list:
    print(num1)
>>> 1
>>> 2
>>> 3
>>> 4
>>> 5

range() 和 list() 的区别

对比一下二者的区别:

1、 range() 生成的序列类型很固定必须是整数,list() 则不需要。

word_list = list('pyhon1')
print(word_list)
>>> ['p', 'y', 'h', 'o', 'n', '1']

2、 range() 函数还有第三个参数-step,可以实现间隔数列。

num_list_2 = range(1, 11, 2)
print(list(num_list_2))
>>> [1, 3, 5, 7, 9]

对数字列表执行简单的统计计算

num_list_2 = range(1, 11)
print(max(num_list_2))
>>> 10
print(min(num_list_2))
>>> 1
print(sum(num_list_2))
>>> 55

列表解析

squares = [value**2 for value in range(1, 11)]
print(squares)
>>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

上面的代码中,首先生成了一个数列,然后循环数列得到每个元素 value,将 value 的值提供给计算平方值的表达式,最终得到所有值平方之后的数列。

练一练

练习4-7:3的倍数

创建一个列表,其中包含3~30能被3整除的数,再使用一个for循环将这个列表中的数打印出来。

num_list = range(3, 31, 3)
for num in num_list:
    print(num)
>>> 3
>>> 6
>>> 9
>>> 12
>>> 15
>>> 18
>>> 21
>>> 24
>>> 27
>>> 30

练习4-9:立方解析

使用列表解析生成一个列表,其中包含前10个非0整数的立方。

num_list = [(value ** 3) for value in range(1, 11)]
for num in num_list:
    print(num)
>>> 1
>>> 8
>>> 27
>>> 64
>>> 125
>>> 216
>>> 343
>>> 512
>>> 729
>>> 1000

总结

以上,就是我在 Python 学习中,记录的关于数据类型的知识点,同时对于部分练习题的作答。

此外,还增加了一些容易被忽视的功能点和对比,额外查了其他资料,通过一个点联想到相关点,这样一来加深了当前功能的印象。

读完本文的主要收获有:

1、对于字符串,学习了字符串是什么、如何在字符串中插入值、如何剔除字符串中多余的空白;

2、对于整数和浮点数,学习了如何使用整数和浮点数、一些使用数值数据的方式;

3、对于列表,即学习了列表是什么以及如何使用其中的元素、如何定义列表以及如何增删元素、如何对列表进行排序,又学习了如何操作列表元素、如何遍历整个列、如何解析列表处理其中的元素。


作者介绍 非职业「传道授业解惑」的开发者叶一一。 《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。 如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。

若有收获,就点个赞吧

转载自:https://juejin.cn/post/7247698370579710012
评论
请登录