鱼C论坛

 找回密码
 立即注册
查看: 3093|回复: 13

[学习笔记] Python学习笔记23-----实践演练(1) New!

[复制链接]
发表于 2020-8-22 23:31:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编程思维 分为如下四点:

问题分解:把现实生活中的复杂问题,逐步拆分成容易解决的小问题;
模式识别:根据已有的知识和经验,找出新问题和以前解决过的问题的相似性;
抽象思维:将问题里涉及的数据抽象到数据结构(变量、列表、字典等),把数据处理过程可重复执行部分抽象成函数;
算法设计:根据前三步的分析成果,设计步骤,写出算法,从而解决问题。


文章、生词、词频、难度分等分别要用什么数据类型保存,整型?浮点型?字符串?列表还是字典?如何将代码封装成函数?
选对合适的数据类型十分重要,比如列表适合用于有序的集合,花名册就很适合用 列表:

roster = ['林黛玉', '贾宝玉', '薛宝钗']
但如果将姓名和学号一一对应,用列表就不太合适了,一一对应的场景下 字典 更为合适:

roster = {
  '林黛玉': 20190101,
  '贾宝玉': 20190102,
  '薛宝钗': 20190103
}
除了姓名和学号外,如果还想再加一个性别,我们该怎么办?你肯定想到了,将 列表 和 字典 组合起来使用:

roster = [
  {
    'id': 20190101,
    'name': '林黛玉',
    'gender': '女'
  },{
    'id': 20190102,
    'name': '贾宝玉',
    'gender': '男'
  },{
    'id': 20190103,
    'name': '薛宝钗',
    'gender': '女'
  }
]
word_list = article.lower().replace('.', '').split()
print(word_list)
#处理文章

得到大小写统一的单词列表后,我们就可以进行单词出现次数的计算了。
# 省略之前获取 word_list 代码
word_count = {}

for word in word_list:
  if word in word_count:
    word_count[word] += 1
  else:
    word_count[word] = 1

print(word_count)
# 输出:{'this': 2, 'is': 11, 'a': 5, 'photograph': 3, ... 'into': 1}

实际成果


一篇英文文章中有很多单词,初始难度分为 0,每当出现一次生词就将难度分 +5,最终的难度分就代表这篇文章的难度。

如果你已经有了思路,可以忽略下面的内容直接开始写代码了,如果你还是一头雾水,可以再思考一下然后看下面的提示。

提示:我们在统计生词数的同时可以进行难度分的计算,因此可以合并成一个 get_difficulty() 函数,参数为每个单词出现次数的字典和生词列表。初始难度分为 0,遍历生词列表,如果生词在单词出现次数的字典中,难度分增加 5 * 该单词出现的次数,最终即可得到难度分。


article = '''This is a photograph of our village.
Our village is in a valley.
It is between two hills.
The village is on a river.
Here is another photograph of the village.
My wife and I are walking along the banks of the river.
We are on the left.
There is a boy in the water.
He is swimming across the river.
Here is another photograph.
This is the school building.
It is beside a park.
The park is on the right.
Some children are coming out of the building.
Some of them are going into the park.
'''

new_words = [
  'photograph',
  'village',
  'valley',
  'between',
  'hills',
  'another',
  'prep',
  'wife',
  'along',
  'banks',
  'water',
  'swimming',
  'building',
  'park',
  'into'
]
word_list = article.lower().replace('.', '').split()
def get_word_count(article):
  word_count = {}
  

  for word in word_list:
    if word in word_count:
      word_count[word] += 1
    else:
      word_count[word] = 1
  
  return word_count

def get_difficulty(word_list,new_words):
  s = 0
  for a in new_words :
    if a in word_list :
      s += 5 * word_list.get(a)
    else:
      continue
  return s
a = get_word_count(article)
s = get_difficulty(a,new_words)
print(s)
      

学习一下要用到的画图工具——turtle(海龟绘图)。
turtle 是 Python 中自带的绘图模块

可以把教学环境中运行结果区域想象成一个画板,而你使用 turtle 控制画笔在画板上画画。而这个画笔是有形状的,默认是一个小箭头,我们可以使用 turtle.shape('turtle') 将其设成一个小海龟。除了变成小海龟外,还支持传入 'arrow'(箭头),'circle'(圆),'square'(正方形),'triangle'(三角形)和 'classic'(经典)

调用 turtle.forward(3) 让小海龟前进 3 像素,也就是小海龟移动到了坐标系中 (3, 0) 的位置。因为我们的画笔默认是落下的,因此在移动的过程中会留下一道轨迹,即一条长 3 像素的直线

画笔的颜色默认是黑色的,我们可以使用 turtle.color('red') 改成红色的。当然,你也可以使用 turtle.color('yellow') 改成黄色,使用 turtle.color('pink') 改成粉色等等。

除了使用颜色的英文外,我们还能传入 16 进制的 RGB 色值。RGB 色值能表示出 1600 多万种颜色,比如 #000000 表示黑色,#FFFFFF 表示白色,#FF0000 表示红色等。这里只是提及一下,不要求掌握,有兴趣的同学可以自行了解更多。


注意:如果你在本地环境使用 turtle 画图,图形绘制完毕后程序会自动退出。需要在代码最后加上 turtle.done() 来防止程序自动退出。

转弯其实很简单,分为左转和右转。左转是 turtle.left(),右转是 turtle.right()。它俩的参数是角度,比如 turtle.right(90) 表示右转 90 度。同理,turtle.left(90) 表示左转 90 度。

隐藏小海龟非常的简单,只要调用 turtle.hideturtle() 即可。当你想再次显示小海龟时,调用 turtle.showturtle() 即可

直接调用 turtle.setheading(0) 让小海龟朝东,调用 turtle.setheading(180) 让小海龟朝西。当然,0 到 360 度之间的角度都是可以的,调用 turtle.setheading(45) 可以让小海龟朝向东北方向。

试一试 画画n边形
import turtle

turtle.color('red')

# n 要大于 2
def draw_polygon(n):
  for i in range(n):
    turtle.forward(10)
    turtle.right(360/n)
turtle.hideturtle()
draw_polygon(8)

五角星画法
import turtle

turtle.color('red')
turtle.hideturtle()

for i in range(5):
  turtle.forward(100)
  turtle.right(144)
设置颜色

turtle.color() 会将画笔颜色和填充颜色都设置成一个。而调用 turtle.fillcolor() 能单独设置填充颜色,你也可以调用 turtle.pencolor() 单独设置画笔颜色。

我们只要在画五角星之前调用 turtle.begin_fill(),在画完五角星之后调用 turtle.end_fill(),我们画的五角星就会被填充上我们设置好的颜色了。


红色五角星

import turtle

turtle.color('red')  # 画笔颜色和填充颜色都设为红色
turtle.hideturtle()

turtle.begin_fill()
for i in range(5):
  turtle.forward(100)
  turtle.right(144)
turtle.end_fill()

移动五角星


我们做不到直接移动五角星,但我们可以移动画笔的初始位置。只要将画笔的初始位置往左上方移动一点,这样我们的五角星就处于坐标系的最中间了。上图中画笔的初始位置在坐标系中大概是 (-50 ,20),我们可以调用 turtle.goto(-50, 20) 来移动画笔的位置。第一个参数是 x 轴的坐标,第二个参数是 y 轴的坐标。


但直接移动画笔位置是有问题的,因为我们的画笔一直处于落下的状态,移动的过程中也会画出一条直线。我们可以调用 turtle.penup() 将画笔抬起,这样移动的过程中就不会画线。等需要时再调用 turtle.pendown() 将画笔落下开始绘图。

import turtle
from random import randint

def draw_star():
  turtle.color('white')
  turtle.hideturtle()
  turtle.begin_fill()
  for i in range(5):
    turtle.forward(10)
    turtle.right(144)
  turtle.end_fill()

for i in range(50):
  turtle.speed(0)  # 最快速
  turtle.penup()
  x = randint(-150, 150)  # x 轴
  y = randint(-100, 100)  # y 轴
  turtle.goto(x, y)
  turtle.pendown()
  draw_star()


你应该注意到了 turtle.speed(0) 这行代码,这是控制绘图速度的。因为画 50 颗小星星耗时较久,所以要加快绘图速度。 turtle.speed(0) 的参数是 0-10 的整数,其中 1-10 数字越大,绘图速度越快。1 最慢,10 最快,默认是 6。而 0 表示没有动画效果,因此 0 比 10 的速度还要快。



                               
登录/注册后可看大图


未完待续~~~~~~~~~~


                               
登录/注册后可看大图

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-25 16:23:17 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-8-31 23:46:40 | 显示全部楼层

回帖奖励 +1 鱼币

此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-9-2 10:30:13 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-9-2 13:16:37 From FishC Mobile | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-9-5 10:55:12 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-9-5 10:56:08 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-9-5 21:48:58 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-9-5 21:49:45 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-9-27 16:00:44 | 显示全部楼层

回帖奖励 +1 鱼币

此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-9-30 08:07:56 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2020-9-30 12:18:11 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2021-5-31 14:51:56 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

发表于 2021-5-31 15:28:26 | 显示全部楼层

回帖奖励 +1 鱼币

此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 08:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表