python学习之路(11)Python集合、列表、字典阶段小总结(推导式创建序列)

推导式创建序列

推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初学者的水平。

列表推导式

1 列表复习

链接: https://blog.csdn.net/DD546250327/article/details/107944668.

2 列表推导式学习

列表推导式生成列表对象,语法如下:
在这里插入图片描述
举个栗子:

>>> [x for x in range(1,5)]
[1, 2, 3, 4]
>>> [x*2 for x in range(1,5)]
[2, 4, 6, 8]
>>> [x*2 for x in range(1,20) if x%5==0 ]
[10, 20, 30]
>>> [a for a in "abcdefg"]
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> cells = [(row,col) for row in range(1,10) for col in range(1,10)]
>>> for cell in cells:
	print(cell) 
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(1, 5)
(1, 6)
(1, 7)
(1, 8)
(1, 9)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(2, 5)
(2, 6)
(2, 7)
(2, 8)
(2, 9)
(3, 1)
(3, 2)
(3, 3)
(3, 4)
(3, 5)
(3, 6)
(3, 7)
(3, 8)
(3, 9)
(4, 1)
(4, 2)
(4, 3)
(4, 4)
(4, 5)
(4, 6)
(4, 7)
(4, 8)
(4, 9)
(5, 1)
(5, 2)
(5, 3)
(5, 4)
(5, 5)
(5, 6)
(5, 7)
(5, 8)
(5, 9)
(6, 1)
(6, 2)
(6, 3)
(6, 4)
(6, 5)
(6, 6)
(6, 7)
(6, 8)
(6, 9)
(7, 1)
(7, 2)
(7, 3)
(7, 4)
(7, 5)
(7, 6)
(7, 7)
(7, 8)
(7, 9)
(8, 1)
(8, 2)
(8, 3)
(8, 4)
(8, 5)
(8, 6)
(8, 7)
(8, 8)
(8, 9)
(9, 1)
(9, 2)
(9, 3)
(9, 4)
(9, 5)
(9, 6)
(9, 7)
(9, 8)
(9, 9)

字典推导式

1 字典复习

链接:https://blog.csdn.net/DD546250327/article/details/107966266

2 字典推导式学习

字典的推导式生成字典对象,格式如下:
在这里插入图片描述
类似于列表推导式,字典推导也可以增加 if 条件判断、多个 for 循环。
举个栗子:
数字符的个数:

>>> my_text =  'L Don Not Love You, L Love CC'
>>> char_count = {c:my_text.count(c) for c in my_text}
>>> char_count
{'L': 4, ' ': 7, 'D': 1, 'o': 5, 'n': 1, 'N': 1, 't': 1, 'v': 2, 'e': 2, 'Y': 1, 'u': 1, ',': 1, 'C': 2}

集合推导式

1 集合复习

PS:集合里没有重复的值;集合底层是字典实现
链接: https://blog.csdn.net/DD546250327/article/details/107968348.

2 集合推导式学习

集合推导式生成集合,和列表推导式的语法格式类似:
在这里插入图片描述

>>> {x for x in range(1,100) if x%9==0}
{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}

生成器推导式(生成元组)

1 元组复习

链接:https://blog.csdn.net/DD546250327/article/details/107946752

2 生成器推导式(生成元组)学习

直接上例子:

>>> (x for x in range(1,100) if x%9==0)
<generator object <genexpr> at 0x0000026320989B88>

我们发现提示的是“一个生成器对象”。显然,元组是没有推导式的。

>>> gnt = (x for x in range(1,100) if x%9==0)
>>> for x in gnt:
	print(x,end=' ')
9 18 27 36 45 54 63 72 81 90 99 
>>> for x in gnt:
	print(x,end=' ')
>>>

一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了。

综合练习

1、输入一个学生的成绩,将其转化成简单描述:不及格(小于 60)、及格(60-79)、良好(80-89)、优秀(90-100)
实现的方法1:

score = int(input("请输入分数:"))
grade = ''
if score < 60:
    grade = '不及格'
elif score <80:
    grade = '及格'
elif score <90:
    grade = '良好'
elif score <100:
    grade = '优秀'
print("分数时{},等级是{}".format(score,grade))

实现的方法2:

grade = ['优秀','优秀','良好','及格','及格','不及格']
num = 0
score = int(input("请输入分数:"))
if score > 100 or score < 0:
    score = int(input("输入错误! 请重新输入一个在 0-100 之间的数字: "))
else:
    num = score // 10
if num < 5: num = 5
print("分数是{0},等级是{1}".format(score, grade[10 - num]))

2、已知点的坐标(x,y),判断其所在的象限。

x = int(input("请输入 x 坐标"))
y = int(input("请输入 y 坐标"))
if (x == 0 and y == 0):
    print("原点")
elif (x == 0):
    print("y 轴")
elif (y == 0):
    print("x 轴")
elif (x > 0 and y > 0):
    print("第一象限")
elif (x < 0 and y > 0):
    print("第二象限")
elif (x < 0 and y < 0):
    print("第三象限")
else:
    print("第四象限")

3、利用 while 循环,计算 1-100 之间数字的累加和;计算 1-100 之间偶数的累加和,计算1-100 之间奇数的累加和。
1-100 之间数字的累加和:

num = 0
x = 0
while x <= 100:
    num += x
    x += 1
print(num)

1-100 之间偶数/奇数的累加和:

sum_2 = 0
sum_1=0
x = 0
while x <= 100:
    if x % 2 == 0:# 偶数
        sum_2 += x
    else:sum_1 += x#奇数
    x += 1
print("偶数和为{0},奇数和为{1}".format(str(sum_2),str(sum_1)))

3、利用 for 循环,计算 1-100 之间数字的累加和;计算 1-100 之间偶数的累加和,计算1-100 之间奇数的累加和。

sum_2 = 0
sum_1 = 0
sum_all = 0
for x in range(101):
    sum_all += x
    if x % 2 == 0:
        sum_2 += x
    else:
        sum_2 += x
    x += x
print("1-100和为{0},1-100偶数和为{1},1-100奇数和为{2}".format(sum_all, sum_2, sum_1))
1-100和为50501-100偶数和为50501-100奇数和为0

4、打印如下图案:
在这里插入图片描述
实现:

for x in range(5):
    for y in range(5):
        print(x, end="\t")
    print()  # 仅用于换行

结果:

0	0	0	0	0	
1	1	1	1	1	
2	2	2	2	2	
3	3	3	3	3	
4	4	4	4	4	

5、利用嵌套循环打印九九乘法表

for n in range(1,10):
    for m in range(1,10):
        print("{0}*{1}={2}".format(m,n,n*m),end='\t')
    print()

运行结果:

1*1=1	2*1=2	3*1=3	4*1=4	5*1=5	6*1=6	7*1=7	8*1=8	9*1=9	
1*2=2	2*2=4	3*2=6	4*2=8	5*2=10	6*2=12	7*2=14	8*2=16	9*2=18	
1*3=3	2*3=6	3*3=9	4*3=12	5*3=15	6*3=18	7*3=21	8*3=24	9*3=27	
1*4=4	2*4=8	3*4=12	4*4=16	5*4=20	6*4=24	7*4=28	8*4=32	9*4=36	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	6*5=30	7*5=35	8*5=40	9*5=45	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	7*6=42	8*6=48	9*6=54	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	8*7=56	9*7=63	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	9*8=72	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81

6、使用海龟绘图,绘制同心圆:
发现一篇不错的博文,学习海龟图的:
链接: https://blog.csdn.net/qq_41941575/article/details/85310523.
怕博主以后删掉,复制以下内容:

2、 命令详解
2.1 turtle.circle(radius, extent=None, steps=None)
描述:以给定半径画圆 参数:
radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;
extent(弧度) (optional);steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)。
举例:
circle(50) # 整圆;
circle(50,steps=3) # 三角形;
circle(120, 180) # 半圆
2.2 画笔的状态
在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。

2.2 画笔的属性
画笔(画笔的属性,颜色、画线的宽度等)

1). turtle.pensize():设置画笔的宽度;
2). turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", “red”,也可以是RGB 3元组。
3). turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快

3、画布(canvas)
画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。
设置画布大小
turtle.screensize(canvwidth=None, canvheight=None, bg=None),参数分别为画布的宽(单位像素), 高, 背景颜色。
如:turtle.screensize(800,600, “green”)
turtle.screensize() #返回默认大小(400, 300)
turtle.setup(width=0.5, height=0.75, startx=None, starty=None),参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例,(startx, starty): 这一坐标表示矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。
如:turtle.setup(width=0.6,height=0.6)
turtle.setup(width=800,height=800, startx=100, starty=100)

实现:

import turtle

t = turtle.Pen()
Colors = ("red", "green", "yellow", "black")
t.width(2)
t.speed(6)
for x in range(10):
    t.penup()
    t.goto(0,-x*20)
    t.pendown()
    t.color(Colors[x%len(Colors)])
    t.circle(0+x * 20)
    x += x

结果:
在这里插入图片描述
7、使用海龟绘图,绘制 18*18 的棋盘:

import turtle

width = 30
num = 18
x1 = [(-100, 100), (-100 + width * num, 100)]
y1 = [(-100, 100), (-100, 100 - width * num)]
t = turtle.Pen()
t.speed(10)

for i in range(0, 19):
    t.penup()
    t.goto(x1[0][0], x1[0][1] - 30 * i)
    t.pendown()
    t.goto(x1[1][0], x1[1][1] - 30 * i)
for i in range(0, 19):
    t.penup()
    t.goto(y1[0][0] + 30 * i, y1[0][1])
    t.pendown()
    t.goto(y1[1][0] + 30 * i, y1[1][1])
t.hideturtle()  # 隐藏画笔
turtle.done()  # 保证运行窗口不被自动关闭
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值