头歌平台:课程答疑

实验环境

Q: 图形化窗口无法打开

进入平台 - 点击代码文件 - 点击运行 - 切换到图形化窗口即可以看到图形界面。

?> 提交时,可以直接关闭窗口来提交。评测机只能够评测输出,不能改评测代码内容。因此基于 8.1 和 8.0 的实验,只要保证窗口没有任何错误输出就可以 Pass 了。当然这不是说你可以直接搞个空窗口提交,因为毕竟会有人看你的代码的。

Q: 不知道如何系统学习python

其实有一个 误区, 这个课程的作业其实和 Python 基础语法一点关系也没有。你可以将这个课程的作业当作是 高中的阅读理解题目,根据每次实验的介绍来完成题目即可。
不过如果要系统的学习 Python 的话,也可以给出一条比较清晰的路径,如下:

?> 个人是不太建议看视频的,容量低,速度慢

一个还不错的,我当时学的时候看的教程:

说实话,学习任何一门编程语音的通用途径基本上可以被概括为:

  • 学习基础的语法知识,了解这门语言的基本范式。这正如从 JAVA 和 C# 中感受托管语言,OOP 的精华之作,怎么从某个 object 点出他的 method, proper 等等。这正如怎么从 Go 中感受类 C/C++ 编写逻辑,抛弃了类,该用鸭子类型,大片的 func。Python 也正是如此,其基本思想是简化很多操作逻辑,你可以去上文提到的 Basic 来快速入门 Python 的基本类型,基本语法,构建一个属于 python 的世界观。
  • 学习衍生的框架和库。让我们望而生畏的其实不是语言本身,如果你只是学了一个 Python,其实做不了很多事情的。你正是基于 每个语言的生态 来能够开发很多有意思的东西。作为初学者,比如对于这个课程,你想要做 TKiner 来画界面,所以你就可以去看 TKiner 的教程,跟着学即可。当然,不是说一件事只有一个解决方案,日后,你也可以去用 PyQT 画界面。并且说不定你会抛弃 Python 投奔到 WinUI3 用 C# 等等。因此对于这种衍生的框架和库,抱着需要啥,查查有啥,然后学啥用啥即可。

8.1 实验课

Q:没有python基础,不知道怎么写 & 不知道在哪里写代码 & 注释不明确

?> 如上所述,这个是阅读理解。虽然说是阅读理解,但是也涉及到了一些基础知识。

以 8.1 为题目为例子简单说一下,为了避免同学们抄作业,我不会直接给出可提交的代码:

界面描述

首先,我们肯定知道,这个答案应该写在 Begin - End 中间,对吧。然后我们看左侧的题目,我们会发现左侧的题目基本上在通篇介绍什么是 Canvas,以及怎么在 Canvas 上面画图。比如,我们逐步分析一下这个教程:

import tkinter as tk
root = tk.Tk()  
canvas = tk.Canvas(root, width=500, height=500)  
canvas.pack()  

对于这个片段,教程中给出的句子是:“在创建 Canvas 对象时,可以通过设置 width 和 height 参数来指定画布的大小”。如果你不会 Python 的话,那我们整好来顺着说一下:

Python 的基本思路,你可以概括为:导入一个包 - 声明一些对象 - 用这些对象标记一些事情 - 一些装饰语法,用于pack canvas

例如,我们看:

import tkinter as tk

这里的意思是,我们导入了 tk 这个库,这使得我们具有了 画出界面的能力

然后,我们需要一些装饰性质的操作。比如对于下面的代码:

root = tk.Tk()  
canvas = tk.Canvas(root, width=500, height=500)  
canvas.pack()  

对于第一行:这行代码创建了一个主窗口,也就是图形界面的基础窗口。Tk() 是 tkinter 的一个类,调用它会生成一个窗口对象 root,所有的 GUI 控件(如按钮、画布等)都会放置在这个窗口内。
对于第二行:这行代码创建了一个 Canvas 画布对象,它是一个可以在其中绘制图形、文本等内容的区域。Canvas 是 tkinter 模块中的一个类,用来绘制各种图形,如线条、矩形、椭圆等。 其中,root 参数表示将这个画布放置在主窗口 root 中。而 width=500, height=500 参数指定画布的宽度和高度为 500 像素。
对于第三行:pack() 是一个布局管理器,用来将 canvas 画布添加到主窗口中,并自动调整布局。pack() 方法告诉 tkinter 把这个画布显示在窗口中。没有 pack(),即使创建了画布,它也不会在窗口中显示出来。

那么我们姑且的可以认为,我们以上代码构建了一个 container,那么我们只需要把东西放进 container 即可。

比如,如果我们需要一个五边形,那么就在 pack 前插入即可:

canvas.create_polygon(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5)  

我们再看题目,那么题目让我们干的事情就呼之欲出了:
题目

SubQ1:让我们画三个直线,组成一个 Y 形。
SubQ2:让我们画一个单独的直线,组成一个直线。

例如:
Y形:

canvas.create_line(150, 20, 150, 140, width=2)  # 垂直部分
canvas.create_line(150, 140, 100, 200, width=2)  # 左斜线
canvas.create_line(150, 140, 200, 200, width=2)  # 右斜线

直线:

canvas.create_line(50, 500, 400, 500, width=2)

再看主代码:
主代码

你回头看看我们的框架代码,少了点什么?那就补上去

大概理解了意思之后,你可能就需要边学边查了。举个例子,我不知道 width 是干什么的,那么我就可以搜索 canvas create_line
得到如下搜索结果:
Google It
然后,我们打开:
Width
那么这个地方我们就知道了,width 表示的是 线宽的pixel

posted @ 2024-10-23 09:10  EpicMoCN  阅读(929)  评论(0编辑  收藏  举报