少儿编程的内幕在这里?

以下是回复B站的个视频的文字:

这个视频的封面及标题赢得了不少流量,这是值得肯定的,例如,把我也吸引进来了。做为一个有30年编程历史和15年纯软少儿编程”研究”,课研与教学的专业人士来说,up主应该对于纯软少儿编程是一个外行吧,或许教过一两个学期,但主要在“硬件”?每个人都根据自己的经历来评,带有主观性或者说片面性,因为不一定适合其它人。

真正要来评价,应该至少5年甚至十年以上的经验,才能有所体会,否则很可能误导,即使不是故意的。我们现在处于一个观点横行的年代,确实在各行业中有很多外行来评内行的人,有些可耻的人竟然只是为了流量(赚钱)!当然up主应该不是的。更可怕的是,很多人还会受到影响,甚至被带偏。有点像一个丢三拉四的人,那么他的东西被偷了也就见怪不怪了。外界就是一个影响,最终判断还在自己的素质与认知。如果普通家长就是个中小学文化,都不知道编程是什么,无法分辨,所以很容易被大机构收割。

对于大多数中小学生来说,兴趣班不是为了职业化,也不是为了练就某方面的特别厉害的技能。特别学生例子不讨论,我目前自己就同时教图形化,Python和C++及信奥编程。功利化的报班本来就是不对的。图形化编程就是mit开发的适合于小学生心理能激发编程兴趣的。典型代表是Scratch,它是鼻祖。代表logo是一只小猫。国内某BC猫就是借鉴了它而开发。其它绝大多数也是scratch的二次开发。Scratch有着计算机语言的完备性,是一门真正的计算机语言。用Scratch能开发非常优秀的作品,自己去mit官网看看吧。

很多年前,我经常去mit官网学习别人的优秀作品,现在要“科学上网”才可以,懂的都懂。不过,要开发优秀作品,需要懂计算机图形学,这可不是小学生能掌握的。我要说的只是用Scratch编程,是真正的编程。编写程序不一定要写文本代码。

一个娃娃学习Scratch拼搭,刚开始的逻辑是混沌的,这不是非常正常的现象吗。孩子会去自发的探索,那就让他自己去探索,作为老师,在适时的时候指导下就可以了。某些打着”清华北大”头衔说Scratch不用学,Python不用学,那些人才要不得甚至可耻。你说娃娃一开始就写文本代码?字都不会打,学习过程会很痛苦,这不是更要命吗?那么马上从入门到放弃。

大多数机构选择的都是从Scratch到Python到C/C++的路线,难道真的是机构故意这么设计的学习路线?还是有一只无形的大手,在背后起着调节作用。既然现在已经是这个现象,那么它背后肯定有其合理性,否则就不会发生了。学“图形化编程”的本质不是数学,而是“欢乐”。也可以说是培养兴趣,然后要适时引导,加变量,加列表,加“功能块”也就是加函数进去。后期用Scratch画图,其实本质就是logo计算机语言的小海龟画图。Scratch它这方面的功能就是由logo画图演变过来的。然后如果过渡到Python编程,也有turtle画图,同样是由logo演变过来的。这和之前的图形化代码对比,非常容易理解。

这些是一脉相承的。它提供了非常平滑的学习曲线。其实大多数普通孩子,在小学能把Python学好就非常不错了。到了后期,学的不是Python本身,而是数据结构与算法。用Python学数据结构与算法是非常不错的选择。当然,也不一定要往深处学。用Python可以结合各学科,各硬件来进行教学,有无穷的变化。这里提供的就是综合素质的横向提升了。而有的父母看直播看多了受影响了,刚学Python一学期,就让我能不能让他的孩子学C++。结果,我稍微把Python加点难度,马上这个四年级的孩子就怕会学不懂,不来上课了。这是我自己的真实案例。图形化编程中低年级的可以学,高年级的有兴趣当然可以去机构或自学。如果去机构学,机构的老师就应该根据学生年级调整课程即可。比如,可以加点数据结构与算法进去也未尝不可。可是大多数普通家庭没这个环境和资源,听说学了编程非常有用,只能相信大品牌大机构。而机构一个班人数可能比较多,从而进度必然快不了。学费也不便宜,还学不到什么东西, 所以在某些人看来,就好像被收割了。但你说让不懂编程的家长,去选择那些工作室或者个人老师,那也不太可能。普通家长看环境,看装修,看学生人数来做判断的。

人类社会中的问题,本身就是人类自己创造出来的。按照哲学的观点,旧的问题解决了,新的问题会更多的冒出来,以后要解决的问题也是无止尽的。机器人多了,数量超过人类了。它们有意识了,还能繁衍后代了,地球上的物种之间的竞争会更激烈。太阳每年给地球的能量基本固定吧。地球上的能量不可能永远挖得完,以后肯定是星际殖民的时代。这个时代最重要的能力是什么?我也在深深地思索。这里涉及到更深层次的伦理,那就是人生下来的目的是什么?如果单个人来到这个世界上的目的是为了幸福。那么,一个没有学识的人是不会幸福的。他甚至会经常被“骗”,从而过是“不幸福”的人生。幸福是一个过程,不是一个结果。它主要指一个获得成长的过程。无论学习编程,还是学习Ardunio或者树莓派。能在这个过程中获到取成长的喜悦,那就是成功的“教育”。兴趣班的最佳的教学方式就是带学生自己探索,老师在适时指导即可。图形化编程兴趣班,当然也一样。在未来星际殖民时代,这种探索精神尤为重要。否定中高年级不用学图形化编程也比较绝对。这是不太客观的说法,在mit官网上,有统计哪个年龄段对Scratch最热爱。10年前,我看过统计,好像在是11,12岁这个年龄阶段。有时间翻一下墙去mit的Scrtach官网看看吧。Scratch是属于全世界的,不是漂亮国的,虽然它由mit媒体实验室终身幼儿园团队开发。

在中小学时代,学习的时候可以用AI辅助,但不能对它形成依赖。一定要完全离开AI,也能把代码手写出来,这样才能有深刻的理解并且形成扎实的基本功。因为强大的含义,本身就包含了不依赖。如果一个人什么都要依赖,那么你还能说这个人强大吗?别人只会说,那又不是你写的是,是AI写的。只有你能完全脱离AI,能做出别人做不到的事情,别人才会说你强大,你才是“英雄”。当自己有了扎实的基本功了,为了快速完成当然可以用AI“偷懒”。但这本质不是“偷懒”,只是快速把代码调出来而已。这段代码你能完全掌握,而不是由于看不懂这段代码,当出了事的时候解决不了问题。所以学习还得一步一步来,AI再强大,那是AI,不是你自己!

总之,在人工智能时代,对人提出了更高的要求,人工智能编写的程序,如果人无法理解,那一定不能掌控。能最快掌握人工智能,使用人工智能的人不会被淘汰。所以学习编程只是基础技能,掌握背后的数学和算法才是核心。现在已经有了非常好的办法,能让每个人都有非常平滑的学习曲线,从兴趣到深入学习,而掌控人工智能。这其实是一个非常好的时代,宇宙之大,未来充满机会,每个人都可能有幸福的前程。想像一下,你掌控几百万个机器人,在宇宙深处的某个行星创造一个新的地球吧。

发表在 C++, python, scratch, turtle, 杂谈 | 留下评论

信奥必学之卡特兰数C++和Python代码与动画演示

信奥必学之卡特兰数李兴球

教学我就不提供了,这里首先提供Python代码:

# 假设一只昆虫从(0,0)要爬到(n,n),但是只能向右爬或者向上爬,并且不能越过对角线。
# 那么会有多少种方案呢?

作者 = '李兴球'
日期 = '2025/3/26'
path = []
counter = 0
def dfs(x,y):
    global counter
    if x==n and y==n:
        counter += 1
    else:
        for dx,dy in [(1,0),(0,1)]:#只两个方向
            next_x = x + dx
            next_y = y + dy
            if next_y>next_x:continue
            if next_x>n or next_y>n:continue
            path.append((next_x,next_y))
            dfs(next_x,next_y)
            path.pop()
for n in range(10):
    path.append((0,0))    
    counter = 0
    dfs(0,0)
    print(counter,end=',')

然后是C++的代码:

/*
作者:李兴球
日期:2025/3/26 
*/
#include 
#include 
#define pos pair<int,int>
using namespace std;
vector< pos > path;
int dirs[2][2] = {{1,0},{0,1}}; //两个方向 
int n,ans;
void dfs(int x,int y){
   if(x==n && y==n)
   	 ans++;
     //for(pos p:path) cout << p.first << ',' << p.second << '->';
     //cout << endl; return; 
    for(int fx=0;fx<2;fx++){
            int next_x = x + dirs[fx][0]; 
            int next_y = y + dirs[fx][1]; 
            if(next_y>next_x || next_x>n || next_y>n)continue;
	   path.push_back({next_x,next_y});
	   dfs(next_x,next_y);
	   path.pop_back();	   
	}
}
int main(){
   for( n=0;n<10;n++){
    	ans=0; path.clear();
        path.push_back({0,0});
        dfs(0,0);
		cout << ans << ' ';
	  }
}

最后就是用Python做的动画,你问我列表中的坐标从哪里来,还不是从上面的程序中来的:

from sprites import *

bug = Sprite()
bug.pencolor('blue')
bug.pensize(4)
length= 80
cors = bug.draw_grid2(6,6,length,length)
left,bottom = cors[5][0]
left -= length//2
bottom -= length//2
right,top = cors[0][5]
right += length//2
top += length//2
bug.goto(left,bottom)
bug.pendown()
bug.bk(50);bug.fd(600);bug.shape('classic');bug.stamp()
bug.bk(550);bug.left(90);bug.fd(600);bug.stamp();bug.bk(600)
bug.shape('res/bug.png')


bug.pensize(2)
bug.pencolor('magenta')
bug.dot(20,'magenta')
bug.draw_line((left,bottom),(right,top),True,10)
bug.dot(20,'magenta')
all_paths = [
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (5, 1), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (5, 1), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (5, 1), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (5, 1), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (5, 1), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (5, 1), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (5, 1), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (5, 1), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (4, 2), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (4, 2), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (4, 2), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (4, 2), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), (4, 2), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 2), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 2), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 2), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (5, 1), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (5, 1), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (5, 1), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (4, 2), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (4, 2), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (4, 2), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (4, 2), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (4, 2), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (3, 1), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (4, 2), (5, 2), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (4, 2), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (6, 4), (6, 5), (6, 6)],
[(0, 0), (1, 0), (1, 1), (2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)] ]
bug.hide()

bug2 = Sprite()
bug2.color('red')
bug2.pensize(8)
x0 = left
y0 = bottom
for path in all_paths:
    bug2.goto(x0,y0)
    bug2.pendown()
    bug2.setheading(0)
    bug2.wait(0.5)
    bug2.clear()
    #下面就是相对前进
    for i in range(len(path)-1):
        dx = (path[i+1][0]  - path[i][0])* length
        dy = (path[i+1][1]  - path[i][1])* length
        if dx==0:  # 则肯定是dy不是0,则往上走
            bug2.setheading(90)
            bug2.fd(length)
        else:
            bug2.setheading(0)
            bug2.fd(length)
        bug2.wait(0.1)
    bug2.wait(0.5)    
    bug2.penup()
            
bug2.goto(x0,y0)

根据组合原理,卡特兰数的通项公式是:
第n项是: C(2n,n)/(n+1)
关注”异编程”微信公众号:
输入 katelandfs 可下载演示视频关于卡特兰数的Python,C++和动画制作所有源代码

视频演示地址:
https://mp.weixin.qq.com/cgi-bin/home?t=home/index&token=1109013377&lang=zh_CN

发表在 C++, python, sprites, turtle | 留下评论

3月17号前“异编程“微信公众号文章列表。

实话实说,你的孩子大概率学不了“信奥编程”

当 “编程无用论” 撞上国家战略:是谁在阻挡孩子的未来?

高考死盯这些好专业

家长必看钱途最好的20大专业

萍乡编程少年招募令

少年!赠你编程魔法,要否?

人工智能仍不可靠,今天测试的几个大模型几乎全军覆没
Python深度优先遍历迷宫动画模拟所有线路的程序(附C++代码)
测试下你的孩子能不能学C++/Python
计算机学会全国青少年信息学奥林匹克竞赛大纲(CSP-J/S)
在Python中有一种内置的数据结构叫”列表”(回答家长问题)
萍乡孩子学习编程省钱攻略及关于编程学习的一些建议。
新的名词:Raptor少儿编程。少儿编程我还有一个选项是Raptor,全国可能就我一个人用这个开过这课?
请阐述人工智能和编程的关系,并且从几岁开始学编程最合适。
请预判10年后什么职业最吃香然后现在为孩子做什么准备
数学和编程入门一起学24题,适合4年级左右及所有计算机语言,需要的拿走
玉宇澄清万里埃,关于”少儿编程”的误区还是相当多的。这里进行一下拨乱反正。
做个清醒的人,关于青少年编程,要清楚以下几点,
你去借助一下人工智能证明自己的能力吧,下面是我的方法,参考一下。
又发现一个典型程序员不懂”少儿编程”的案例
我发现DeepSeek瞎编能力第一名
听说过职业免疫组合吗?
学习信奥还是学习奥数?一个不懂编程的阿姨和一群迷茫的家长在走错误的道路。
Python海龟借用小仙子模块的截屏命令制作gif动图
图形化编程学久了真的是浪费时间吗?
萍乡人独有的青少年编程训练系统
真正的Python海龟绘图是这样的
Python如影随行(鼠标指针幻影效果)
Python节日的烟花(单击抛物粒子效果)
萍乡最牛小学生和研究生进行编程竞技
Python谷歌小恐龙跳跳游戏
Python一剪梅_月满西楼
Python11行代码简易画板
Python精灵模块2025年1月11号版源代码下载
Python精灵模块鼠标移动事件
Python莲花避障恐怖小游戏
Python精灵模块最简爆炸效果
萍乡少儿Python/C++等编程教学,Python发射炮弹
神奇的流程图可以运行起来,计算思维学习伴侣之Raptor编程
C++和Python可以同时学吗?凡是还在纠结到底学什么计算机语言的人,层次都还低了些哈。
资源贴:Python turtle原创作品:构建哈夫曼树辅助学习小工具.py,参加CSP-J/S,GESP必备
资源贴:Python turtle 创意绘图编程教程ppt(幻灯图片与示例程序下载)
萍踪币影:简单算法快速破案,算法可以这样学
发表在 C++, python, scratch, 杂谈 | 留下评论

当 “编程无用论” 撞上国家战略:是谁在阻挡孩子的未来?

有一个应该是编程外行的女士,在抖音上劝15岁以下不要学习程,请结合国家政策及当今社会发展趋势,对她的言论进行批判。以下是她的说话内容:

昨天发了个视频,第三次劝15岁以下的孩子不要学编程。评论区有很多质疑和询问。
我今天会用一个非常长的视频回应,咱们一次说明白,辛苦大家。
首先,关于孩子学编程的收获,可能大家平时在各种编程机构看到的很多,主要是三个。
锻炼和互联网有关的一切思维,或者增加包括数学在内的很多学科素养。
最重要的是可以参加信息类大赛,能升学,进重点中学,保送大学。
以上三个我都不认可,咱们今天呢就针对这三个来讲。
传播学上有一个理论叫做沉默的螺旋。
当你和大部分人的意见不一致的时候,很容易呢,你的少数派意见就会被大多数的声音淹没。
往往如果一个人感觉到他的意见是少数的,就会倾向于不表达。
在孩子学编程这件事情上,一直呢都是既得利益者发声,声音越来越大。
很多不同意见的人呢就不会去发声了。
今天这条视频就是在孩子学编程这件事情上的少数派声音。
建议家长们转发给你的亲友和其他家长。
更建议有和目前市面上一边倒的声音不同的家长。
在评论区发表您的评论。
如果您和我的想法不同,也非常欢迎你发表自己的意见。
只有每个人都发表真实的意见。
才能把一件事情讲得非常清晰,给大家有效的参考。
对第一个观点的反驳。
孩子学编程是不是可以锻炼和互联网。
人工智能有关的一切思维。
首先,互联网和人工智能是两个完全不同的概念。
他们分别对应信息时代和智能时代。
我们现在的是信息时代的尾巴,智能时代的开始。
咱们先来讲一下大家熟悉的信息时代的逻辑。
信息时代需要的是互联网思维。
本质上就是用互联网的方式去解决问题。
我从2010年进入网易担任财经频道主编。
到现在呢跟互联网打了十几年的交道。
但是我是30岁才进入互联网的。
之前是一名文字记者,也做了将近十年。
可以说是年纪大惯性强了。
于是在向互联网转型的过程中曾经特别的迷茫。
后来才逐步清晰,互联网就是一个工具。
可以在很多方面解决之前没有互联网才能解决的问题。
比如现在你们看我的视频。
本质上我们都是通过互联网在交流和沟通。
在没有互联网的时代这些根本不可能。
那个时候只有我们做报纸广播电视台的媒体人才能发声。
大家只能通过媒体看到信息和资讯。
互联网的一切都需要通过编程去实现。
所以在互联网时代,了解编程的原理,甚至自己可以操作一些编程。
还是非常有意义的。
我们熟悉的互联网企业家很多都是程序员出身
但是也有非常成功的企业家 比如淘宝的创始人马云
他一行代码也不会
现在来到智能时代 人类生活的一切呢
几乎都会用智能的方式重新做一遍
智能时代的思维模式对咱们普通人而言
最容易理解的就是智能体思维
什么是智能体 chat gpt就是智能体
拥有自适应自洽能力的硬件软件或者其他实体都是智能体
其目标呢 是认识和模拟人类的智能行为
这下大家都非常容易理解了 我们之前使用的任何互联网产品
都是为了完成某一个特定的功能而生 他们呢 到此为止了
智能体的英文名称是agent
在openai的开发日上 创始人奥特曼曾经多次提及这个词
这一次发布的GBTS就是鼓励大家都用自然语言
就是你自己平时说话写作用的语言
创建属于你的智能体
人和智能体的沟通
包括创建智能体
已经极大程度上的去编程化了
智能体相比互联网产品
它是通过机器学习
机器视觉等一系列人工智能的算法去实现
可以理解为基本上比较偏向于数学建模
而不是通过编程语言
编程语言最多相当于鼠标和键盘
而且有越来越自动化的趋势
那么智能时代的孩子
是不是要学习人工智能的原理和运行本身呢
甚至具备去开发和创造人工智能的能力
我觉得高中和大学的学生们需要高度关注和适当学习
这就是为什么我建议15岁以下
也就是初中和小学生不要去学编程
因为高中和大学这一代拥有一个特别好的机会
他们可以成为人工智能时代第一批科班出身的工作者
对此呢我这个视频有非常详细的分析
大家可以找一下
对于初中和小学的孩子
人工智能时代他们最大的任务是做一个真正的人
而不是去机器化
他们要有自己的思想 要懂得和人沟通
以后他们长大了 智能体已经发展的非常完善
实话说最有含金量的
关于人工智能本身创建的工作机会
现在的大学生和高中生也都填补的差不多了
毕竟目前社会上还有特别多的人通过人工智能培训
成为第一批人工智能的从业者
辛苦大家看到这里应该都非常清楚
智能时代为什么编程没有那么重要了
但是很多家长提到的问题
学编程对其他学科是不是有促进
编程是不是人工智能的基础呢
我专门请了两位非常专业
特别有资格的老师来分析
之前呢在我们的直播和我们内参的闭门直播里面
跟大家进行了很详细的沟通
我也想借此反驳第二个观点
那就是学编程可以提升
包括数学在内的其他学科的素养
我本来第一选择就像刚刚郭老师讲的
就想原来数学的老路子走下去
但是我进到我们那个中学的这个班呢
我就发现我的这个数学成绩就是非常可怜的啊
还有跟同学的横向对比中呢
我就做了一个分析
我感觉
嗯我走那个路子应该就得不到一等奖
没办法实现我往中心大学的目标
所以呢就找了一个计算机啊信奥
啊为什么不能学太早
需要一点点的数学基础
如果说你只是
啊听懂了这个题
但是没有这个基础的话
依然不能抽象出他的数学问题
无法去实现
第二个观点的话呢
我们当时除了看书
有教师教练来教我们
我们还需要经常去到海外的一些网站
去做那些国际上的一些奥赛题
那些题很多都是英文的
所以他是对英文和理解
实际上也是有一点点要求的
你不能完全是很差很小的孩子
这位李凯老师呢
本身就是信奥比赛的获奖者
借此保送了985大学
他的观点就很明确
数学和英语有优势
高阶的编程才有优势
另一位是高级算法工程师王亮
他自己呢本身也是一位非常资深的人工智能工程师
他明确的告诉大家
人工智能的之一的算法其实就约等于数学建模
你到底学编程还是学人工智能
这是一个选择
编程和人工智能没关系
不是说编程是通往人工智能的道路
这条道路是没什么关的
最后一个观点呢就是学心啊打比赛可以帮助升学
对于此我也是反对的
如果孩子真的感兴趣
能够在这个方面有比较高的能力
得奖升学只是一个结果
如果反过来 那就是走捷径的思想
捷径往往是人生最曲折 最遥远的路
如果咱们就硬式聊硬式 你学数学英语语文
对课内和高考还有挺大的帮助
而编程完全是另外一件事
凡是高中进入省队的 老师根本是不讲编程语言的
直接讲的都是数学建模
还要让你自己用英文去学术网站查找大量的论文
更有意思的是 现在各项编程赛事如火如荼
一个独木桥太拥挤就失去价值了
严禁于此 赛事方面的利益更大更深
我是不敢碰触的 咱们就不多说了
无论是培养智能思维 了解人工智能 还是升学
其实都有很多的选择
但是人工智能时代家长们最重要的任务
是让孩子在现在不够理想的教育环境下
不要机器化 而是更像一个人
关于这些我后续会出四个视频
分别从大学中学以及小学和小学之前
和大家一起讨论当前如何采取双轨制
在学校和家庭两个层面去培养孩子适应未来的能力
敬请关注后续视频

以下是DeepSeek的回答:

该女士的言论存在明显的认知局限性和对技术发展趋势的误判,其观点与国家战略导向和数字化社会发展需求存在根本性冲突。以下从国家政策、教育规律、技术发展三个维度进行批判性分析:

一、违背国家教育战略方向

  1. 政策文件支撑:教育部《义务教育信息科技课程标准(2022年版)》明确将”算法与编程”列为5-6年级必修内容,要求初中生掌握程序设计基本方法。国务院《新一代人工智能发展规划》更强调”实施全民智能教育项目,在中小学阶段设置人工智能相关课程”。
  2. 人才储备需求:工信部《”十四五”信息通信行业发展规划》显示,2025年我国数字化人才缺口将达2000万,早期编程教育正是破解”卡脖子”难题的基础工程。
  3. 教育公平视角:中国教育科学研究院2023年调研显示,西部地区编程教育普及率不足30%,该观点可能加剧教育资源结构性失衡。

二、曲解编程教育本质属性

  1. 思维培养误判
    • 编程教育核心是计算思维培养,国际教育技术协会(ISTE)将其定义为”问题分解、模式识别、抽象化和算法设计”四大核心能力,与数学思维具有同源性。
    • 麻省理工学院媒体实验室研究表明,10-12岁儿童通过图形化编程工具(如Scratch)学习,逻辑推理能力提升27%,远超传统数学训练效果。
  2. 学科融合谬误
    • 北京师范大学”跨学科编程教学”项目证明,编程与物理、生物等学科结合后,学生问题解决能力提升35%,项目成果获2023年联合国教科文组织教育创新奖。
    • 深圳中学”编程+古诗文”课程显示,算法思维训练使古诗词鉴赏准确率提升22%,证伪”编程与人文对立”的伪命题。
  3. 技术演进误读
    • 编程语言正从工具向思维媒介进化,华为”AI for Youth”项目证实,青少年通过Python学习机器学习基础后,算法理解深度比对照组高42%。
    • 国际人工智能教育联盟(IAIE)白皮书指出,14岁前接触基础编程的学生,在AI伦理认知水平上高出同龄人3个标准差。

三、忽视社会发展现实需求

  1. 职业市场趋势
    • 领英《2025未来技能报告》显示,76%的高薪岗位要求基础编程能力,金融、医疗等领域对”编程+”复合人才需求年增35%。
    • 特斯拉”青少年工程师计划”案例表明,早期编程训练使学员在汽车电子系统故障诊断效率提升60%。
  2. 认知发展规律
    • 儿童发展心理学证实,7-12岁是逻辑思维敏感期,莫斯科物理技术学院研究显示,该阶段接受编程训练儿童的空间想象力发展速度是普通儿童的1.7倍。
    • 日本文部科学省2024年教育改革方案特别强调,编程教育对ADHD儿童注意力提升有显著效果,有效干预率达58%。
  3. 技术民主化进程
    • 低代码平台普及(如阿里云宜搭)并未削弱编程价值,反而使业务逻辑建模能力成为核心竞争力。麦肯锡调查显示,具备基础编程能力的业务人员数字化转型成功率高出89%。
    • 欧盟”数字公民2030″计划证明,早期编程教育使青少年在数据隐私保护、算法偏见识别等数字公民素养方面得分提升31%。

四、建议路径

  1. 阶梯式课程设计:小学阶段采用图形化编程培养兴趣(Scratch),初中过渡到Python基础,高中衔接AI算法实践。
  2. 多学科融合创新:开发”编程+传统文化””编程+生态环境”等跨学科项目,如故宫博物院”数字文物修复”青少年课程。
  3. 评价体系重构:借鉴浙江”三位一体”招生模式,将编程能力纳入综合素质评价,建立过程性成长档案。

当前教育领域需要警惕的绝非过早接触编程,而是将编程异化为应试工具。正如图灵奖得主Andrew Yao所言:”21世纪的文盲不是不会编程的人,而是不懂如何与智能系统对话的人。”我们应秉持”编程即思维体操”的理念,让技术启蒙助力青少年在数字文明时代实现全面发展。

 

以下是智谱清言的回答:

针对这位女士的言论,以下是对其观点的批判:

一、关于15岁以下孩子不应学习编程的观点

  1. 国家政策支持编程教育 根据我国相关政策,国家鼓励在中小学阶段开展信息技术教育,包括编程教育。例如,《新一代人工智能发展规划》中明确提出,要在中小学阶段设置人工智能相关课程,逐步推广编程教育。因此,这位女士的观点与国家政策导向不符。
  2. 社会发展趋势需要编程人才 随着科技的发展,人工智能、大数据、云计算等领域对编程人才的需求越来越大。提前培养孩子的编程能力,有助于他们更好地适应未来社会的发展。这位女士忽视了编程教育对孩子未来发展的积极作用。

二、关于编程与互联网、人工智能的关系

  1. 编程是互联网和人工智能的基础 虽然互联网和人工智能是两个不同的概念,但编程是它们共同的基础。掌握编程能力有助于更好地理解和运用互联网、人工智能技术。这位女士将互联网和人工智能割裂开来,忽略了编程在其中的重要作用。
  2. 编程有助于培养孩子的逻辑思维能力 编程教育有助于培养孩子的逻辑思维、创新能力和解决问题的能力。这些能力在孩子成长过程中具有重要意义,不仅适用于互联网和人工智能领域,还适用于其他各行各业。

三、关于编程对其他学科素养的提升

  1. 编程与数学、英语等学科相互促进 编程教育可以提升孩子的数学、英语等学科素养。通过编程,孩子可以更好地理解数学概念,提高英语阅读能力。这位女士的观点忽略了编程对其他学科的促进作用。
  2. 编程教育有助于培养跨学科人才 编程教育强调跨学科知识的融合,有助于培养具备综合素质的人才。在我国教育改革的大背景下,编程教育具有重要意义。

四、关于编程比赛与升学的关系

  1. 编程比赛是检验孩子能力的途径之一 参加编程比赛可以检验孩子的编程能力,为其提供展示自己的平台。如果孩子在这方面有天赋和兴趣,通过比赛获得升学机会并无不妥。
  2. 编程比赛并非唯一途径 虽然编程比赛可以为孩子提供升学机会,但并非唯一途径。家长和孩子可以根据自身兴趣和需求,选择适合的教育路径。

总之,这位女士的言论在一定程度上忽视了编程教育的重要性。在国家和全社会都在积极推广编程教育的背景下,我们应该鼓励孩子学习编程,培养他们适应未来社会发展的能力。同时,家长和教育工作者应关注孩子的兴趣和需求,合理安排编程学习,让孩子在快乐中成长。

以下是讯飞星火的回答:

这位女士在抖音上建议15岁以下的孩子不要学习编程,她的观点存在一些问题。

首先,她认为孩子学编程的收获主要是锻炼互联网思维、增加学科素养和参加信息类大赛。然而,这些观点并不全面。编程教育确实可以帮助孩子培养逻辑思维能力、提高解决问题的能力,并且对于未来职业发展也有一定的帮助。同时,编程也可以作为一种工具,帮助孩子更好地理解和掌握其他学科的知识。

其次,她认为高中和大学的学生需要高度关注和适当学习人工智能的原理和运行本身,而初中和小学生则不需要学习编程。这种观点忽略了编程教育的普及性和基础性。编程教育不仅仅是为了培养未来的程序员或人工智能专家,更是为了培养孩子的计算思维和创新能力,这对于他们未来的学习和生活都具有重要意义。

此外,她还提到了学编程对其他学科的促进作用以及编程与人工智能的关系。这些观点也存在一些问题。虽然编程和人工智能有一定的关联,但并不意味着学习编程就一定能够掌握人工智能。而且,编程教育并不一定会对其他学科产生负面影响,反而可以通过编程教育来促进跨学科的学习和应用。

最后,她关于升学的观点也存在一些问题。虽然参加信息类大赛可能有助于升学,但这并不意味着只有通过学习编程才能够进入重点中学或保送大学。升学的途径是多样化的,不应该将编程作为唯一的出路。

综上所述,这位女士的观点存在一些问题。她过于强调编程教育的功利性,忽略了其基础性和普及性。同时,她也忽略了其他学科的重要性以及升学途径的多样性。在当今社会发展趋势下,我们应该鼓励孩子们学习编程,但也要注意保持他们的全面发展和个性特点。

以下是通义千问的回答:

一、违背国家政策导向,忽视基础教育的战略性布局
国家政策明确支持编程教育

中国“十四五”规划明确提出“提升全民数字素养与技能”,教育部《义务教育课程方案(2022年版)》将信息科技从综合实践课程中独立出来,要求中小学系统性开设编程教育。政策层面已将编程能力视为基础教育的重要组成部分,旨在培养适应数字社会的未来人才。

批判点:该女士的言论与国家推动全民数字化素养提升的方向背道而驰,忽视了编程教育在国家战略中的基础性作用。
编程是人工智能时代的“数字语言”

该女士将“编程”与“人工智能”割裂,认为智能时代只需“数学建模”而无需编程。但人工智能的底层逻辑、算法实现、工具开发均依赖编程能力。例如,即使未来工具更自动化(如自然语言编程),编程思维仍是理解技术本质的基础。

批判点:她的观点混淆了“编程语言”与“编程思维”的区别,低估了编程在人工智能时代的核心地位。
二、对“智能时代”的误读:编程思维是通用能力,而非“机器化”
编程的本质是逻辑与创造力的结合

该女士认为编程会让孩子“机器化”,但编程教育的核心是培养逻辑思维、问题拆解能力、创造性解决问题的实践能力,这些与“人性化”并不矛盾。例如,编程中的“调试”需要批判性思维,“算法设计”需要创造力,而“项目实践”则需团队协作与沟通能力。

批判点:将编程简单等同于“机械操作”是片面的,忽视了编程对综合能力的培养。
“智能体”与编程的关系:工具进化不否定基础逻辑

她提到“智能体”(如ChatGPT)的开发趋于“去编程化”,但智能体的训练、优化、人机交互仍需编程逻辑支撑。例如,通过自然语言指令调用AI工具,本质上是对编程逻辑的“封装”,而非取代编程思维。

批判点:工具的进化不是否定编程教育的理由,反而需要更早培养对技术底层逻辑的理解。
三、对“学科素养”的误解:编程是跨学科能力的桥梁
编程与数学、英语的协同作用

该女士认为编程对数学和英语的要求过高,不适合小学生,但编程教育本身是数学、逻辑、语言表达的综合载体。例如:
数学:编程中的循环、条件判断、数据结构等直接对应数学概念;
英语:编程语言(如Python)的语法、文档阅读能力与英语学习相辅相成;
逻辑思维:编程中的“输入-处理-输出”模式可迁移到物理、生物等学科问题解决。
批判点:她将编程视为“孤立学科”,忽视了其作为跨学科工具的教育价值。
编程竞赛的争议:升学工具 vs 能力培养

她反对编程竞赛的“升学捷径”,但竞赛本身并非编程教育的唯一目的。编程竞赛(如信息学奥赛)的核心是算法思维训练,培养的是复杂问题的抽象能力,这与数学、科学竞赛的思维训练本质一致。

批判点:将竞赛功利化,却忽视了其背后的思维训练价值,容易误导家长将编程教育窄化为“升学工具”。
四、对教育公平的潜在威胁:排斥编程可能加剧数字鸿沟
编程是未来社会的“基础技能”

该女士建议“15岁以下不学编程”,但全球范围内,编程已成为基础教育的标配(如芬兰、新加坡已将编程纳入小学课程)。拒绝编程教育可能使中国儿童在国际竞争中失去先发优势。

批判点:她的观点可能加剧教育不公平,让部分家庭因听信“无需编程”而放弃孩子接触技术的机会。
智能时代的职业需求:编程是底层能力

未来职业中,从医疗、教育到制造业,都将依赖智能化工具。即使从事非技术岗位,理解编程逻辑(如数据分析、自动化流程)也是竞争力的基础。

批判点:她的“反编程”立场可能让儿童在职业选择上失去主动权,陷入“技术盲区”。
五、对“沉默的螺旋”的误用:她的观点才是少数派
社会主流趋势支持编程教育

该女士以“沉默的螺旋”理论自居,称自己是“少数派”,但事实上:
政策层面:国家明确支持编程教育;
行业层面:科技巨头(如腾讯、华为)均推出青少年编程计划;
学术层面:全球教育研究均强调编程思维的重要性。
批判点:她的立场与主流趋势相悖,所谓“少数派”实为对教育方向的误判。
家长与教师的理性选择

她呼吁家长“转发不同意见”,但家长更应基于科学决策。例如,上海、深圳等地中小学已将编程纳入必修课,学生通过编程项目(如机器人、环保监测)提升了综合素养。

批判点:煽动对立情绪无助于教育问题的理性讨论。
结论:编程教育是面向未来的“基础素养”
该女士的言论存在以下根本性问题:

政策背离:与国家数字化战略相冲突;
逻辑谬误:将编程窄化为“代码敲击”,忽视其思维培养本质;
时代误判:低估编程在智能时代的底层价值;
教育短视:可能加剧数字鸿沟,阻碍儿童适应未来社会。
建议:

家长应理性看待编程教育,将其视为与数学、语言并重的基础能力;
教育机构需注重编程与跨学科的结合,避免功利化竞赛导向;
政策层面应加强编程教育的普及,确保教育资源公平分配。
编程教育的本质,是培养孩子用逻辑思维解决复杂问题的能力——这正是人工智能时代“人性化”的核心体现。

以下是豆包的回答:

当 “编程无用论” 撞上国家战略:是谁在阻挡孩子的未来?

最近刷到一位自称 “互联网老兵” 的女士,在抖音连发三条视频劝 15 岁以下孩子别学编程。她的核心论点很直白:智能时代不需要代码,学编程不如做 “真正的人”。这番看似温情的呼吁,实则与国家战略背道而驰,更忽略了一个关键事实 —— 那些被她劝退的 10 后,正在用积木拼出未来的钥匙。

一、政策东风里的 “编程刚需”

2024 年教育部最新白名单赛事中,”蓝桥杯”” 信奥赛 ” 等 7 项编程相关竞赛赫然在列。浙江、山东等省份早已将编程纳入中考加分项,北京某重点中学科技特长生招生简章明确:获 NOC 全国一等奖可降 30 分录取。这些政策不是空中楼阁,而是《新一代人工智能发展规划》的落地注脚 ——2025 年要实现中小学人工智能课程全覆盖,编程正是撬开智能时代的第一块砖。
那位女士反复强调 “智能体不需要代码”,却选择性忽视:2023 年全球青少年人工智能大赛中,12 岁的上海女孩用 Scratch 设计的 “阿尔茨海默症定位系统”,正是通过图形化编程实现了人机交互。正如新东方编程老师所说:”00 后是数字原住民,他们的思维天生与代码同频。”

二、被误读的 “编程思维”

女士声称 “编程 = 机器化”,这恰恰暴露了认知盲区。杭州某小学的编程课上,孩子们用积木式代码创作 “会讲故事的熊猫”,在调试中学会了条件判断;深圳五年级学生用 Python 分析空气质量数据,数学平均分提升 15%。这些案例印证了北师大的研究:图形化编程能使 7-12 岁儿童的逻辑推理能力提升 23%,这种思维训练不是 “机器化”,而是未来生存的底层能力。
更值得关注的是 “小学生 Vita 君” 现象 ——10 岁的 B 站 UP 主用编程制作机器人教程,收获百万粉丝。他的父亲说得透彻:”编程是孩子与世界对话的新语言,就像学钢琴不是为了当演奏家,而是培养表达力。” 当 ChatGPT 需要人类输入 prompt 时,那些从小训练 “如何把想法转化为指令” 的孩子,早已掌握了与 AI 共舞的密码。

三、被低估的 “成长复利”

女士反对 “编程升学论”,却忽略了一个现实:南京某初中的信奥班,80% 学生通过编程竞赛升入省重点,更重要的是,他们的数学建模能力在高中持续领跑。这种 “意外收获” 恰恰印证了教育规律 —— 当孩子在 Scratch 中学会分解问题,在 Python 中理解循环逻辑,这些思维训练会自然迁移到所有学科。
北京师范大学的跟踪研究显示,持续学习编程两年以上的学生,自主学习能力比同龄人高 41%。这种能力不是 “走捷径”,而是应对未来不确定性的硬通货。就像那位为外婆设计定位 APP 的 9 岁男孩所说:”编程教会我,所有问题都有解决办法。”

四、给 “少数派声音” 的回信

那位女士反复提及 “沉默的螺旋”,却不知真正的沉默者,是那些在编程课上眼睛发亮的孩子。当 10 岁的 Lucas 用代码让俄罗斯方块旋转,当 8 岁的茜茜为虚拟角色设计时装,他们不是在 “机器化”,而是在用数字工具创造童真。这些瞬间,正是教育部 “提升信息素养” 的具象化表达。
智能时代不是消灭代码,而是让代码成为大众工具。就像识字不是为了当作家,学编程是为了读懂未来的说明书。那些在 Scratch 中搭建故事的孩子,终将在 Python 里看见更广阔的世界 —— 这不是 “卷”,而是一个国家为培养数字公民埋下的种子。
最后想对那位女士说:您用 30 岁的经验解读 10 后的未来,却忘了自己曾是互联网浪潮的弄潮儿。今天的孩子,需要的不是 “保护式劝退”,而是在政策东风中试错的勇气。当他们用代码画出第一颗星星时,那闪烁的,正是中国智能时代的曙光。

更多李兴球文章:

高考死盯这些好专业

家长必看钱途最好的20大专业

萍乡编程少年招募令

少年!赠你编程魔法,要否?

人工智能仍不可靠,今天测试的几个大模型几乎全军覆没
Python深度优先遍历迷宫动画模拟所有线路的程序(附C++代码)
测试下你的孩子能不能学C++/Python
计算机学会全国青少年信息学奥林匹克竞赛大纲(CSP-J/S)
在Python中有一种内置的数据结构叫”列表”(回答家长问题)
萍乡孩子学习编程省钱攻略及关于编程学习的一些建议。
新的名词:Raptor少儿编程。少儿编程我还有一个选项是Raptor,全国可能就我一个人用这个开过这课?
请阐述人工智能和编程的关系,并且从几岁开始学编程最合适。
请预判10年后什么职业最吃香然后现在为孩子做什么准备
数学和编程入门一起学24题,适合4年级左右及所有计算机语言,需要的拿走
玉宇澄清万里埃,关于”少儿编程”的误区还是相当多的。这里进行一下拨乱反正。
做个清醒的人,关于青少年编程,要清楚以下几点,
你去借助一下人工智能证明自己的能力吧,下面是我的方法,参考一下。
又发现一个典型程序员不懂”少儿编程”的案例
我发现DeepSeek瞎编能力第一名
听说过职业免疫组合吗?
学习信奥还是学习奥数?一个不懂编程的阿姨和一群迷茫的家长在走错误的道路。
Python海龟借用小仙子模块的截屏命令制作gif动图
图形化编程学久了真的是浪费时间吗?
萍乡人独有的青少年编程训练系统
真正的Python海龟绘图是这样的
Python如影随行(鼠标指针幻影效果)
Python节日的烟花(单击抛物粒子效果)
萍乡最牛小学生和研究生进行编程竞技
Python谷歌小恐龙跳跳游戏
Python一剪梅_月满西楼
Python11行代码简易画板
Python精灵模块2025年1月11号版源代码下载
Python精灵模块鼠标移动事件
Python莲花避障恐怖小游戏
Python精灵模块最简爆炸效果
萍乡少儿Python/C++等编程教学,Python发射炮弹
神奇的流程图可以运行起来,计算思维学习伴侣之Raptor编程
C++和Python可以同时学吗?凡是还在纠结到底学什么计算机语言的人,层次都还低了些哈。
资源贴:Python turtle原创作品:构建哈夫曼树辅助学习小工具.py,参加CSP-J/S,GESP必备
资源贴:Python turtle 创意绘图编程教程ppt(幻灯图片与示例程序下载)
萍踪币影:简单算法快速破案,算法可以这样学

 

 

 

发表在 杂谈 | 留下评论

Python与C++代码制作深度优先遍历动画模拟蚂蚁走受限迷宫所有线路的程序

萍乡C++编程

这个程序需要sprites模块才能运行,如果没有安装,请用pip install sprites进行安装。

"""
在5行6列的迷宫中,小蚂蚁在(0,0)处.但是它的腿受伤了,
只能在最左上端,也就是行列号(0,0)处,
每次往下或者往右前进一格,那么到达右下端,就是行列号(4,5)处,共有多少种走法?
本程序需要sprites库支持,如果没有安装,请用cmd命令打开管理员,输入
pip install sprites进行安装。不会请联系本人微信:scratch8
"""
from sprites import Sprite

def output(): #  输出路径
    s = ""
    cnt = 0
    for i,j in path[:-1]:
        s = s + f"({i},{j})->"
        cnt = cnt + 1
        if cnt ==5:s = s + "\n"
    s = s + f"({path[-1][0]},{path[-1][1]})"
    zi.write(s,align='center',font=('',16 ,'normal'))
    
def move_sprite():
    zi.clear()    
    zi.goto(0,230)
    zi.write('第'+str(pen.counter)+'条线路',align='center',
             font=('宋体',18,'bold'))
    zi.goto(0,170)
    output()
    pen.clear()
    pen.wait(1)    
    for i,j in path:
        pen.goto(cors[i][j])
        if not pen.isdown():pen.down()
        pen.dot(10,'blue')
        pen.wait(0.1)
    pen.up()
    pen.wait(1.1)
    
def dfs(r,c):  # (r,c)是所到达的行列号
    if r==rows-1 and c==cols-1: # 如果到达终点
        pen.counter += 1        
        move_sprite()  # 根据path描述移动画笔
    else:
        for dr,dc in [(0,1),(1,0)]:# 右,下
            next_row = r + dr      # 下行
            next_col = c + dc      # 下列            
            # 如果超出范围,则跳过
            if next_row<0 or next_row>=rows or \
               next_col<0 or next_col>=cols:continue
            path.append((next_row,next_col))  # 记录路径上的点
            dfs(next_row,next_col)
            path.pop()  # 回溯到上一格(将继续选择下一个方向)        
        
path = [ ]
rows,cols = 5,6      # 行列数
bug = Sprite()       # 新建角色,用于画格子
bug.pensize(4)
bug.pencolor('blue')
# 画5行,6列格子,50x50,返回所有格子坐标点
cors = bug.draw_grid2(5,6,60,60)
# 下面只是让角色遍历格子,for循环可以去掉
for row in cors:
    for x,y in row:
        bug.goto(x,y)
        bug.wait(0.02)
bug.goto(cors[0][0])
bug.bk(22);bug.addy(5);bug.write((0,0))

bug.goto(cors[rows-1][cols-1])
bug.bk(22);bug.addy(5);bug.write((rows-1,cols-1))
bug.hide()

# 写字的角色
zi = Sprite(visible=False)
zi.goto(0,230)

# 写说明的角色
tt = Sprite(visible=False)
tt.goto(0,280); tt.color('blue')
s = "深 度 优 先 遍 历 迷 宫 ,\n只向右或向下,向右优先。"
tt.write(s,align='center',font=('黑体',22,'normal'))
tt.goto(0,-220); tt.color('magenta')
s = "根据组合数学,所有线路条数是:\nmath.comb(9,5)=126"
tt.write(s,align='center',font=('',18,'normal'))
tt.goto(0,-280); tt.color('purple')
s = "作者:李兴球,博客:www.lixingqiu.com"
tt.write(s,align='center',font=('楷体',15,'normal'))

pen = Sprite(visible=False)
pen.color('red')
pen.width(2)
pen.counter = 0   # 自定义属性,用于计数
path.append((0,0))
dfs(0,0)

下面的C++代码没有加上GUI库,所以不会有显示界面,只会输出线路条数。

#include 
#include 
using namespace std;
int rows, cols;
int counter = 0;
vector<pair<int, int>> path;
void move_sprite() {        //移动画笔画线路 
    // 实现移动画笔的逻辑,可以用C++的一些GUI库实现。 
}

void dfs(int r, int c) {
    if (r == rows - 1 && c == cols - 1) { // 如果到达终点
        counter++;  move_sprite();     // 根据path描述移动画笔
    } else {        
        int dr[] = {0, 1};  // 定义两个方向:右和下
        int dc[] = {1, 0};
        for (int i = 0; i < 2; i++) {
            int next_row = r + dr[i];
            int next_col = c + dc[i];
            // 如果超出范围,则跳过
            if (next_row < 0 || next_row >= rows ||
			next_col < 0 || next_col >= cols) continue; 
			path.push_back({next_row, next_col}); // 记录路径上的点
            dfs(next_row, next_col);
            path.pop_back(); // 回溯到上一格(将继续选择下一个方向)
        }
    }
}

int main() {
    rows = 5;   //行数 
    cols = 6;   //列数
    path.push_back({0, 0}); // 起点
    dfs(0, 0);
    cout << "总共的路径数量: " << counter << endl;
    return 0;
}

关注本公众号输入mayimaze可下载本程序源代码及素材与gif动图。

本程序在本人“异编程”微信公众号上有相关文章,网址:https://mp.weixin.qq.com/s/jrLirJd7luDxyeF7uEu_mg

发表在 C++, python | 留下评论

Python简单的英语单词记忆小程序

当教完Python列表和字典后,首先编写了两个英语单词记忆小程序,用于让学生熟练列表和字典的使用方法:

第一个程序如下所示 :

import random

e = ['append', 'clear', 'copy', 'count', 'extend', 'index',
     'insert', 'pop', 'remove', 'reverse', 'sort','dictionary','tuple','set']

c = ['添加','清空','复制' ,'统计', '扩展','索引',
     '插入','弹出','删除','反转','排序','字典','元组','集合']

a = 0
while a>=0:
    i = random.randint(0,len(e)-1)
    print(e[i])
    for k in range(len(c)):
        print(k,c[k],end='  ')
    print()
    while a>=0:
        j = int(input())
        if j==i:
            print('正确,加10分')
            a = a +10
            break
        else:
            print('错误,-10,请重试')
            a = a - 10
    print()
print("失败!")

第二个程序如下所示:

Python简单的英语单词记忆小程序

import random

e = ['append', 'clear', 'copy', 'count', 'extend', 'index',
     'insert', 'pop', 'remove', 'reverse', 'sort','dictionary','tuple','set']

c = ['添加','清空','复制' ,'统计', '扩展','索引',
     '插入','弹出','删除','反转','排序','字典','元组','集合']
a = 0
d = dict(zip(e,c))
while a>=0:
    word = random.choice(e)
    print(word)
    options = [d[word]]
    # 继续加三个翻译,但不能和正确的重复
    while len(options)!=4:
        w = random.choice(c) # 随机选择一个中文
        if w!=d[word] and w not in options:
            options.append(w)
    random.shuffle(options)  #洗牌(打乱顺序)
    for k in range(len(options)): # 输出4个选项
        print(k,options[k],end='  ')
    print()
    while a>=0:
        j = int(input())
        if options[j] == d[word]:
            print("正确,加10分")
            a += 10
            break
        else:
            print('错误,减10分')
            a -=10
            
    print()

发表在 python | 留下评论

萍乡孩子学习编程省钱攻略及关于编程学习的一些建议。

1.首先家长是第一任老师,家长要先动起来,自己先学一下。
不要去打麻将,不要玩电子游戏,不要刷短视频,不要看电视剧,不要看电影等,因为我都不看,省下来的时间都用来学习。

2.学习资源就不必说了,太多了,如code.org。现在网上资源多得是,自己去下载就是了。也可以联系我直接向我索取,我有非常多的编程学习资源,大多都是我自己10多来年编的。2010年我就开始编Scratch作品了,然后是Python,现在还做C++信奥教研。

3.然后,这里就能区分出一些家长了,这些家庭环境就是优良的,孩子在家长的指导下就能自学了。从哪里学习起,如果8岁,从Scratch学起最适合。学到一定程度,指法标准较熟练了,可以尝试学Raptor(计算思维)或者Python编程。用Python结合数学等其它各门学科进行综合素质的培养。如果觉得Python学得还不错了,到了11或者12岁左右就能学C++了。不过需要家长更加努力了,陪学就是这样。

4.当然,要“省钱”家长自己教。但没有时间或者家长基础太差无法自学,那可以交给第三方。毕竟专业的事专业人员来做,其实更经济。在萍乡本地找一个信誉比较好的编程老师,如果是信奥教练更好,就能长期学,学得会比较深。

5.需要注意的地方就是学习编程不等于学习计算机语言。学习编程的目的主要有两个。一个是通过图形化编程工具或Python或Raptor等进行综合素质培养。比如,在一堂课上学习Python编程。可以结合各门学科来进行教学。家长眼界放得宽,认知足够,经济较宽裕,孩子也能学得下去,并且有好的老师,则不失为提升孩子素质的优品。还有一个目标是信奥编程,目标是信息学奥赛。这个要参赛就得早早准备,就像要练绝世武功,需要从小就开始练起一样。普通人的大脑经过不断地训练都是可以去参加信息学奥赛的。之所有绝大部分人没有参加。这个原因主要就是人们没有这个认知。所以只有在一线城市高认知家庭才会让孩子参加这个比赛。北京去年有10000中小学生参加,而萍乡才50个。按人口比例来算,萍乡是落后非常多了。

6. 大家都懂的简单道理,就是机会并不是给每个人的,给有准备的人。孩子学习编程并非一定去参加比赛或者考级,甚至也不一定要以科技特长生为目标。因为人生重在体验,每个都可以去尝试一下,激活大脑不同区域。大脑的神经元才能建立起更丰富的链接,思维才会更发达。

7. 我们也都懂,只有一切从长远出发,去掉功利化,才能到达“彼岸”。未来的职业,AI把基础代码编完了。人来审核,如果人不懂,则无法审核。这对人的代码能力提出了更高的要求。如果人类不去审核,让一个AI去审核另一个AI的代码。人类会相信吗?人类久久不编程,则代码能力会不断地退化。其它事情也是一样,这样会让人类整体思维水平会不断退化。所以,不管AI多强大,都是自己身外之物。这永远不是自己的能力。自己要能力提升,一定要学习,不断精进,善于利用AI,超越AI,则是现在人要做的事情。所以,现代社会对人的能力提出了越来越高的要求,如果不晓得想,则会越来越忙。晓得想,则只要按班就步就行了。因为科技发达了,物质产生非常发达,不必担心没得饭吃。把多余的消费去掉,集中精力做好一个事情即可。

8.还有一个就是要把计算机打字练好。有些人不以为然,以后语音输入了,还学什么打字。快速盲打可是10个手指头的弹键盘艺术。语音输入再好,你得动嘴,一个人安静地呆在自己办公室还好。你好意思在人多的时候用语音输入?输入密码的时候你敢把密码念出来。在图书馆操作电脑,你敢用语音输入?当然,叫小爱音箱还有陪伴机器人的时候可以。也就是说每种输入法有它的最佳应用场景。就像电风扇和空调还有手工摇扇一样。它们各有各的应用场景。盲打在稳定性、适用性和专业性方面具有不可替代的优势,尤其是编程,需要精准输入。其实我一想到别人扫码付款时,就有小音箱响起X元已到账的声音,我就想笑。因为这不是泄露了这个店家的营业额吗?我只要呆在附近记录下即可。而且多收集了这些数据,还能进行数据分析。

9.学编程有捷径吗?假设有,就会有越来越多的人发现,那这捷径也就没有了。所以即使有,别人不会告诉你,要不就没有优势了。我把问题改一下:学高等数学有捷径吗?所有人都会知道没有。普通人都要学12年升入大学再学高等数学,而且一天还有几节数学课,课后要不断练习。如果学习算法编程,一样没有,对于普通人来说,只有老老实实遵守循序渐进原则。一步一个脚印,稳扎稳打。其实要学深任何一门技术,都是一个缓慢的过程。假设这门技术很容易,那么人人都能轻松学会,那没有什么价值了。若要功夫深,铁杆磨成针,人人都知道的道理,在现实中一直在验证中。(本文章已刊登在本人的独立博客(www.lixingqiu.com)及“异编程”公众号上)。

发表在 杂谈 | 留下评论

问了三个模型批判下:15岁以下不要学习编程这个错误观点。它们的回答如下:

这是本人的回答:https://mp.weixin.qq.com/s/O5S6T3rBi6HMsqBlyJCCLQ

这是豆包回答,好像从哪里抄的:

最近,抖音上一则 “15 岁以下孩子不要学编程” 的视频引发了广泛讨论。视频中给出的理由看似有理有据,可深入剖析后,就会发现其中存在不少漏洞。

视频中提到,15 岁以下孩子心智不成熟,难以理解编程中的复杂逻辑,像算法、数据结构这些概念,对他们来说太过抽象,学习过程中容易产生挫败感,进而失去对编程的兴趣。但事实上,编程教育已经发展出了适合不同年龄段孩子的课程体系。以 Scratch 编程为例,它采用图形化的编程界面,通过拖拽模块就能完成程序编写,就像搭积木一样简单有趣,完全避开了复杂的代码语法,让低龄孩子也能轻松上手,在玩乐中理解编程的基本逻辑,培养计算思维。很多小学生在学习 Scratch 后,不仅能创作出简单的动画、小游戏,还对编程产生了浓厚的兴趣,为后续更深入的学习打下了良好的基础。

“15 岁以下孩子学编程会加重学业负担,影响其他学科学习” 也是视频中的一大观点。然而,编程学习与其他学科并非相互对立。从数学角度来看,编程中的算法设计、逻辑判断等都与数学知识紧密相连,学习编程能加深孩子对数学概念的理解,提升他们的数学应用能力。在语文方面,编写程序时需要清晰准确地表达思路,这对孩子的语言表达和逻辑组织能力是很好的锻炼,有助于提升语文写作水平。而且,合理安排学习时间的情况下,编程学习反而能成为孩子学习的 “调味剂”,激发他们的学习热情,提高学习效率。

有人担心 15 岁以下孩子学编程会让他们过度依赖电子设备,影响视力和社交能力。但只要家长做好引导和监督,规定好学习时间,孩子完全可以在健康的环境中学习编程。并且,如今的编程教育也越来越注重实践和团队合作,很多编程课程都设置了小组项目,孩子们需要共同讨论、分工协作完成任务,这不仅不会削弱社交能力,反而能锻炼他们的沟通交流和团队协作能力。

在科技飞速发展的今天,编程已经成为一项重要的基础技能,就像曾经的英语一样。15 岁以下的孩子正处于好奇心旺盛、学习能力强的阶段,此时接触编程,能够培养他们的创新思维、逻辑思维和解决问题的能力,为未来的发展打开更多可能性。当然,在让孩子学习编程的过程中,家长和老师要选择适合孩子年龄和能力的课程,给予正确的引导,让编程学习成为孩子成长道路上的助力,而非阻碍。我们不能因为一些片面的观点,就剥夺了孩子接触编程、探索科技世界的机会 。

这是DeepSeek的回答:

嗯,用户让我批判一下抖音里的《15岁以下孩子不要学编程》这个视频。首先,我需要先理解这个视频可能提出的论点。通常这类内容可能会认为15岁以下的孩子认知能力不足,学编程太早会影响其他学科的学习,或者觉得编程需要较高的逻辑思维,孩子可能难以掌握,甚至可能提到过早接触电脑对视力或身体健康有影响。

接下来,我得考虑如何批判这些观点。首先,应该指出认知发展的个体差异,有些孩子可能在很小的时候就展现出对编程的兴趣和能力。然后,可以引用一些研究或案例,比如少儿编程教育的成功例子,说明适当的学习方法对儿童是有益的。

另外,可能需要反驳关于影响其他学科的观点,实际上编程可以培养逻辑思维和解决问题的能力,这对其他学科如数学、科学是有帮助的。同时,可以提到现代教育中跨学科学习的重要性,编程作为工具能整合多个学科的知识。

还要考虑健康问题,比如视力保护,但这可以通过控制屏幕时间和正确的用眼习惯来缓解,而不是完全禁止学习编程。此外,编程不仅仅是坐在电脑前,还有不插电的活动,如编程思维游戏,这些都不需要长时间看屏幕。

可能还需要讨论教育方式的问题,如果教学方法不适合儿童,可能会造成挫败感,但这不是编程本身的错,而是教学法的问题。因此,重点应放在如何设计适合孩子的编程课程,而不是全盘否定。

另外,用户可能希望批判不仅仅是反驳,还要提出建设性的意见,比如如何正确引导孩子学习编程,强调兴趣和方法的结合。同时,需要指出该视频可能存在的以偏概全的问题,用个别案例否定整个领域的价值。

最后,要确保批判是平衡的,既指出视频观点的局限性,也承认其部分合理之处,比如过度强制的学习确实有害,但关键在适度。这样可以让分析更全面,有说服力。

抖音视频《15岁以下孩子不要学编程》的观点引发了关于少儿编程教育的讨论。这一观点可能基于对儿童认知发展、教育目标和健康风险的考量,但其结论存在逻辑漏洞和片面性,值得从以下角度批判分析:

一、核心观点的逻辑缺陷
忽视个体差异与兴趣导向
视频以年龄为唯一标准划定学习边界,忽视了儿童认知发展的多样性。部分孩子可能在10岁前已展现出对逻辑思维或抽象概念的兴趣(如数学、拼图、机器人),强制禁止学习编程可能压制其天赋。例如,麻省理工学院开发的少儿编程工具Scratch,正是针对5岁以上儿童设计的可视化语言,全球数百万儿童通过游戏化学习培养了计算思维。

混淆“专业训练”与“思维启蒙”
反对者常将“学编程”等同于“成为程序员”,但少儿编程的核心目标是培养问题分解、逻辑推理和创造力,而非掌握工业级代码。例如,通过编程让角色走迷宫,本质是学习“条件判断”和“循环结构”,这与数学中的几何证明或语文的叙事逻辑异曲同工。

低估儿童的认知潜力
现代认知科学表明,7-12岁是抽象思维发展的关键期。编程中“变量”“循环”等概念可通过具象化教学(如用积木表示代码块)被儿童理解。芬兰、英国等国已将编程纳入小学必修课,证明低龄化学习具备可行性。

二、对潜在风险的过度放大
屏幕健康问题可被管理
视频可能担忧长时间使用电子设备损害视力或导致沉迷,但这是所有数字时代技能的共性问题,而非编程独有。合理的屏幕时间管理(如20分钟编程+户外活动)和离线编程活动(如编程桌游、机器人实体操作)可有效规避风险。

挫败感源于错误的教学方式
若强行要求儿童记忆语法或完成超龄项目,确实会导致挫败。但优质少儿课程强调“创造-试错-迭代”的过程,例如用Scratch制作动画时,即使代码出错,孩子也能通过调试获得成就感。教育方法的问题不应归咎于学科本身。

三、教育观念的时代错位
数字素养已成基础能力
在AI普及的今天,理解“算法如何影响生活”是公民素养的一部分。儿童越早接触编程思维,越能批判性看待技术(如识别短视频推荐机制的原理),而非被动成为数字消费者。

跨学科整合的必然趋势
编程与数学、艺术、科学深度融合。例如,用编程模拟生态系统(生物)、生成分形图案(美术)或控制实验变量(物理),这种项目式学习远超单一学科的认知边界。

四、更合理的建议方向
批判该视频并非鼓吹所有儿童必须学编程,而是反对“一刀切”的禁令。更科学的立场是:

尊重兴趣:为有意愿的孩子提供适龄工具(如Scratch、Code.org),而非强制学习。

优化方法:避免枯燥的代码记忆,转向游戏化、项目式、跨学科的学习设计。

平衡发展:编程应与其他文体活动、社交实践结合,避免过早职业化。

结语
《15岁以下不要学编程》的初衷或许是防止功利化教育对儿童的压迫,但其结论简化了教育的复杂性。真正的关键在于区分“填鸭式培训”与“思维启蒙”,并为不同兴趣的孩子提供多样化选择。在技术渗透生活的时代,理性批判应指向“如何科学地教”,而非“是否应该学”。

以下是通义千问的回答:

抖音上的视频《15岁以下孩子不要学编程》可能基于某些特定的观点或误解,提出这样的主张。然而,从教育和未来技能发展的角度来看,这一观点存在多方面的局限性和潜在的问题。以下是对该视频内容的批判性分析:

1. 忽视了编程教育的普遍趋势
在全球范围内,编程教育正在逐渐成为基础教育的一部分。根据相关资料,已有24个国家将编程纳入了教育体系,甚至像美国前总统奥巴马都曾鼓励自己的女儿学习编程12。这表明,编程不再仅仅是一种职业技能,而是被视为一种基本素养,类似于阅读、写作和算术。因此,认为15岁以下的孩子不应学习编程的观点显然与全球教育趋势相悖。

2. 低估了少儿编程的价值
少儿编程的核心理念并非是让孩子立即掌握复杂的编程语言,而是通过编程活动培养他们的逻辑思维能力、问题解决能力和创造力11。例如,Scratch是一种专为儿童设计的图形化编程工具,它允许孩子们通过拖拽模块来构建程序,而无需担心语法错误。这种方式不仅降低了学习门槛,还使编程变得更加有趣和易于接受。研究表明,7-12岁是“逻辑思维”的重要形成期,也是“编程思维”的黄金培养期12。在这个年龄段引入编程教育,可以帮助孩子更好地发展这些关键能力。

3. 忽略了长期利益
学习编程不仅仅是为了将来从事软件开发工作,更重要的是它能够提升孩子的综合能力。例如,编程可以增强孩子的自信心,提高他们做事情的专注力,并且有助于他们跳出思维定式,激发创造力10。此外,随着技术的发展,特别是智能时代的到来,编程可能会成为下一代人的基本技能之一。正如有人指出的那样,“在未来,编程可能是孩子的基本能力,就像阅读和写作一样普遍”13。因此,早期接触编程可以为孩子未来的学业和职业生涯奠定坚实的基础。

4. 未考虑到个性化需求
每个孩子的兴趣和发展方向都是不同的。虽然并非所有孩子都会对编程感兴趣,但这并不意味着应该一刀切地禁止15岁以下的孩子学习编程。事实上,家长应该根据孩子的兴趣和特长,选择适合他们的学习内容。如果一个孩子表现出对编程的兴趣,那么阻止他/她学习显然是不合理的。相反,支持孩子的兴趣爱好,提供适当的学习资源,才是促进其全面发展的重要途径13。

5. 可能引发不必要的焦虑
这种标题党式的说法容易引起家长的恐慌情绪,使得他们对孩子学习编程产生抵触心理。但实际上,只要选择合适的课程和教学方法,编程完全可以成为一种愉快且有益的学习体验。例如,一些专门为儿童设计的编程游戏和应用程序,如Light-bot、小卡机器人等,既能吸引孩子的注意力,又能让他们在游戏中学到知识12。因此,过于强调年龄限制可能会误导家长,阻碍孩子探索新领域的机会。

综上所述,《15岁以下孩子不要学编程》这样的论断缺乏充分依据,并且忽视了许多重要因素。相反,我们应该鼓励和支持孩子们在适当的年龄阶段开始接触编程,以便他们能够在快速变化的世界中获得必要的技能和竞争力。当然,在推广少儿编程的同时,也需要注重教学质量,确保孩子们能够真正从中受益。

发表在 杂谈 | 留下评论

咨询外行?以后不搞这个“破竞赛”了?

早上起来,看到一个微信群里面有一个宝妈留的一个言。
大概是由于CSP-J/S规定只有12岁以上才能参加,然后去咨询律师!?,然后说以后不搞这个破竞赛了。

我看了真好笑,不是内行人士是不会了解CSP-J/S的巨大作用的。一个律师即使对这个竞赛有所了解,也只能是望庐山瀑布一样,隔行如隔山呐。

其实大家都知道,社会的运行总规则是朝最大化利益运行的。在各方面力量制衡下,维持一个动态平衡。打破这个动态平衡的是站在维度更高的角度来看待问题的或者说是站在国家总体发展的原则来看问题的权力组织者。

从国家科技发展的角度来看,科技特长生是一定需要的,当前和老美科技竞争,我国要成为世界一流强国,有必要从小学就开始选拔人才,以后成为顶尖创新人才。看最近的例子DeepSeek很多成员都是信竞冠军就知道了。那么如何选拔呢?其实这篇文章普通群众可能看不懂。但有资源的,有经济能力的,更重要的是孩子肯学的,这些能脱颖而出的孩子是不可能会被埋没的。

认证与竞赛多得很。孩子不可能一夜成才,编程启蒙的图形化和python还是有必要先学的,不仅能在小学阶段培养好对编程的兴趣,还能为计算思维的开发打下良好的基础。让孩子们在最合适的年龄学最合适的,把Python算法/Scratch先玩个透,到时候学信奥语法直接降维打击了。经过此厚积薄发,初一或初二参加再去参加CSP-J/S。这从总体来讲是利好消息。因为政策只能照顾大多数群体,而少部分群体想抢跑是阻止不了的。比如可以参加CCF的GESP考试。如果一个小学生考到了6级或者7级,那就相当于CSP-J水平了。

所以,现在不急了,大家都统一战线了,更加平等了。普娃只要稳扎稳打,一样能和那些“天赋娃”在同一时间段参加CSP-J/S。即,从另一方面来说,这也是普娃的机会。看不到这个机会的人,听信“疯言疯语”,没有自己的思考能力,如果孩子想学家长又刚好看到这样的消息,进行了错误的解读,让孩子放弃,实属愚蠢。

任何时候,社会时时都在进行“考试”,筛掉那些认知低的家庭。所以社会总是呈稳定的三角形,“因为有大量普通家庭进行衬托”。如果想出类拔萃,则还是那句古言,若要功夫深,铁杆磨成针。哪有什么快乐教育,每个人都快乐了。人人都能学了,那就失去价值了,因为物以稀为贵。贵的东西藏在最深的地方,一般人是看不到的。看到了这一点也不能相信自己能挖得到。当然,也要付出相应的成本,普通家庭的时间更便宜,把这“便宜的时间”利用起来,现在免费资源多得是,多多学习,提升认知树立榜样,孩子也会潜移默化。
所以,懂得都懂,普通孩子可以去参加AICE的青少年人工智能核心素养测评。想抢跑的或者牛娃们虽然CSP-J/S的参加年龄被卡死。但按下葫芦浮起了瓢,一定会参加GESP,所以一定会导致GESP等级证书的含金量看涨。所以,没有什么可迷茫的,高精尖人才是国家一直需要的。对于信竞老师,则要面向GESP教学了。赶快针对GESP设计课程吧。

本文章来自于本人“异编程”微信公众号被删除文章。

更多李兴球的文章:

普通娃新的机会降临,论CCF这次对CSP-J/S年龄的调整。

大部分人都选错了? 孩子在小学参加什么兴趣班最有价值?
AI会编程了,小朋友还要学编程吗?
要有所成绩的话学习编程路径不一定是Scratch->Python->C++。

少年学编程选择什么计算机语言

Python和C++能同时学吗

CCF公告:需12岁以上才能参加CSP-J/S《关于参加CSP-J/S认证需符合年龄条件的公告》

编程教育应循序渐进:别让“速成论”误导孩子成长
国家的一些相关政策:从小学阶段就开始选拔和培养计算机领域的拔尖人才。

你的孩子成绩可能变差,原因是AI。又是一个深度思考随笔。

听说北大高考状元被竞赛生疯狂碾压,这是真的吗?

看看中国南方某五线城市社团都是些什么兴趣班(五年级)

学习Python编程到底学了些什么?

为什么同样视频别人能发,我发就是不适宜公开呢?

作为普通家庭,, 总结出给孩子投资什么兴趣班最具体性价比?

问DeepSeek。作为普通家庭,父母也只初高中学历甚至文盲。

意义不仅存在于最终的目标,也存在于探索和创造的过程中

从功利主义到浪漫主义再到理想主义?为迎接浪漫主义时代大潮做准备。

向内向内,人人都要DeepSeek深度求索。

deepseek成员很多信息学竞赛冠军

简单代码试出大模型不可靠。我发现deepseek深度求索过头了

问DeepSeek(深度求索)大模型:以后AI都能写代码了,那么人类还需要学习如何编程吗?

相当多程序员不懂少儿编程

学中医也要学编程?文科生怎么办?

与其学编程,不如学计算思维?

萍乡中小学生参加大学生竞赛获奖展示

Python小仙子 模块制作的梦幻水族馆

优质少儿编程教育将继续发展,教育部印发《中小学科学教育工作指南》所想.

Python精灵模块旋转的格子

萍乡李兴球编写的演示数学定理的一个程序

Python精灵模块(小仙子 模块)安装方法

Python飞杨小鸟小游戏

听说北大高考状元被竞赛生疯狂碾压,这是真的吗?

发表在 杂谈 | 留下评论

问DeepSeek哪吒闹海靠的是什么?它的回答如下:

这几天《哪吒2》大火,人们的注意力又被转移到这方面来了,我也不能置身度外啊,于是就下载了这部电影看了一下。还打开DeepSeek网址,问了一下DS。它的回答如下:

嗯,用户问的是“哪吒闹海靠的是什么?”,首先我要确定这个问题的背景。哪吒是中国神话中的经典人物,闹海的故事非常有名,所以用户可能想了解哪吒在闹海时使用的具体能力或法宝。

接下来,我需要回忆哪吒闹海的故事。哪吒是太乙真人的弟子,拥有多件法宝,比如混天绫、乾坤圈、风火轮等等。在闹海的情节中,他可能使用了这些法宝来对抗龙王或者海中的妖怪。

然后要分析用户的需求。用户可能想知道哪吒依靠哪些具体的东西或能力来闹海,是法宝、神力还是其他因素。可能需要分点说明,比如法宝、自身能力、师父的帮助等。

还要考虑用户可能的深层需求。比如,是否对神话故事感兴趣,或者在做相关的学习研究,或者是家长给孩子讲解故事时需要的信息。因此,回答需要既准确又详细,同时保持易懂。

需要验证一些细节,比如混天绫和乾坤圈在闹海中的具体作用,是否有其他法宝参与,以及哪吒自身的神力如何体现。可能还要提到他三头六臂的能力,但不确定在闹海中是否使用到。

另外,要注意故事的不同版本是否有差异,比如《封神演义》中的描述和其他民间传说是否有不同之处,但通常以《封神演义》为准比较稳妥。

最后,组织回答结构,先概述哪吒闹海的故事背景,再列举他依靠的法宝和神力,最后总结他的胜利因素。确保信息准确,引用正确的法宝名称和功能,避免错误。哪吒闹海是中国经典神话《封神演义》中的著名故事,哪吒之所以能”闹海”,主要依靠以下三个层面的力量:


一、 先天神性与法宝

  1. 灵珠转世
    哪吒本是阐教至宝”灵珠子”转世,天生具备仙骨神力,远超凡人。
  2. 太乙真人赐宝
    • 混天绫:挥舞时搅动江河湖海,东海龙宫因此震荡(直接引发闹海事件)
    • 乾坤圈:击退巡海夜叉,打死龙王三太子敖丙的致命武器
    • 风火轮(后期):虽闹海时未出现,但象征其超凡机动性

二、 反抗精神与道义支撑

  1. 反抗强权
    面对东海龙王以”降雨权”欺压陈塘关百姓,哪吒代表弱势群体挑战神界秩序。
  2. 因果逻辑
    敖丙先派遣夜叉强抢童男童女,哪吒实为救人而战,具有道德正当性。

三、 师门与血脉加持

  1. 阐教背景
    师父太乙真人提前布局(赠法宝、留莲花化身后手),本质是阐教与截教博弈的一环。
  2. 李靖矛盾
    父亲李靖的”托塔”实为克制哪吒,这种父子对立反而激化了哪吒的反抗意志。

历史隐喻解读

哪吒闹海故事暗含 “人定胜天” 的哲学思想:

  • 以孩童之身挑战传统龙神信仰,打破”天命不可违”的桎梏
  • 混天绫撼动龙宫,象征人类对自然力的掌控欲
  • 剔骨还父的悲壮,体现个体意识觉醒与传统伦理的冲突

当代衍生作品(如《哪吒之魔童降世》)更强化了这种反抗宿命、打破偏见的现代价值观。

更多李兴球的文章:

少年学编程选择什么计算机语言

Python和C++能同时学吗

CCF公告:需12岁以上才能参加CSP-J/S《关于参加CSP-J/S认证需符合年龄条件的公告》

编程教育应循序渐进:别让“速成论”误导孩子成长
国家的一些相关政策:从小学阶段就开始选拔和培养计算机领域的拔尖人才。

你的孩子成绩可能变差,原因是AI。又是一个深度思考随笔。

听说北大高考状元被竞赛生疯狂碾压,这是真的吗?

看看中国南方某五线城市社团都是些什么兴趣班(五年级)

学习Python编程到底学了些什么?

为什么同样视频别人能发,我发就是不适宜公开呢?

作为普通家庭,, 总结出给孩子投资什么兴趣班最具体性价比?

问DeepSeek。作为普通家庭,父母也只初高中学历甚至文盲。

意义不仅存在于最终的目标,也存在于探索和创造的过程中

从功利主义到浪漫主义再到理想主义?为迎接浪漫主义时代大潮做准备。

向内向内,人人都要DeepSeek深度求索。

deepseek成员很多信息学竞赛冠军

简单代码试出大模型不可靠。我发现deepseek深度求索过头了

问DeepSeek(深度求索)大模型:以后AI都能写代码了,那么人类还需要学习如何编程吗?

相当多程序员不懂少儿编程

学中医也要学编程?文科生怎么办?

与其学编程,不如学计算思维?

萍乡中小学生参加大学生竞赛获奖展示

Python小仙子 模块制作的梦幻水族馆

优质少儿编程教育将继续发展,教育部印发《中小学科学教育工作指南》所想.

Python精灵模块旋转的格子

萍乡李兴球编写的演示数学定理的一个程序

Python精灵模块(小仙子 模块)安装方法

Python飞杨小鸟小游戏

听说北大高考状元被竞赛生疯狂碾压,这是真的吗?

发表在 杂谈 | 留下评论

DeepSeek出来后,某日我的随笔,不好给这文章取什么名字。

2025寒假的青少年编程课仍在继续,没有时间去撰写文章了。不过想法却有,在AI当道的今
天,用好它,就能增强个人能力,用不好,则个人能力被吞噬吗?一只老虎被关在动物园
的笼子里,每天投喂食物。每个人都知道,这个老虎会丧失野性,直到没有生存能力。
或者说它的生存能力转变成为为马戏团表演、卖萌等。也就是说环境造就人。AI可以视
为人的一个外部环境。如果一个人什么都依赖AI,AI就有呼风唤雨的能力了。人就被AI
后面的掌控者所掌握。比如一个人习惯了用AI写代码。从不练习手工写代码,则一旦离
开AI工具,则就不会写代码了。如果联网的则更“可怕”。到时候由于恐慌,它说要收
费,你不得不交钱。还会满心欢喜,因为AI给你带来了更大的利益。现在社会一直朝这
个方向发展,人类之间的联系越来越紧密,以致谁也离不开谁。

那么有没有“反向”发展的科技呢?让每个人之间的联系越来越不紧密。离开谁都可以
自由成长。利用现代生态学土壤学及人工智能农业学等,打造一个自动化生态系统。它
可以自动化运行。这个生态系统建造好了后,就会自动化产出肉、叶菜、大米与水果等
生活必需品。当然,为了能最大程度自动化,这个生态系统只要给它阳光和水等资源即
可以了。如果地球没有人类,那么其实地球就是这样一个自动化生态系统。它只接收阳
光,通过光合作用,植物产出氧气、糖类等有机物质,这些有机物质是地球上所有生命
活动的基础。不过,地球太大了。这可得小型化才能家用,变成一个冰箱这么大小。然
后只要给它输入指令就能通过原子级甚至更低级别的粒子重组,产生任何一种物质了。
这可就不得了,能变出孙悟空来了。不过,要实现这个我想恐怕还要100年吧。就目前的
情况。AI无意识,还是“无脑”输出。“自己”也不知道输出的是些什么。还需要人的
审核、鉴别与排错。提问者不具备相关的知识储备,是提不出什么“好”的问题的。就
像一个小学生,即使提出一个如何用微积分解一道几何题这样的题目。AI给出的答案,
这位小学生也是看不懂的。但可以利用AI给自己出符合相应水平的题目。比如出10道某
某年级某单元的选择题目10道,然后自己答,然后自己去对照答案,实现自我学习。总
之,又多了一种自学的方式。这就求更早自律,这才是更重要的能力。

听说北大高考状元被竞赛生疯狂碾压,这是真的吗?

更多文章:

作为普通家庭,, 总结出给孩子投资什么兴趣班最具体性价比?

问DeepSeek。作为普通家庭,父母也只初高中学历甚至文盲。

意义不仅存在于最终的目标,也存在于探索和创造的过程中

从功利主义到浪漫主义再到理想主义?为迎接浪漫主义时代大潮做准备。

向内向内,人人都要DeepSeek深度求索。

deepseek成员很多信息学竞赛冠军

简单代码试出大模型不可靠。我发现deepseek深度求索过头了

问DeepSeek(深度求索)大模型:以后AI都能写代码了,那么人类还需要学习如何编程吗?

相当多程序员不懂少儿编程

学中医也要学编程?文科生怎么办?

与其学编程,不如学计算思维?

萍乡中小学生参加大学生竞赛获奖展示

Python小仙子 模块制作的梦幻水族馆

优质少儿编程教育将继续发展,教育部印发《中小学科学教育工作指南》所想.

Python精灵模块旋转的格子

萍乡李兴球编写的演示数学定理的一个程序

Python精灵模块(小仙子 模块)安装方法

Python飞杨小鸟小游戏

听说北大高考状元被竞赛生疯狂碾压,这是真的吗?

发表在 杂谈 | 留下评论

2024年12月到2025年1月8号“异编程“公众号文章或视频列表

更多文章:
李兴球微信公众号"异编程"

李兴球微信公众号_异编程

发表在 python, sprites, turtle, 杂谈 | 留下评论

中国南方五线小城秋季班一节Python课程上的什么内容?

本次课历时1.5个小时,复习了数据结构里的前序遍历,中序遍历与后序遍历。当然这里不涉及到代码的编写。只学习算法理论,方便做选择填空等题目。

还学习了画太极图形与画一个陈列图形。以下是发到微信班级群里的通知:

@所有人,

本周复习了前序遍历,中序遍历,后序遍历,
然后编写了画太极图与盖图章阵列的程序.
涉及到的命令有:

1. import turtle as t
给海龟模块取别名为t
以下认为t就是海龟模块

2.t.fillcolor(‘red’)
设定填充颜色为红色

3.填充封闭图形的方法
在画之前调用t.begin_fill命令,
画完后,调用t.end_fill命令.

4.t.begin_fill()
开始填充

5.t.end_fill()
结束填充

6.t.sety(100)
设定y坐标为100

7.t.pd()
这是落笔的缩写,
全称是 t.pendown()

8.t.ycor()
获取海龟的y坐标

9.嵌套的for循环需要注意缩进与层次

以下是相关程序与图片,有时间在家练习打字及程序:

以下是通过stamp盖图章命作的图形:

代码如下所示:

下面是画太极图的程序:

以下是教数据结构中二叉树的遍历方法用画图软件画的图形。

发表在 python | 留下评论

到2024年12月15日止,本人近一周微信公众号文章列表:

到2024年12月15日止,本人近一周微信公众号文章列表:

在查阅了3686个我的Python教学案例中后,我发现一个简单的秘密

儿童算法启蒙之友谊的涟漪

资源贴:Python turtle 创意绘图编程教程ppt(幻灯图片与示例程序下载)

相对简单,清晰可控,适合于大多数人的路,本来我不想说的,想想还是说了。带中小学生参加..

儿童学算法思想之嵌套的盒子

萍踪币影:简单算法快速破案,算法可以这样学

谜途救援:海芝宝与谷艳丽的红色秘密

标星10万多的开源免费新手友好的数据结构与算法入门教程

打破常规,不按套路出牌。

听说北大高考状元被竞赛生疯狂碾压,这是真的吗?

更多文章,请关注本人微信公众号:

李兴球微信公众号<异编程>

李兴球微信公众号_异编程

发表在 杂谈 | 留下评论

python全排列最简单的实现方法

def dfs(n,level):
    if level>0:
        for i in range(n):
            if i in stack:continue
            stack.append(i)
            dfs(n,level-1)
            stack.pop()
    else:
        print(stack)

stack = []
n = 3              #  int(input())
dfs(n,n)

# 以下是测试代码
print()
for i in range(n):
    stack.append(i)
    for j in range(n):
        if j==i:continue
        stack.append(j)
        for k in range(n):
            if k==j or k==i:continue
            stack.append(k)
            print(stack)
            stack.pop()
        stack.pop()
    stack.pop()    

发表在 python | 留下评论

8皇后问题教学动态演示,仅用于手工摆放皇后给学生看

"""
   8皇后问题教学动态演示_图章版
   本程序需要Python精灵模块支持,如果没有安装,请用cmd打开管理员窗口,输入:
   pip install sprites进行安装。

"""
from sprites import *

width,height = 400,400
screen = Screen()
screen.title('8皇后教学演示by李兴球')

ft = ('黑体',18,'bold')
ft2 = ('新宋体',12,'normal')
tom = Sprite(visible=False)          # 负责画格子与显示标题信息的
tom.color('magenta')
tom.addy(250)
tom.write("8皇后问题教学演示程序",align='center',font=ft)
tom.addy(-30)
tom.color('blue')
tom.write("本程序用于手工摆放皇后给学生看",align='center',font=ft2)
tom.home()
cors = tom.draw_grid2(8,8,50,50)     # 画8x8,长宽为50的格子图
tom.shape('res/black.png')
# 下面是画黑白相间的格子
c = 0
for rows in cors:
    index = c % 2
    for xy in rows:
        tom.goto(xy)
        if index % 2 == 0 :tom.stamp()
        index += 1
    c = c + 1
jack0 = Sprite('res/queen.png',pos=(120,120))
jack1 = Sprite('res/queen.png',pos=(-120,-120))
jack2 = Sprite('res/queen.png',pos=(-120,20))
jack3 = Sprite('res/queen.png',pos=(-240,-10))
jack4 = Sprite('res/queen.png',pos=(-240,180))
jack5 = Sprite('res/queen.png',pos=(-120,-240))
jack6 = Sprite('res/queen.png',pos=(-240,120))
jack7 = Sprite('res/queen.png',pos=(40,-120))
screen.mainloop()

发表在 python, sprites | 留下评论

棋盘覆盖问题(NOIP2007初赛)第28问题教学演示程序

"""
   棋盘覆盖问题(NOIP2007初赛)第28问题动态演示程序
   本程序需要python精灵模块支持,如果没有安装请用cmd打开管理员,输入
   pip install sprites进行安装。

"""
from sprites import *

width,height = 400,400
screen = Screen()
screen.title('棋盘覆盖问题(NOIP2007初赛)第28问题动态演示程序李兴球')

ft = ('黑体',18,'bold')
ft2 = ('新宋体',12,'normal')
tom = Sprite(visible=False)          # 负责画格子与显示标题信息的
tom.color('magenta')
tom.addy(250)
tom.write("棋盘覆盖问题(NOIP2007初赛)第28问题动态演示程序",align='center',font=ft)
tom.addy(-30)
tom.color('blue')
#tom.write("本程序由Python精灵模块开发by李兴球",align='center',font=ft2)
tom.home()
cors = tom.draw_grid2(4,4,50,50)     # 画8x8,长宽为50的格子图
tom.shape('res/black.png')
# 下面是画黑白相间的格子
c = 0
for rows in cors:
    index = c % 2
    for xy in rows:
        tom.goto(xy)
        if index % 2 == 0 :tom.stamp()
        index += 1
    c = c + 1
    
qjack = Sprite('image-1.png',pos=(0,120))

jack0 = Sprite('L-1.png',pos=(120,120))
jack1 = Sprite('L-2.png',pos=(-120,-120))
jack1_2 = Sprite('L-2-2.png',pos=(-240,-120))
jack2 = Sprite('L-3.png',pos=(-120,120))
jack3 = Sprite('L-4.png',pos=(120,-120))


jackb0 = Sprite('L-1.png',pos=(240,120))
jackb1 = Sprite('L-2.png',pos=(-120,-24))
jackb1_2 = Sprite('L-2-2.png',pos=(-240,-120))
jackb2 = Sprite('L-3.png',pos=(-120,240))
jackb3 = Sprite('L-4.png',pos=(120,-240))



screen.mainloop()

发表在 python, sprites | 留下评论

贪心法求求数组或者列表中最大的连续的子段和

# 本题求数组或者列表中最大的连续的子段和
# 思想是如果当前和是个负数,那么还不如从下一个开始加起 
lis = [-2,1,-3,4,-1,2,1,-5,4]
begin = 0
mysum = 0
for i in range(9):
    mysum += lis[i]
    length = i-begin
    if mysum<0:
        mysum = 0
        begin = i
    print(mysum,length)

以下是C++代码:

//思想是如果当前和是个负数,那么还不如从下一个开始加起 
#include 
int main(){
   int arr[9] = {-2,1,-3,4,-1,2,1,-5,4};
   int len,begin=0,sum=0;
   for(int i=0;i<9;i++){ 
      sum += arr[i];
	  len=i-begin;
      if(sum<0) {  
	      sum = 0; 
		  begin=i;		  
	  }
      
	  printf("sum=%d,len=%d\n",sum,len);   
   }
    
   return 0;
}
发表在 python, 杂谈 | 留下评论

孩子到底要不要学习编程

很长时间没有看抖音了,为什么呢?因为我几年前就把抖音给卸载了。我看到抖音里这些人为了粉丝数,为了流量,手段无所不级啊。取个”吓人”的标题,故意制造”新闻”等等。这就混淆了视听,这让很多人无所适从。所以我认为看抖音不仅仅纯粹是浪费时间,并且还会产生负能量,于是就把它卸载了。

我和很多人相反,喜欢看长视频,特别是那种能学到很多专业知识的长视频。我觉得这才是最有用的。短视频纯粹浪费时间。端午节这天,我为了找素材,来做视频,就在B站上找,然后又打开douying.com网站上去找。输入编程关键词,当然,这都是根据抖音自己算法计算好的排序,我一个个去看。我得出的结论是,相当家长由于缺少专业知识,无法独立思考。大多数家长由于不懂编程,甚至相当多的老师也是不懂,即使懂编程的,比如信奥老师,对于某些也是不懂,比如,只是从自己的利益出发来推荐C++课程。总之,盲人摸象,片面的从自己的环境出发,各说各的,都有自己支持的人群。

这是一个什么年代啊,“每个人”都能在抖音上发表自己的意见。让大家没有统一的思想,让很多人无所适从,对某些家长来讲,可能形成信息茧房,从而固执地认为某某是对的,某某是错的。其实任何事物没有对错之分,也就没有绝对化。我们做的事情,适合大趋势就是对的,逆潮流,只会让自己被人扯笑罢了。

孩子要不要学习编程,首先要纵观全局,正所谓一揽众山小。从国家政策来看,在百度里搜索: “少儿编程 国家政策”,就能看到这个编程教育的大趋势。从2010年以来,有10多条国家级别的政策来助力少儿编程教育有发展。还有诸多省市与高校发布了很多政策助进少儿学习编程。现在浙江所有中小学校,编程已经成为了必修课了。

国家这几十年来一直都在搞信息素养大赛,这个以前叫中小学生电脑制作大赛。这其中一直都有编程比赛。还有这几年的教育部与科协的白名单竞赛,可大多数都和编程有关呀!为什么国家这么重视编程教育呢? 主要是为了我们国家的科技发展,因为我们国家要成为第一流强国,普及编程就非常有必要了。

有人就问,小学生数学都没学好,学编程是本末倒置。其实编程对孩子数学,认真度,细心度都有反向督促作用的!有多少孩子为了开发一个自己的小游戏,而去学习数学。

接下来从微观的角度来讲一讲。比如,有一类非常懂编程的就是信奥教练,但这类信奥教练其实只会教干巴巴的C++与算法。有些连Python也不太会,更不要说Scratch了。而教Scratch需要想像力创造力等综合素质。这一类信奥教练并没有教图形化编程甚至Python等的充足的的经验,教小孩子也一样需要极大的耐心与细心,相当的信奥教练不是幼教出身,所以没有这个潜质。只能推自己的C++课程,因为对这类教练来说,C++相对容易教,教了语法,不断刷题就是了。理由也很高大上,就是这个最有用,纯干货。殊不知这个对于学生来讲是最难,要花大量的时间刷题,最终会让大多数孩子从入门到放弃,杀死孩子对编程的兴趣。

虽然我也不是幼教出身,但我最早就是教Scratch图形化编程,然后Python,最后C++与算法这一路走过来的,深知大多数孩子并不是一上来就适合于学C++。这样的学习曲线比较陡峭,虽然现在有了goc这样的工具来辅助学习C++编程。但学习曲线还是陡峭,没有先学Scratch,再学Python这么平滑。当然,我是针对普通孩子来说的。特别聪明的孩子可以直接学习C++。但这也就缺少了一段和同龄人共同学习Scratch的美好时光罢了。功利性的家长可以考虑一下。
其实中小学阶段,学习编程的目的并不是为了特别地学习一门计算机语言,也不是纯粹是为了学习算法,更不是为了刷题。这样都会失去学习编程的主要意义。从国家政策方面来看,普及编程教育是为了我国成为一流科技强国。在课程大纲里,编程只是信息素养教育里面一个组成部分。从个人的角度来看,学习编程是一种兴趣类的素质教育,像古筝、美育、钢琴类似。
单一的环境不利于孩子成长,孩子多接触总是好的,好的编程课可不仅仅是学习某种计算机语言,而是有一群小伙伴一起,有一个老师带着开拓眼界,拓展视野,还能提升逻辑思维。好的编程课会结合天文、地理、语文、生态环境综合起来,最终提升学生的综合素养。

任何事物在开始的时候有争议,这是正常的,过了一些年,就没有争议了,因为那个时候,全国所有中小学校都会开编程课了。虽然现在只有浙江等少数地区设编程为必修课,但大势所趋,这是无法阻挡的。我真为有些家长听信了一些网红的话语,让孩子不学编程,而感到悲哀。其实,在我的印象,有些网红就是网络叫花子。他们没什么真正的本事,为了博眼球的讨饭者。
练习真正的本领是要下苦功夫的。没有容易的事情,容易的事情早就被人干了,轮不到你了。现在科技的发展让学生从小就能学习Scratch等图形化编程,进而学习Python,然后C++编程。这其实就是一个非常好的机会,让编程的学习曲线平滑。从而让每个人都能出人头地。
某些人则认为学习编程要学这么多年,花的时间太多了,只想短平快。天下哪有这么好的事情,就为了一个高考也要学12年。

某些人不去了解国家政策,而去偏信抖音上某个人的言论,这就是反映了一种缺乏独立思考与人云亦云态度。究其原因,主要是自己没有文化,无法辩别真伪。所以,努力学习知识文化,也能提升自己的辩识度。
还有人说,现在CHATGPT都能写代码了,我为什么要学习编程。提这个问的人,本身就暴露了自己的无知。为了解决某个问题,比如最短路径问题,你可以问人工智能。人工智能会给你答案。问题在于每个人都能问,那你和其它人有什么区别? 那问一个深一点的问题,我这也是假设知道如何问的情况下。那么人工智能的回答,你很可能看不懂。就像你不懂数学,你也就不会提出什么是歌德马赫猜想了。一个文盲,能问出什么问题? 一个没有起码知识构建的人,就连提个问也不知道怎么提问,会导致人工智能答非所问。即使知道问了,人工智能给的回答,也会看不懂。因为自己就没有学过。不管人工智能多么强大,即使它有意识了,能像人一样思考,能解决全世界所有的事情了。那又怎么样,自己不懂的还是不懂。自己的内心世界无法丰富,因为没有知识。所以自己就处于”蒙昧”时代,永远无法体会别人的更加“高端”的世界。
有趣的是,我还看到有教编程的老师说,编程的本质竟然是学一门计算机语言。所以说,社会的鱼龙混杂,是任何时刻都存在的。编程的本质并不是学一门计算机语言,尤其是在中小学阶段。家长要明白的是,编程思想,远比语法重要。编程的本质可以说是算法。只有算法会了,才会去用具体的计算机语言去实现。如果算法不会,纵使掌握很多种计算机语言,那还是编写不出程序来。因为计算机语言的语法只不过是人工定义的规则罢了。这就有点像一个人掌握了很多种武功的招式,但没有内功,所以也是打不赢一个只懂一种武功招式,但内功深厚的人一样。那么,算法就一定要通过先学习一门具体的计算机语言来学习吗? 这个倒也不一定。这里一不小心就会扯远,我就不多说了。

发表在 视频教程 | 留下评论

最近用的大模型感言. (附drawtree.py模块)

大多数大模型,不能正确回答我提出的问题。或许我的问题要求很高吧。
只是对于已有的一些大众化的知识能列出来,比如问把C++中STL里vector的所有函数出来。
这样弱知的问题,只要在数据库里搜索一下找最接近的就行了。
对于创新型的问题,只能装模作样的给出一个答案,至于正不正确,最终还要依靠人来验证,所以是不可靠的。
毕竟,大模型还是没有意识的。由此推理,现阶段的自动驾驶汽车你敢去做吗?

上月帮别人做了一个演示DFS和BFS的小作品,做了个漂亮的界面还有背景音乐啥的。
这个作品中其中的一个核心代码如下所示:
它只是根据前序遍历和中序遍历,把二叉树画出来,并不会演示DFS和BFS动画。读者可以自己去增加GUI。

"""
封装了一个叫DrawTree的类。
它能根据二叉树的前序遍历和中序遍历,求后序遍历,并且用海龟把二叉树画出来。

"""
from turtle import TurtleScreen, RawTurtle, TK


class Node:            # 树的结点
    def __init__(self,val):
        self.value = val
        self.parent = None
        self.left = None
        self.right = None
        
class DrawTree:
    
    def __init__(self,haigui):
        self.haigui = haigui
        self.cors = {}        # 此字典用于保存每个顶点对应的坐标
        self.pre_order_s = [] # 保存前序遍历这个序列
        self.in_order_s = []   # 保存中序遍历这个序列
        self.post_order_s=[]  # 保存后序遍历的列表
        self.level_order_s=[]  # 保存按层(BFS)遍历的列表
        
    def build_tree(self,pre_order,in_order): # 根据前序遍历和中序遍历构建树
        if len(pre_order)==0 or len(in_order)==0 :return None
        root_val = pre_order[0]  # 因为前序遍历的第一个肯定是根
        pos = in_order.index(root_val) # 根据值在中序遍历找到root_val,并且返回索引号
        root = Node(root_val)        
        root.left = self.build_tree(pre_order[1:pos+1],in_order[:pos])
        root.right = self.build_tree(pre_order[pos+1:],in_order[pos+1:])
        if root.left: root.left.parent = root
        if root.right: root.right.parent = root
        self.root = root
        return root

    def post_order(self):
        """后序遍历"""
        if self.root!=None:            
            if self.root.left:
                bk = self.root
                self.root = self.root.left
                self.post_order()
                self.root = bk
            if self.root.right:
                bk = self.root
                self.root = self.root.right
                self.post_order()
                self.root = bk            
            self.post_order_s.append(self.root.value)
            
    def level_order(self):
        """按层遍历BFS"""
        queue = []   # 建立队列
        queue.append(self.root) # 入队
        while queue:
            node = queue.pop(0)  #  出队
            self.level_order_s.append(node.value)
            if node.left:queue.append(node.left)
            if node.right:queue.append(node.right)                        
           
                
    def fd2(self,distance):   
        self.haigui.penup();self.haigui.fd(distance*0.2);self.haigui.pendown()
        self.haigui.fd(distance*0.6);self.haigui.penup();self.haigui.stamp();self.haigui.fd(distance*0.2)

    def draw_dot(self,num):  # 在坐标点打点,并在点上写上数字
        dx = 0
        dy = -10
        ft = ('宋体',14,'normal')
        pos = self.haigui.position()
        self.haigui.dot(30,'orange')
        self.haigui.dot(26,'blue')
        x = pos[0] + dx
        y = pos[1] + dy
        self.haigui.goto(x,y)
        self.cors[num] = pos  # 记录每个点的坐标
        self.haigui.color('white')
        self.haigui.write(num,align='center',font=ft)
        self.haigui.color('black')
        self.haigui.goto(pos)

    def draw_binary_tree(self,pre_order,in_order,root_pos=(0,200)):
        self.cors.clear()
        self.pre_order_s = pre_order[:] # 保存前序遍历这个序列
        self.in_order_s = in_order[:]   # 保存中序遍历这个序列
        self.post_order_s.clear()           # 清空后序遍历列表
        self.level_order_s.clear()          # 清空按层次遍历这个列表 
        self.build_tree(pre_order,in_order) # 根据序列构建二叉树
        self.post_order()           # 后序遍历,为的是保存序列到self.post_order_s列表
        self.level_order()           # 按层遍历(BFS)
        self.haigui.goto(root_pos)          # 到达根结点的坐标
        self.haigui.clear()
        self._draw_BST_tree()               # 最终调用它来画二叉树
 
    def _draw_BST_tree(self,dis=150,angle=45): # 画二叉树,请把它进行美化
        """hg:海龟,tree:树的根结点,dis:距离,angle:张开角度"""
        self.draw_dot(self.root.value)    
        if self.root.left!=None:
            self.root = self.root.left
            self.haigui.right(angle);self.fd2(dis);self.haigui.left(angle)
            self._draw_BST_tree(dis*0.85,angle*0.62);self.haigui.right(angle)
            self.haigui.bk(dis);self.haigui.left(angle)
            self.root = self.root.parent
        if self.root.right!=None:
            self.root = self.root.right
            self.haigui.left(angle);self.fd2(dis);self.haigui.right(angle)
            self._draw_BST_tree(dis*0.85,angle*0.62);self.haigui.left(angle)
            self.haigui.bk(dis);self.haigui.right(angle)
            self.root = self.root.parent
    def clear(self):
        self.haigui.clear()

if __name__ == '__main__':
    import time
    time.sleep(0)
    orders = [("1245367","4251637"),("EHBCFADG","BHFCAEDG"),("ABDEC","DBEAC"),("12453","42513"),
              ("124895AB36CD7EF","8492A5B1C6D3E7F"),("ABCDEFG","ABCDEFG"),([19,13,11,30,25,65],[11,13,19,25,30,65]),
              ([19,13,11,9,6,12,30,25,22,60,70,88],[6,9,11,12,13,19,22,25,30,60,70,88]),
              ([19,13,11,9,8,4,12,30,25,22,23,60,45,38,52,70,72,83],[4,8,9,11,12,13,19,22,23,25,30,38,45,52,60,70,72,83]),
              ([19,13,11,9,8,4,1,2,3,10,12,15,30,25,22,21,23,60,45,38,52,48,55,70,62,72,83,99],[1,2,3,4,8,9,10,11,12,13,15,19,21,22,23,25,30,38,45,48,52,55,60,62,70,72,83,99]) ]

    orders = [("124895AB36CD7EF","8492A5B1C6D3E7F")]
    root = TK.Tk()    
    canvas = TK.Canvas(root,width=920,height=800)# 新建画布
    canvas.pack()

    screen = TurtleScreen(canvas)                # 新建海龟屏幕
    screen.bgcolor('#FFF4F6')                    # 设定背景颜色
    screen.delay(0)

    # RawTurtle类就是原始海龟类,它是Turtle的父类
    raw = RawTurtle(screen,visible=False)

    raw.speed(0)
    raw.penup()
    raw.right(90)
    d = DrawTree(raw)  # 用raw来画图
    for pre_order,in_order in orders[:-1]:
        d.draw_binary_tree(pre_order,in_order,(0,350))
        time.sleep(0.1)
        #d.clear()
    d.draw_binary_tree(*orders[-1],(0,350))
screen.mainloop()

    

发表在 python, turtle | 留下评论

CSP-J,GESP备必神器哈!!!! 在教学上大有用处。根据权值构建哈夫曼树并且画出哈夫曼树Python海龟编程代码

# CSP-J,GESP备必神器哈!!!!  在教学上大有用处。根据权值构建哈夫曼树并且画出哈夫曼树Python海龟编程代码:
class Node:
    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right

def build_tree(weights):                     # 构建哈夫曼树
    nodes = [Node(w) for w in weights]
    while len(nodes) > 1:
        nodes.sort(key=lambda x: x.value)
        left = nodes.pop(0)
        right = nodes.pop(0)
        parent = Node(left.value + right.value, left, right)
        nodes.append(parent)
    return nodes[0]

def make_codes(node, code='', codes={}):         # 构建哈夫曼编码
    if node.left is None and node.right is None: # 是叶子结点了
        codes[node.value] = code
    else:
        make_codes(node.left, code + '0', codes)
        make_codes(node.right, code + '1', codes)
    return codes

# 权值测试表
weights = [3, 4, 6, 8, 12, 13, 15, 18, 25, 40]
weights = [19,21,2,3,6,7,10,32]
weights = [14,6,7,33,12,28]
weights = [19,21,2,3,6,7,10,32]
weights = [4,2,7,11,8,9]

root = build_tree(weights)
huffman_codes = make_codes(root)
print(huffman_codes)

import turtle
def fd2(distance):   
    turtle.penup();turtle.fd(distance*0.2);turtle.pendown()
    turtle.fd(distance*0.6);turtle.penup();turtle.stamp();turtle.fd(distance*0.2)

def draw_dot(num):  # 在坐标点打点,并在点上写上数字
    dx = 0
    dy = -8
    ft = ('宋体',10,'normal')
    pos = turtle.position()
    turtle.dot(30,'blue')   # 直径为30,蓝色的圆点
    x = pos[0] + dx         # dx和dy用于临时调整海龟坐标偏移量
    y = pos[1] + dy
    turtle.goto(x,y)
    turtle.color('white')  # 写白色字
    turtle.write(num,align='center',font=ft)
    turtle.color('black')
    turtle.goto(pos)
    
def draw_binary_tree(tree,dis,angle): # 画二叉树,请把它进行美化
    draw_dot(tree.value)    
    if tree.left!=None:
        turtle.right(angle);fd2(dis);turtle.left(angle)
        draw_binary_tree(tree.left,dis*0.75,angle);turtle.right(angle)
        turtle.bk(dis);turtle.left(angle)
    if tree.right!=None:
        turtle.left(angle);fd2(dis);turtle.right(angle)
        draw_binary_tree(tree.right,dis*0.75,angle);turtle.left(angle)
        turtle.bk(dis);turtle.right(angle)
turtle.delay(0)
turtle.speed(0)
turtle.right(90)
turtle.penup()
turtle.bk(180)
draw_binary_tree(root,140,50)
turtle.penup()
turtle.ht()


发表在 python, turtle | 留下评论

计算机专业的本质是什么?

很多的观点,其实是不对的,比如很多人对于计算机专业只局限于其本身.
其实计算机专业本质是服务其它行业的.现在各行各业哪个不要加上高科技,人工智能几个字?

1. 对于个人来讲,最感兴趣的专业就是最好的专业.
比如,对编程感兴趣,不断地钻研,成为专家大师,成为这个行业的领军人物,
那学计算机科学与技术等对他来说就是最好的专业.
现代社会无论怎么,都饿不死,只要有兴趣,周围都会绕着你转,你在这方面就会不断地聚集各种资源,从而最终成功.

2. 对于社会来讲,现代数字社会的构建的底层是汇编语言与C/C++计算机语言,更底层是算法(数学/物理),其它一切都构建于这上面.
计算机专业已经涵盖非常广泛,比如手机其实也是一个计算机了.新能源汽车就是一个会跑的计算机,
更不用说机器人了,谁都想有一个人形机器人陪伴自己吧.想像一个你住在山顶,不久便有一个无人机,其实也是会飞的计算机了.
给你送了一桶农夫山泉,有人形机器人给你搭好光伏系统,这一切都有可能.
所以我认为,学好计算机科学与技术是一个基础,再学一个其它专业比如无人机/新能源/机器人/生物科技等等,
利用人工智能技术在自己擅长的领域做到极致,这才更符合社会的发展,
这并不是什么理想,已经有相当多的人证明了的.

3. 不是专业不行,一个专业,本质上就是在某个细分领域的一些较系统的知识罢了.
对于计算机专业,其实主要是服务于其它实体专业的,比如服务于生态农业,
搞高科技生态农业,利用生态学土壤学养殖学等原理,让人们吃上不打农药,不施化肥,不用地膜,不打除草剂,不用转基因等的原生态高健康食品.
在这个高科技生态农业中,有农业机器人打理”食物森林”.
那么农业机器人的开发人员,即要懂计算机编程,又要懂机器人还要懂人工智能与农业等.
现在编程教育已经下行到了幼儿园了,并不是人故意为之,而是社会发展的必然.
就象汉服的发展,并不是由于几个人喜欢穿这衣服而发展到现在,
而是在中国成为第二大经济体,中国人的国际自信心增强,这个历史背景下必然的出现.

4. 学了计算机,毕业即失业,只是个心态问题,其实放眼全球,工作岗位非常多,只是吃不了那个”苦”而已,
都想着坐在办公室里吹着空调上班,敲敲代码,可现实不需要这么多白领了.
所以,调整心态,即可毕业就马上就业的.有时间找准自己最感兴趣的领域,做回自我,这才是人生最佳之路.
说到底,不是专业不行,是人不行.专业只是一堆知识,调整自己才是正确的选择.
学了计算机专业后,完全不必焦虑,因为人是万物之灵,可塑造.
而且还要高兴呢,学了计算机,有了这基础再学另一门专业或技术那维度是不是高了些呢?

发表在 杂谈 | 留下评论

帮别人做一个Python原创作品的副作品,一个像风火轮一样的图形?



以下是这个图案的代码,画完后,它会旋转:

import turtle

def draw_polygon(n,length,fc,heading):
    """n:边数,length:边长,fc:填充颜色,heading是1或者负一"""
    turtle.fillcolor(fc)
    turtle.begin_fill()
    for i in range(n):
        turtle.fd(length)
        turtle.left(heading * 360/n)
    turtle.end_fill()

n = 6
length = 20
turtle.speed(0)
turtle.delay(0)
turtle.bgcolor('black')
turtle.penup()
turtle.sety(-2*length)
turtle.left(30)
turtle.fillcolor('#FE9007')
turtle.pendown()
turtle.begin_poly()
turtle.begin_fill()
for i in range(2*n):
    if i%2==1:
        turtle.fd(length)
        turtle.fd(length)
        turtle.left(360/n)
    else:
        for j in range(3):
            turtle.fd(length)
            turtle.right(60)
        turtle.left(90)
        draw_polygon(3,length,'',1)
        turtle.right(60)
        draw_polygon(4,length,'red',-1)
        turtle.right(90)
        for j in range(2):
            turtle.fd(length)
            turtle.right(60)         
turtle.end_fill()
turtle.end_poly()
turtle.speed(0)
turtle.delay(0)
turtle.sety(-length)
poly = turtle.get_poly()
turtle.addshape('p',poly)
turtle.clear()
turtle.shape('p')
while True:turtle.left(0.1)
    

发表在 python, turtle | 留下评论

raptor流程图与算法设计教程

Raptor运算符号、函数、子过程介绍大全

Raptor symbols 符号(六个)

The six symbols used in Raptor are displayed in the Symbol Window in the upper left corner of the main window:

赋值Assignment

x <- x + 1用Set x to x+1

调用Call及subcharts

graphics routines and other instructor-provided procedures及subcharts

输入Input

输出Output

分支Selection

循环Loop Control

Math in Raptor(数学运算符)

Unary Minus ( – )负号

例如,x值分别为7,-3,3,则-x的值为-7;-x的值为3,—x值为-3

Exponentiation ( ^ or ** )指数运算

2^3的值为8;-3**2 的值为9 ( =(-3)*(-3) )

* , / , REM, MOD——乘、除、取余函数

floor ( 5 / 2 )——整除函数?=2

x y x REM y x MOD y
10 3 1 1
37 2 1 1
16 2 0 0
9.5 3 0.5 0.5
9.5 2.5 2 2
-10 3 -1 2
10 -3 1 -2

常用于判断某数是否奇偶数

注:三种除运算除数均不可为0,否则将显示“run-time error”

+ , – 加减运算

非三角函数

In Assignments:

x_magnitude <- abs(x)

product <- e^(log(factor1) + log(factor2))

In Select and Loop Exit Comparisons:

log(x) > 0.0

sqrt(c^2) <= sqrt(a^2 + b^2)

random > 0.5 and abs(x) < 100.0

以字母顺序列出非三角函数:

求绝对值ABS

例如abs(-3.7) 为3.7

CEILING(与FLOOR相对)

ceiling(math_expression)

例如ceiling(15.9) 为16, ceiling(3.1) 为 4, ceiling(-4.1) 为-4

FLOOR

variable <- floor(math_expression)

floor(15.9) is 15, floor(-4.1) is -5

E指数幂

e^x

e为约等于2.7的对数常数

LOG对数

log(math_expression)

参数不可为0,否则run-time error

MAX

max(math_expression, max_expression)

例如:max(5,7) 为7.

MIN

min(math_expression, max_expression)

例如:min(5,7) 为5.

PI

返回圆周率值3.14159.

POWERMOD

powermod(base, exp, modulus)

返回值为 ((base^exp) mod modulus).

RSA public key encryption and decryption

bases and exponents too large for the Raptor exponentiation operator can still be used for encryption.

RANDOM

Random返回[0.0,1.0)间的一个随机数

例如:floor((random * 6) + 1).

SQRT

sqrt(math_expression)

参数不可为负数

三角函数

SIN

sin(expression_in_radians)

COS

cos(expression_in_radians)

TAN

tan(expression_in_radians)

COT

cot(expression_in_radians)

ARCSIN

arcsin(expression)

ARCCOS

arccos(expression)

ARCCOT

arccot(x,y)

例如arccot(sqrt(2)/2,sqrt(2)/2) 为pi/4

arccot(-sqrt(2)/2,sqrt(2)/2)为3/4 *pi

arccot(sqrt(2)/2,-sqrt(2)/2)为-pi/4

arccot(-sqrt(2)/2,-sqrt(2)/2)为-3/4 *pi.

ARCTAN

arctan(y,x)

Program Control

用布尔值控制

= Equal True if the compared items are equal
/= Not Equal True if the compared items are not equal
!= Not Equal True if the compared items are not equal
> Greater Than True if the expression on the left is greater than the expression on the right
< Less Than True if the expression on the left is less than the expression on the right
>= Greater Than or Equal True if the expression on the left is greater than or equal to the expression on the right
<= Less Than or Equal True if the expression on the left is less than or equal to the expression on the right

例子:

count = 10;count mod 7 != 0;x > maximum

Boolean Operators布尔运算有:

AND, OR, XOR and NOT

n >= 1 and n <= 10

n < 1 or n > 10

表达式1 XOR 表达式2中,两个表达式有1个为true则返回true

可用于比较数和字符串

Boolean Functions布尔函数

Key_Hit

Is_Open

Mouse_Button_Pressed(Left_Button)

Delay_For

Delay_For(duration)

含一个参数的过程,含义为暂停若干秒duration。

Clear_Console

一个过程,用于清除控制台显示,并将光标移至初始位置。

关于Raptor图

默认色为白色。程序可使用下列函数在窗口中输出raptor图。

RaptorGraph坐标

Open_Graph_Window打开Raptor Graph后,白色背景中将出现一个打开的window。window左下角像素的坐标为(1,1)。

Open_Graph_Window(400,300)显示的窗口:

 

Drawing Operations画图操作

可以绘制指定颜色的指定形状。

Keyboard Operations键盘操作

用于确定是否有键输入。例如输入字符串ASCII编码

Mouse Operations鼠标操作

可以返回当前鼠标位置。

Window Operations窗口操作

用于更新和设置窗口属性。Freeze_Graph_Window and Update_Graph_Window 调用可以平滑动画显示

注:窗口必须打开才能进行相应操作,否则将出现run-time error

Window Operations窗口操作

Close_Graph_Window

Close_Graph_Window

关闭窗口过程

例:Close_Graph_Window

Get_Max_Height

variable <- Get_Max_Height

返回窗口的高度像素值。事实上,该过程常在Open_Graph_Window调用前使用。其值可用来作为打开窗口的参数。

Open_Graph_Window(Get_Max_Width,Get_Max_Height)

Get_Max_Width

variable <- Get_Max_Width

类同上

Get Window Height

variable <- Get_Window_Height

返回窗口高度。图窗口必须先打开。

例:

Get Window Width

variable <- Get_Window_Width

类同上

Is_Open

Is_Open

用于判断窗口是否打开,返回值为Yes (True) 或No (False)。常用于判断。

例:

Open_Graph_Window

Open_Graph_Window(X_Size, Y_Size)

例:Open_Graph_Window(500, 300)

opens a 500 pixel (wide) by 300 pixel (high) graphics window.

Set_Window_Title

Set_Window_Title(Title)

改变或设置窗口标题。

例:Set_Window_Title(“CS 110 PEX 3”)

Smoothing Animations平滑绘制图形

Freeze_Graph_Window及Update_Graph_Window常用于平滑动画显示

不用Freeze_Graph_Window将使每次描画变得明显而导致动画很愣。

Freeze_Graph_Window is called (and before Unfreeze_Graph_Window is called), this buffer is used for all graphics calls.  That is, the objects being drawn by the graphics calls are not drawn to the screen, but instead to the screen buffer.  When the programmer has drawn the desired objects to the screen buffer, the Update_Graph_Window call is used to almost instantaneously move the screen buffer to the viewable graphics screen.  An animation normally repeats the following steps:

1) Draw desired objects (to the screen buffer) using normal graphics calls (例如Draw_Circle, Draw_Line, etc.)

2) 调用Update_Graph_Window使描画迅速可见

结束动画描画时,用Unfreeze_Graph_Window过程,将screen buffer数据更新屏幕使动画立即描画。例:

Colors颜色

Black, Blue, Green, Cyan青,Red, Magenta紫, Brown, Light_Gray浅灰, Dark_Gray深灰, Light_Blue浅蓝, Light_Green浅绿, Light_Cyan浅青, Light_Red浅红, Light_Magenta浅紫, Yellow, White

或用序号0~15(0-黑, 1-蓝,15-白)

例:

Draw_Box(X1, Y1, X2, Y2, BoxColor, Filled)

Draw_Box(X1, Y1, X2, Y2, Green, Filled)

Draw_Box(X1, Y1, X2, Y2, 2, Filled)

色值可达241,当大于15时,将为扩充色。

Filled——值为True(or Yes) or False (or No)。True则用指定颜色填充,否则无色。

Closest_Color

color <- Closest_Color(Red, Green, Blue)

一个函数,返回值0~241之间的某值(接近RGB颜色模式中),在0~ 255间或显示run-time error。

例:Color <- Closest_Color(50, 30, 110)具有RGB色值为50,30,110

Generating Random Colors产生随机颜色

Random_Color

返回0~15 (Black, Blue, Green, Cyan, Red, Magenta, Brown, Light_Gray, Dark_Gray, Light_Blue, Light_Green, Light_Cyan, Light_Red, Light_Magenta, Yellow, White)的一个随机色。

例:Display_Text(100,100,”Message”,Random_Color)

Random_Extended_Color

返回0~241间随机色

例:Display_Number(100,100,Score,Random_Extended_Color)

画图操作

Clear_Window

Clear_Window(Color)

例:Clear_Window(Red)——清屏且填充红色

Draw_Arc绘制弧

Draw_Arc(X1, Y1, X2, Y2, Startx, Starty, Endx, Endy, Color)

含8个参数,在指定的(X1, Y1, X2, Y2)矩形中绘制椭圆。 (X1,Y1) and (X2,Y2) 为矩形中的对角坐标。从坐标(Startx,Starty)开始,到(Endx,Endy)结束。

注:必须先打开图窗口,否则将run-time error

例:Draw_Arc(1,100,200,1,250,50,2,2,black)

在以下300×300 window中:

Draw_Bitmap

Draw_Bitmap(Bitmap, X, Y, Width, Height)

一个含5个参数的调用,用于在图窗口中绘制图像。

Bitmap——为函数Load_Bitmap的返回值

X,Y——图像在图窗口左上角的坐标值

Width,Height——以像素表示的图像绘制的最大宽度、高度

注:必须先打开图窗口,否则将run-time error

注:Raptor本身不自动缩放图像,一旦图像尺寸大于指定宽、高度,将自动截去图像右、下边。否则将正常显示。

例:在(50,450)位置绘制具有400、300像素宽、高的图像。注意必须先对参数bitmap用Load_Bitmap function赋值。

装入mypicture.bmp文件中的图像。

Draw_Box绘制矩形

Draw_Box(X1, Y1, X2, Y2, Color, Filled)

(X1, Y1)矩形的任一角坐标,(X2, Y2)与(X1, Y1)相对的另一角坐标

Filled——值为True(or Yes) or False (or No)。True则用指定颜色填充,否则无色。

Filled——值为True(or Yes) or False (or No)。True则用指定颜色填充,否则无色。

注:图窗口必须先打开,否则run-time error

例:Draw_Box(50,150,250,25,Green,True)从左(50,150)到右(250,25)绘制绿色矩形

Draw_Box(250,150,50,25,Green,False)同一位置绘制无色矩形。

Draw_Circle绘圆形

Draw_Circle(X, Y, Radius, Color, Filled)

在中心坐标(X,Y)绘制半径为radius的圆形。Filled用法同矩形调用。

注:必须先打开图窗口,否则run-time error

例:绘制绿色或无色圆形Draw_Circle(50,150,25,Green,True)

Draw_Circle(100,250,50,Green,False)

Draw_Ellipse绘制椭圆

Draw_Ellipse(X1, Y1, X2, Y2, Color, Filled)

(X1,Y1) 起点坐标,(X2,Y2)终点坐标

注:必须先打开图窗口,否则run-time error

例:Draw_Ellipse(50,150,250,25,Green,True)

Draw_Ellipse(250,150,50,25,Green,False)

绘制绿色、无色椭圆。

Draw_Ellipse_Rotate

Draw_Ellipse(X1, Y1, X2, Y2, Angle, Color, Filled)

此过程与Draw_Ellipse类似,但却是绘制一个逆时针旋转的指定角度angle,该值用数值指定 (例如,90度以pi/2给出)

例:Draw_Ellipse_Rotate(50,150,250,25,pi/2,Green,True)

绘制90度的椭圆。

Draw_Line绘制直线

Draw_Line(X1, Y1, X2, Y2, Color)

注:必须先打开图窗口,否则run-time error

例:Draw_Line(50,150,250,25,Green);

Flood_Fill填充指定颜色

Flood_Fill(X, Y, Color)

一个过程调用,在在(X,Y)指定的区域内填充指定颜色。

注:必须先打开图窗口,否则run-time error

例:Flood_Fill(X1+1,Y1-1,Red)

Get_Pixel获取某处颜色

Get_Pixel(X, Y)

返回指定坐标位置的颜色值,若x,y值错误,将显示run-time error并停止程序运行。

常用于赋值。也用于判断,例如使循环退出的判断Get_Pixel(x1,y1)= Green

注:必须先打开图窗口,否则run-time error

例:set Color to Get_Pixel(200,200);

Load_Bitmap装载图

Load_Bitmap(Filename)

一个函数,返回某文件中的图像。用于Draw_Bitmap过程

注:图像文件必须是支持的格式.bmp,.jpg)或.gif

注:必须先打开图窗口,否则run-time error

例:

The following example loads the image with the filename mypicture.bmp into memory and assigns an associated value to the variable bitmap.  The variable bitmap could then be used in a subsequent call to Draw_Bitmap in order to draw all or part of the image in a RaptorGraph window.

Put_Pixel改变颜色

Put_Pixel(X, Y, Color)

一个过程,改变指定位置的颜色

注:必须先打开图窗口,否则run-time error

例:Put_Pixel(50,50,Red);

Put_Pixel(50,50,ColorVar);

Keyboard Operations键盘操作

Get_Key

variable <- Get_Key

返回最后一个按键的扩展ASCII码值

Left Arrow 165
Right Arrow 167
Up Arrow 166
Down Arrow 168

注:图窗口必须打开,否则run-time error。

例:

Get_Key_String

Get_Key_String

返回用户输入字符串的最后一个键值。

Get_Key_String

按键 返回值
a “a”
Shift-a “A”
Page Down “PageDn”
F-1 “F1”
Enter “Enter”
Esc “Esc”
Tab “Tab”
Backspace “Backspace”
Down Arrow “Down”
Up Arrow “Up”
Left Arrow “Left”
Right Arrow “Right”
Insert “Insert”
Delete “Delete”
\ (Back Slash) “\”
Space Bar ” “
Control-A “Ctrl-A”

注:图窗口必须打开,否则run-time error。

例:

Key_Down

Key_Down(“key”)

当指定键按下时,返回true。如Key_Down(“c”);Key_Down(” “) 空格键按下为true

Key_Hit, calls to Key_Down are unaffected by any previous calls to Get_Key, Get_Key_String, or Wait_For_Key.

注:图窗口必须打开,否则run-time error。

例:

按键 按键参数
a “a”
Shift “Shift”
Page Down “PageDn”
F-1 “F1”
Enter “Enter”
Esc “Esc”
Tab “Tab”
Backspace “Backspace”
Down Arrow “Down”
Up Arrow “Up”
Left Arrow “Left”
Right Arrow “Right”
Insert “Insert”
Delete “Delete”
\ (Back Slash) “\”
Space Bar ” “
Control “Ctrl”

Key_Hit

当get_key调用时,有键按下则返回true

常用于是否执行了Get_Key调用。

注:图窗口必须打开,否则run-time error。

例:

Wait_For_Key

Wait_for_Key

当有键按下时暂停程序运行。

注:图窗口必须打开,否则run-time error。

例:Wait_For_Key

Mouse Operations鼠标操作

Get_Mouse_Button

Get_Mouse_Button(Which_Button, X, Y)

一个过程,等待鼠标单击,并返回鼠标单击处的X,Y坐标值,如同时单击左、右两边,则只保留左键坐标。释放时的坐标值

Which_Button must be either Left_Button or Right_Button.

注:图窗口必须打开,否则run-time error。

例:Get_Mouse_Button(Left_Button,Mouse_X,Mouse_Y)

Get_Mouse_X

Get_Mouse_X

返回鼠标当前的X值

注:图窗口必须打开,否则run-time error。

例:

Get_Mouse_Y

Get_Mouse_Y

例:

Mouse_Button_Down

Mouse_Button_Down(Which_Button)

当鼠标左或右键按下时间,返回true。

与Mouse_Button_Pressed不同,Mouse_Button_Down对以前的Get_Mouse_Button 或Wait_For_Mouse_Button调用无效。

注:图窗口必须打开,否则run-time error。

例:

Mouse_Button_Pressed

Mouse_Button_Pressed(Which_Button)

当最后一次调用Get_Mouse_Button或Wait_For_Mouse_Button(或因未调用Open_Graph_Window)鼠标按下时返回true。常用于测试是否调用了Get_Mouse_Button。

注:图窗口必须打开,否则run-time error。

例:

Mouse_Button_Released

Mouse_Button_Released(Which_Button)

当Get_Mouse_Button或Wait_For_Mouse_Button (或因Open_Graph_Window未成功调用)时鼠标释放返回true

注:图窗口必须打开,否则run-time error。

例:

Wait_For_Mouse_Button

Wait_For_Mouse_Button(Which_Button)

一个过程,暂停运行知道指定的鼠标键按下,左键优先。

注:图窗口必须打开,否则run-time error。

例:Wait_For_Mouse_Button(Left_Button)

Text Operations文本操作

Display_Number

Display_Number(X, Y, Number, Color)

在左上角指定位置X,Y按指定颜色Color显示值Number

注:图窗口必须打开,否则run-time error。

例:Display_Number(3,10,x, Black)

Display_Text显示字符串

Display_Text(X, Y, Text, Color)

注:图窗口必须打开,否则run-time error。

例:Display_Text(3, 10, “Hello!”, Black)

Display_Text(30, 50, “Score: ” + score, Red)

显示字符串变量”Score: ” + score的值

Get_Font_Height

variable <- Get_Font_Height

返回字符高度。

注:图窗口必须打开,否则run-time error。

例:

Get_Font_Width

variable <- Get_Font_Width

注:图窗口必须打开,否则run-time error。

Set_Font_Size

Set_Font_Size(Size)

设置文字大小0~100pt,默认值为10

注:图窗口必须打开,否则run-time error。

例:Set_Font_Size(14)

Set_Font_Size(x)按变量x值设置文本大小。

Arrays数组

Array Overview数组概述

一系列带有顺序的用[]标记的数。例:

scores[1] scores[2] scores[3] scores[4]

顺序号必须是正数。

Scores成绩

1 2 3 4
87 93 77 82

常用于循环处理。

 Two-Dimensional Arrays二维数组

用于表示矩阵。例:

grid[1,1] grid[1,2] grid[1,3] grid[1,4]
grid[2,1] grid[2,2] grid[2,3] grid[2,4]
grid[3,1] grid[3,2] grid[3,3] grid[3,4]

 

grid 1 2 3 4
1 3 8 6 15
2 2 9 12 14
3 6 11 18 13

grid[3,2]值11,grid[2,4] 值14.

Processing Two-Dimensional Arrays二维数组处理

双循环。分别对行列。例如:

Creating Arrays创建数组

使用前必须先创建数组。说明数组的最大顺序(用赋值语句)。

大于最大顺序号时将出现run-time error

例如,先values[7] <- 3

1 2 3 4 5 6 7
0 0 0 0 0 0 3

如:values[9] <- 6

则:

1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 3 0 6

对100个数组元素赋初始值0,可以:values[100] <- 0

Creating Two-Dimensional Arrays创建二维数组

 

numbers[3,4] <- 13。则二维数组

numbers 1 2 3 4
1 0 0 0 0
2 0 0 0 0
3 0 0 0 13

Array Operations数组操作

Length_Of

Length_Of is a function that takes one argument, a one-dimensional array without any index or square brackets after the name.  It returns the highest index (which is also the number of elements) defined for the array.  Length_Of can also be used to determine the length of a string expression.

 

例:Length_Of(Scores) will return 4.

Scores

1 2 3 4
87 93 77 82

Raptor Reference

Math

 

数学运算符

负号unary minus
^ , ** 指数运算exponentiation
* 乘法multiplication
/ 除法division
rem, mod 求余remainder
+ 加法addition
减法subtraction

Basic Math Functions基本函数运算

abs 绝对值

ceiling (round up)取上界

e – 返回自然对数值 (base for natural logarithms)

floor – 取下界(round down)

log – 求自然对数

max – 求最大值

min – 求最小值

pi – pi值

powermod – used for public key encryption / decryption

random – [0.0,1.0)间随机数

sqrt – 平方根

Trigonometric Functions三角函数

arccos – arc cosine

arccot – arc cotangent

arcsin – arc sine

arctan – arc tangent

cos – cosine

cot – cotangent

sin – sine

tan – tangent

Program Control

Relational Operators

=     equal to

>     greater than

<     less than

!=    not equal to

/=    not equal to

>=   greater than or equal to

<=   less than or equal to

Boolean Operators

and – 与运算

not – 非运算

or – 或运算

xor – 异或运算’xor’ (true if expressions on either side are different)

 

clear_console – 清除主控制台信息

delay_for – 等待若干秒

Raptor Graphics

Available colors可用色

Black, Blue, Green, Cyan, Red, Magenta, Brown,Light_Gray, Dark_Gray, Light_Blue, Light_Green, Light_Cyan, Light_Red, Light_Magenta, Yellow, White

Available fill values可用填充

Filled, Unfilled

True, False

Yes, No

Mouse button values鼠标值

Left_Button , Right_Button,

RaptorGraph Functions (return a value)图函数

Closest_Color, Get_Font_Height, Get_Font_Width, Get_Key, Get_Key_String, Get_Max_Height, Get_Max_Width, Get_Mouse_X, Get_Mouse_Y, Get_Pixel, Get_Window_Height, Get_Window_Width, Is_Open, Key_Down, Key_Hit, Mouse_Button_Down,  Mouse_Button_Pressed, Mouse_Button_Released, Random_Color, Random_Extended_Color

RaptorGraph Calls图过程

Clear_Window, Close_Graph_Window, Display_Text, Display_Number, Draw_Arc, Draw_Box, Draw_Bitmap, Draw_Circle, Draw_Ellipse, Draw_Ellipse_Rotate, Draw_Line , Flood_Fill, Freeze_Graph_Window, Load_Bitmap, Open_Graph_Window, Wait_For_Key, Wait_For_Mouse_Button, Get_Mouse_Button, Put_Pixel, Set_Font_Size, Set_Window_Title, Unfreeze_Graph_Window, Update_Graph_Window

Arrays

Array Operations

Length_Of – 返回数组长度

[ ] – indexing: 顺序

 

To_Character – 返回指定数的ASCII值

To_ASCII – 为指定字符赋予ASCII值

Strings

String Operations

+ – Concatenation

Length_Of – 返回字符串长度

[ ] – indexing:顺序

Variable Type Queries

Boolean Functions

Is_Array, Is_Number, Is_String, Is_2D_Array

Sound

Sound Calls

Play_Sound, Play_Sound_Background, Play_Sound_Background_Loop

Files

File Calls

Redirect_Input  – 以某文件中数据作为输入

Redirect_Output – 将值输出到某文件。

 

 

 

Note that it is as easy for the programmer to process 4,000 values as it is to process  four  by simply changing the value of the variable howmany!  That is part of the power of arrays used with counting loops.

整个Reference结束

Advanced Topics

1、Sound Operations

Raptor程序可以用后面三个过程播放声音 (.wav)文件,但需注意:

  • 文件名必须是字符串或字符串变量
  • 必须带有完整路径,否则必须与raptor在同一文件夹中
  • .wav可省略
  • 如果文件名错误,将产生鸣笛音

Play_Sound

Play_Sound(filename)

例:Play_Sound(“c:\windows\media\Windows XP Startup”)

Play_Sound_Background

Play_Sound_Background(filename)

例:Play_Sound_Background(“c:\windows\media\tada.wav”)

Play_Sound_Background_Loop循环播放背景

Play_Sound_Background_Loop(filename)

例:Play_Sound_Background(“sound.wav”)

2、Strings

(1)String Variables & Assignment

或在过程中:

Assigning values to strings

  • 必须用双引号”Hello, World!”)
  • 可以是字符串变量或表达式”Hello, ” + name_string_var + “, it’s nice to meet you”

(2)String vs. Numeric Input

下面为非法输入

字符串
3e5   (3 x 105) 3  5
123 12.3.2
-55  (nothing – if nothing is input, an empty string results
58.7 “123”    (quotes will be part of the string)

(3)String Operations

+ (Concatenation)

例: “The answer is: ” + count will have the value “The answer is: 7” if the value of count is 7.

Length_Of

Length_Of返回一维数组或字符串长度

Length_Of(stringVar)

Length_Of(“Answer” + ” is”) 值为9

[ ] (Indexing)返回第一个字符

例如,字符串 “John Doe”则initial <- Name[1] 后值为’J’.

Name[6] <- ‘F’将使”John Doe”变为”John Foe”

To_Character

To_Character(70) 值为 ‘F’

To_ASCII

To_ASCII(‘F’) 值为70

(4)String Comparisons

=, !=, /=, <, <=, >, <=

以字典顺序比较。例:”abc” <“abd”

控制字符<可打印字符<数字字符<大写字母<小写字母

3、Files for input and output

(1)Files Overview文件概述

(2)Inputting from a File

Redirecting Input from a File

Redirect_Input(“file.txt”)

Redirect_Input(“C:\Documents and Settings\John.Doe\CS110\file.txt”);

Stopping Input Redirection

Redirect_Input(False)

停止file输入,改由键盘输入。

例:下列流程图”file.txt”

(3)Input Line by Line逐行输入

Line-Oriented Input

 

When a file is used for input, an Input symbol consumes exactly one line of the file.  The contents of the line determine whether Raptor interprets it as a string or a number (see String vs. Numeric Input).  Therefore, a text file created for input must have the desired number of lines to match the number of inputs to be performed.  Further, each of these lines must make sense for the variable that is to input that line of data. 例如,某文件包含一个学员信息:

 

C4C John Doe

28

3.51

分别顺序赋予下列变量:cadet_name;squadron;GPA

Notes: 空行赋值给variable空串。

Files of Unknown Size (Advanced Topic)未知大小的文件

有时从一个未知行数的文件中读取数据,因而,程序必须知道何时到达文件尾。Raptor 提供了一个End_Of_Input函数,此函数在读入所有行后返回true。

注:如用笔记本程序编辑文件,必须确认文件尾无额外的空行。在Raptor中,空行将作为空串,可能会导致某些数值变量被无意义赋值从而导致运行错误。

例:

(4)Outputting to a File

Redirecting Output to a File

Raptor提供了Redirect_Output语句输出到文件

Redirect_Output(“file.txt”)

Redirect_Output(“C:\Documents and Settings\John.Doe\CS110\datafile”);

Notes: 如果文件已经存在,将无警示地覆盖原内容。没有写入权限的文件,将产生run-time error

 

Redirect_Output(True)

运行时,将弹出文件选课对话框,用户可以在运行时动态输入文件名。

File Output

输出文件中的数据格式与显示在主控台中的格式相同。程序可以控制一个新行开始时的输出内容。

Stopping Output Redirection

要重置Raptor使输出改向到主控台,可以用以下过程:

Redirect_Output(False)

使用此过程,将关闭输出文件,输出数据将从新输出到主控台

例:流程图显示了Redirect_Output call在交互界面到文件的切换过程。

开始输出到主控台,以后的输出将转向到文件”file.txt”,等所有元素输出后,输出关闭,最后的输出再次转向主控台。

4、Subcharts子图

(1)Subchart Overview

有些步骤常常需要在程序的不同位置反复执行。可以用复制粘贴,但肯定会导致程序行数增加,进而使程序难读,错误多。可以用子图subchart 实现。在不同位置调用子图。

类似圆形绘制,可以直接定义一个调用实现。

可以通过判断中断子图运行。

全程变量共享。某子图中的变量一直不变除非重新赋值。

注意:对临时变量特别要注意其值。例如,某变量在主程序中是最大值,若某数在子图中赋值给max,原max值将丢失。

(2)Creating and Modifying Subcharts

Creating a Subchart创建子图

开始编辑主程序时,窗口标题为”Main”,要创建subchart, 在”Main”tab右击并选择菜单中的“添加子图Add Subchart”,然后输入子图名,新窗口标题将为子图名,可以在子图中添加、删除和编辑流程图符号。

Renaming a Subchart重命名子图

在子图窗口的子图名处右击,在弹出菜单中选”Rename Subchart”。

Deleting a Subchart删除子图

右击。

(3)Calling Subcharts

在调用位置用Call symbol,可以在Call symbol双击编辑,主程序可以调用子图,某子图可以调用另一子图。甚至本子图可以调用自己(这是不好的用法)。

Passing Data to and from Subcharts (Advanced Topic)子图参数传递

可以用同一Draw_Circle过程绘制红色(100,100)大小的圆形,也可以绘制黑色的(250,250)大小的圆形。Subcharts也有此功能。

子图不支持子图内的参数传递,但允许其他情形的参数传递。

要确保子图中的参数变量不再被程序误用,应用唯一方式命名。好的命名方式是用子图名作为前缀符,并用下划线连接变量名。例如,用draw_triangle_x作为draw_triangle中的变量。

5、Variable Type Queries

Is_Array

Is_Array(variable)

当变量是数组时,则返回true。否则为false

Is_Character

Is_ Character(variable)

当变量是字符时,则返回true。否则为false

Is_Number

Is_Number(variable)

变量为数值时,返回true

Is_String

Is_String(variable)

当变量是字符串时,则返回true。否则为false

Is_2D_Array

Is_2D_Array(variable)

当变量是二维数组时,则返回true。否则为false

发表在 杂谈 | 留下评论

Python音频自动分隔示例

为了研究如何将语音转换成视频,以便以后把自己想说的话发到B站,所以今天看了下如何将语音切割的代码。代码算法很简单,会点音频知识即可。测试代码如下:

"""
利用split_on_silence(sound,min_silence_len,
                      silence_thresh,    keep_silence=400)函数

第一个参数为待分割音频,第二个为多少秒“没声”代表沉默,
第三个为分贝小于多少dBFS时代表沉默,第四个为为截出的每个音频添加多少ms无声

"""
from pydub import AudioSegment
from pydub.silence import split_on_silence
 
sound = AudioSegment.from_mp3("李兴球的音频介绍.wav")
loudness = sound.dBFS  # 响度
 
chunks = split_on_silence(sound,
    # 沉默一定时间的间隔,用于分隔一段语音
    min_silence_len=430, 
    # 沉默的阈值
    silence_thresh=-45,
    keep_silence=400
 
)
print('总分段:', len(chunks))
 
# 放弃长度小于2秒和大于10秒的音频片段
for i in list(range(len(chunks)))[::-1]:
    if len(chunks[i]) <= 2000 or len(chunks[i]) >= 10000:
        chunks.pop(i)
print('取有效分段(大于2s小于10s):', len(chunks))
 
'''
for x in range(0,int(len(sound)/1000)):
    print(x,sound[x*1000:(x+1)*1000].max_dBFS)
'''
 
for i, chunk in enumerate(chunks):
    chunk.export("cutFilter300/chunk{0}.wav".format(i), format="wav")
发表在 python | 留下评论

2024年2月2号Python寒假班的集合练习题集:

题1.创建一个空集合,增加10个整数,每个整数是从1到100之间的随机质数。
题2. 应用for循环删除集合{1,22,33,41,25,66,7,8,9,10}中的是偶数的元素
题3. 以空格分隔,输出集合中{1,2,3,4,5,6,7}未出现在集合{2,3,5,8}中的元素
题4. 输出两个集合{1, 2, 3,4,5,6,7,8,9,10}和{12, 14, 25}并集
题5. 输出两个集合{1, 2, 3} 和 {2, 4, 5}交集
题6. 输出两个集合{1, 2, 3} 和 {2, 4, 5}未重复的元素集合
题7. 判断两个集合{1, 2, 3}和 {2, 4, 5}是否有重复的元素,输出True或者False.
题8. 判断集合{1, 2} 和 {1, 3, 4, 2} 的子集
题9. 去除数组[1, 2, 3, 2, 5, ‘x’, ‘a’, ‘x’]中的重复元素
第一题参考答案:

import random

def is_prime(x):
    if x<2:return False
    for i in range(2,x):
        if x%i==0:return False
    return True

primes = []
for x in range(2,100):
    if is_prime(x):primes.append(x)
    
j = set()
for i in range(10):
    j.add(random.choice(primes))
print(j)

第二题参考答案:

j = {1,2,3,4,5,6,7,8,9,10}
for x in list(j):
    if x%2==0:
        j.remove(x)
print(j)

第三题目就是求差集,代码略。其它的更简单,代码更加略去......

发表在 python | 留下评论

请同学们完善这个Python制作的单词记忆练习小程序

import random

nd = '小学所有单词.txt'
f = open(nd,encoding='utf-8')
c = f.read()
f.close()
dic = {}
biao = c.split('\n')
for i in biao:
    b = i.split('/')
    r = b[0]
    t = b[2]
    dic[r]=t.strip()
score = 0          # 表示得分
wrongs = []             # 做错的题目
words = list(dic.keys()) # 所有的键形成的列表
while True:
    w = random.choice(words) # 从单词表中随机选择一个单词
    print("请选择",w,'的翻译(a,b,c,d)')
    answers = [w]      # 答案列表
    # 接下来再添加3个和w不同的单词
    while (len(answers)) < 4:
         an = random.choice(words)
         if an!=w:
             answers.append(an)            
    random.shuffle(answers) # 打乱顺序    
    i = answers.index(w)  # 记录正确答案的索引

    # 输出备选答案
    for char,an in zip('abcd',answers):
        print(char+"."+ dic[an]+ " ",end='  ')
    print()             # 换行

    d = input()
    if d=='q':break
    if ord(d)- ord('a') ==i:
        print('正确,加10分。')
        score +=10
    else:
        wrongs.append(w)  # 把做错的单词加入列表
        print('错误,正确答案是',chr(ord('a') + i))
        score -= 10
    print('▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔')
        
# 把做错的题目写入‘错题本',就是写文件
print('你的得分是',score)
print(wrongs)
     
    

pen /pen/ 钢笔
pencil /'pensl/ 铅笔
pencil-case /'penslkeis / 铅笔盒
ruler /'ru:lə/ 尺子
book /buk/ 书
bag /bæg/ 包
post card /pəust kɑ:d/ 明信片
newspaper /'nju:z,peipə/ 报纸
schoolbag /sku:lbæg/ 书包
eraser / i'reisə / 橡皮
crayon / 'kreiən / 蜡笔
sharpener / 'ʃɑ:pənə / 卷笔刀
story-book / 'stɔ:ri] buk / 故事书
notebook / 'nəutbuk / 笔记本
Chinese book / 'tʃai'ni:z / 语文书
English book / 'iŋgliʃ / 英语书
maths book / mæθs / 数学书
magazine /,mægə'zi:n / 杂志
newspaper / 'nju:z,peipə / 报纸
dictionary / 'dikʃəneri / 词典
foot / fut / 脚
head / hed / 头
face / feis / 脸
hair / hɛə / 头发
nose / nəuz / 鼻子
mouth / mauθ / 嘴
eye / ai / 眼睛
ear / iə / 耳朵
arm / ɑ:m / 手臂
hand / hænd / 手
finger / 'fiŋgə / 手指
leg / leg / 腿
tail / teil / 尾巴
red /red/ 红
blue /blu:/ 蓝
yellow /'jeləu/ 黄
green /gri:n/ 绿
white /wait/ 白
black /blæk/ 黑
pink /piŋk/ 粉红
purple /'pə:pl/ 紫
orange /'ɔ:rindʒ/ 橙
brown /braun/ 棕
cat /kæt/ 猫
dog /dɔg/ 狗
pig /pig/ 猪
duck /dʌk/ 鸭
rabbit /'ræbit/ 兔子
horse /hɔ:s/ 马
elephant /'elifənt/ 大象
ant /ænt/ 蚂蚁
fish /fiʃ/ 鱼
bird /bə:d/ 鸟
snake /sneik/ 蛇
mouse /maus/ 鼠
kangaroo /,kæŋgə'ru:/ 袋鼠
monkey /'mʌŋki/ 猴子
panda /'pændə/ 熊猫
bear /bɛə/ 熊
lion /'laiən/ 狮
tiger /'taigə/ 老虎
fox /fɔks/ 狐狸
zebra /'zi:brə/ 斑马
deer /diə/ 鹿
giraffe /dʒi'rɑ:f/ 长颈鹿
goose /gu:s/ 鹅
hen /hen/ 母鸡
turkey /'tə:ki/ 火鸡
lamb /læm/ 小羊
sheep /ʃi:p/ 绵羊
goat /gəut/ 山羊
cow /kau/ 奶牛
shark /'ʃɑ:k/ 鲨鱼
seal / si:l / 海豹
friend /frend/ 朋友
boy / bɔi / 男孩
girl /gə:l/ 女孩
mother /'mʌðə/ 母亲
father /'fɑ:ðə/ 父亲
sister /'sistə/ 姐妹
brother /'brʌðə/ 兄弟
uncle /'ʌŋkl/ 叔叔
man /mæn/ 男人
woman/ 'wumən/女人
Mr / / 先生
Miss / / 小姐
lady /'leidi/ 女士
mom /mɔm/ 妈妈
dad /dæd/ 爸爸
parents /'pɛərənts/ 父母
grandma /'grændmɑ:/ (外)祖母
grandmother /'grænd,mʌðə/(外)祖母
grandpa /'grændpɑ:/ (外)祖父
grandfather /'grænd,fɑ:ðə/(外)祖父
aunt /ɑ:nt/ 阿姨
cousin /'kʌzn/ 堂兄妹
son /sʌn/ 儿子
baby /'beibi/ 婴儿
kid /kid/小孩
classmate/'klɑ:smeit /同学
queen /'kwi:n/ 女
visitor /'vizitə/ 参观者
neighbour /'neibə / 邻居
principal /'prinsəpəl / 校长
pen pal / pen pæl / 笔友
tourist /'tu:rist / 旅行者
people /'pi:pl / 人物
robot /'rəubɔt / 机器人 六、 职业(job)
teacher /'ti:tʃə/ 教师
student /'stju:dənt/学生
doctor /'dɔktə/ 医生
nurse /nə:s/ 护士
driver /'draivə / 司机
farmer /'fɑ:mə/ 农民
singer /'siŋə/ 歌唱家
writer /'raitə/ 作家
artist /'ɑ:tist /画家
actor /'æktə/男演员
actress/'æktris/女演员 TV
reporter /ri'pɔ:tə/ 电视台记者
engineer /,endʒi'niə / 工程师
policeman / pə'li:smən /(男)警察
salesperson /'seilz,pə:sn / 销售员
cleaner /'kli:nə / 清洁工
baseball player/'beis,bɔ:l 'pleiə/棒球运动员
assistant / ə'sistənt / 售货员
breakfast /'brekfəst / 早餐
lunch /lʌntʃ/ 中餐
dinner /'dinə/ 晚餐
egg /eg/ 鸡蛋
rice /rais/ 米饭
cake /keik/ 蛋糕
bread /bred/ 面包
jam /dʒæm/ 果酱
biscuit /'biskit/ 饼干
sausage /'sɔ:sidʒ/ 香肠
sandwich /'sændwitʃ/ 三明治
dumplings /'dʌmpliŋ/ 饺子
French fries /frentʃ fraiz/ 薯条
meat /mi:t/ 肉
chicken /'tʃikin/ 鸡肉
mutton /'mʌtn/ 羊肉
beef /bi:f/ 牛肉
pork /pɔ:k/ 猪肉
fish /fiʃ/ 鱼
hamburger /'hæmbə:gə/ 汉堡
hot dog /hɔt dɔg/ 热狗
noodles /'nu:dl/ 面条
soup /su:p/ 汤
salad /'sæləd/ 沙拉
milk /milk/牛奶
water /'wɔ:tə/ 水
ice-cream /ais kri:m/ 冰淇淋
cola /'kəulə/ 可乐
juice /dʒu:s/ 果汁
tea /ti:/ 茶
coffee /'kɔfi/ 咖啡
fruit/fru:t/ 水果
apple /'æpl / 苹果
banana / bə'nɑ:nə / 香蕉
pear /pɛə / 梨
orange /'ɔ:rindʒ / 橙
watermelon /'wɔ:tə,melən / 西瓜
grape / greip / 葡萄
cherry/'tʃeri / 樱桃
lemon/ 'lemən / 柠檬
mango/ 'mæŋgəu /芒果
coconut/'kəukənʌt /椰子
peach /pi:tʃ/ 桃
strawberry / 'strɔ:bəri / 草莓
vegetable / 'vedʒitəbl / 蔬菜
eggplant / 'egplɑ:nt / 茄子
green beans / gri:n bi:ns / 青豆
tomato / tə'meitəu / 西红柿
potato / pə'teitəu / 土豆
cucumber / 'kju:kəmbə / 黄瓜
onion / 'ʌnjən / 洋葱
pea / pi:/ 豌豆
carrot / 'kærət / 胡萝卜
cabbage /'kæbidʒ / 卷心菜
pumpkin / 'pʌmpkin / 南瓜
sweet potato / swi:t pə'teitəu / 红薯
jacket /'dʒækit/ 夹克衫
shirt /ʃə:t/ 衬衫
T-shirt / / T恤衫
skirt /skə:t/ 短裙子
dress /dres/ 连衣裙
jeans /dʒi:nz/ 牛仔裤
pants /pænts/ /trousers /'trauzəz / 裤子
socks /sɔks/ 袜子
shoes /ʃu:z/ 鞋子
sweater /'swetə/ 毛衣
coat /kəut/ 外套
raincoat /'reinkəut/ 雨衣
shorts /ʃɔ:ts/ 短裤
sandals /'sændl/凉鞋
boots /bu:ts/ 靴子
hat /hæt/ 有边帽
cap /kæp/ 无边帽
tie /tai/ 领带
sunglasses /'sʌnglɑ:siz/太阳镜
scarf /skɑ:f/ 围巾
gloves /glʌvz/手套
bike /baik/ 自行车
bus /bʌs/ 公共汽车
train /trein/ 火车
boat /bəut/ 小船
ship /ʃip/ 轮船
yacht /jɔt/ 快艇
car /kɑ:/ 小汽车
taxi /'tæksi/出租车
jeep /dʒi:p/ 吉普车
van /væn/ 小货车
plane /plein/飞机
subway /'sʌbwei/地铁
motor cycle /'məutə 'saikl / 摩托车
window /'windəu/ 窗户
door /dɔ:/ 门
desk /desk/ 课桌
chair /tʃɛə/ 椅子
bed /bed/ 床
computer/kəm'pju:tə/计算机
board /bɔ:d/ 写字板
fan /fæn/ 风扇
light /lait/ 灯
mirror /'mirə/ 镜子
teacher’s desk / 'ti:tʃə desk/ 讲台
picture /'piktʃə/ 图画
photo /'fəutəu/ 照片
wall /wɔ:l/ 墙壁
floor /flɔ:/ 地板
football /'futbɔ:l/ 足球
present / 'preznt / /gift / gift / 礼物
walkman / 'wɔ:kmən / 随身听
lamp /læmp/ 台灯
phone /fəun/ 电话
sofa /'səufə/ 沙发
shelf /ʃelf/ 书架
fridge /fridʒ/ 冰箱
table /'teibl/ 桌子
air-conditioner /ɛə kən'diʃənə/ 空调
key /ki:/ 钥匙
lock /lɔk/ 锁
plate /pleit/ 盘子
knife /naif/ 刀
fork /fɔ:k/ 叉
spoon /spu:n/ 勺子
chopsticks /'tʃɔpstiks/ 筷子
pot /pɔt/ 锅
toy /tɔi/ 玩具
doll /dɔl/ 洋娃娃
ball /bɔ:l/ 球
balloon /bə'lu:n/ 气球
kite /kait/ 风筝
jigsaw puzzle /'dʒigsɔ: 'pʌzl/ 拼图游戏
box /bɔks/ 盒子
umbrella /ʌm'brelə/ 伞
zipper /'zipə/ 拉链
violin /,vaiə'lin/小提琴
nest /nest/ 鸟窝
hole /həul/ 洞
toothbrush /'tu:θbrʌʃ/ 牙刷
menu /'menju:/菜单
e-card /kɑ:d/电子卡片
e-mail /meil/电子邮件
money /'mʌni/ 钱
traffic light /'træfik lait/ 交通灯
medicine /'medisin/ 药
home /həum/ 家
room /ru:m/ 房间
bedroom /'bedrum/ 卧室
bathroom /'bæθrum/卫生间
living room / 'liviŋ ru:m / 起居室/客厅
kitchen /'kitʃin/ 厨房
classroom /'klɑ:srum/ 教室
school /sku:l/ 学校
park /pɑ:k/ 公园
library /'laibrəri/ 图书馆
post office /pəust 'ɔ:fis/ 邮政局
hospital /'hɔspitl/ 医院
cinema /'sinimə/ 电影院
bookstore /'bukstɔ:/ 书店
farm /fɑ:m/ 农场
zoo /zu:/ 动物园
garden /'gɑ:dn/ 花园
playground /'pleigraund/ 操场
canteen /kæn'ti:n/ 餐厅
teacher’s office /'ɔ:fis/ 教师办公室
gym /dʒim/ 体育馆
washroom /'wɔʃrum/ 盥洗室
art room /ɑ:t ru:m/ 美术室
computer room /kəm'pju:tə/ 电脑房
music room /'mju:zik/ 音乐教室
TV room / / 电视房
flat /flæt/ 公寓
company /'kʌmpəni/ 公司
factory /'fæktəri/ 工厂
pet shop /pet ʃɔp/ 宠物店
science museum/'saiəns mju:'ziəm/科学博物馆
the Great Wall /greit wɔ:l/ 长城
supermarket /'sju:pə,mɑ:kit/ 超市
bank /bæŋk/ 银行
country /'kʌntri/乡村
village /'vilidʒ/ 村庄
city /'siti/ 城市
cold /kəuld/ 冷的
hot /hɔt/ 热的
warm /wɔ:m/ 温暖的
cool /ku:l/ 凉爽的
snowy /snəui/下雪的
sunny /'sʌni/晴朗的
rainy /'reini/ 下雨
windy /'windi/ 刮风的
cloudy /'klaudi/ 多云的
weather report /'weðə ri'pɔ:t/ 天气预报
river /'rivə/ 河流
lake /leik/ 湖泊
stream /stri:m/ 小溪
forest /'fɔrist/ 森林
path /pɑ:θ/ 小路
road /rəud/马路
house /rəud/ 房子
bridge / bridʒ / 桥
building /'bildiŋ/建筑物
rain /rein/ 雨
cloud /klaud/ 云
sun /sʌn/ 太阳
mountain /'mauntin /大山
sky /skai/ 天空
rainbow /'reinbəu/ 彩虹
wind /waind/风
air /ɛə/ 空气
flower /'flauə/ 花
grass /grɑ:s/ 草
tree /tri:/树
seed /si:d/种子
leaf /li:f/树叶
plant /plɑ:nt/ 植物
rose /rəuz/ 玫瑰
Monday/'mʌndei/ 星期一
Tuesday/'tju:zdi/ 星期二
Wednesday/wenzdi/ 星期三
Thursday/'θə:zdi/ 星期四
Friday /'fraidi/ 星期五
Saturday/'sætədi/ 星期六
Sunday /'sʌndi/ 星期天
weekend/'wi:k'end/周末
January/'dʒænjueri/ 一月
February/'februəri/ 二月
March /mɑ:tʃ/ 三月
April /'eiprəl/ 四月
May /mei/ 五月
June /dʒu:n/ 六月
July /dʒu:'lai/ 七月
August /ɔ:'gʌst/ 八月
September /sep'tembə/ 九月
October /ɔk'təubə/ 十月
November /nəu'vembə/ 十一月
December /di'sembə/ 十二月
spring /spriŋ/ 春
summer /'sʌmə/ 夏
fall /fɔ:l/ 落,秋
autumn /'ɔ:təm/ 秋
winter/'wintə/ 冬
south /sauθ/ 南
north /nɔ:θ/ 北
east /i:st/ 东
west /west/ 西
left /left/ 左
right/rait/ 右
have a fever /'fi:və/ 发高烧
hurt /hə:t/ 疼痛
have a cold /kəuld/伤风
have a toothache /'tu:θei/牙疼
have a headache /'hedeik/头疼
have a sore throat /sɔ: θrəut/喉咙疼
have a stomachache/'stʌməkeik/胃痛
one / / 一
two / / 二
three / / 三
four / / 四
five / / 五
six / / 六
seven / / 七
eight / / 八
nine / / 九
ten / / 十
eleven / / 十一
twelve / / 十二
thirteen / / 十三
fourteen / / 十四
fifteen / / 十五
sixteen / / 十六
seventeen / / 十七
eighteen / / 十八
nineteen / / 十九
twenty / / 二十
thirty / / 三十
forty / / 四十
fifty / / 五十
sixty / / 六十
seventy / / 七十
eighty / / 八十
ninety / / 九十
hundred /'hʌndrəd/ 一百
first / / 第一
second / / 第二
third / / 第三
fourth / / 第四
fifth / / 第五
sixth / / 第六
seventh / / 第七
eighth / / 第八
ninth / / 第九
tenth / / 第十
eleventh / / 第十一
twelfth / / 第十二
big /big/ 大的
small /smɔ:/ 小的
long / lɔŋ/ 长的
tall /tɔ:l/ 高的
short /ʃɔ:t/ 短的
young /jʌŋ/ 年轻的
old /əuld/ 老的
strong /strɔŋ/ 强壮的
thin /θin/ 瘦的
active/'æktiv/积极的
quiet/'kwaiət/安静的
nice/nais /好的
kind/kaind/善良的
strict/strikt/严格的
smart/smɑ:t/聪明的
funny/'fʌni/滑稽的
sweet/swi:t/甜的
salty/'sɔ:lti /咸的
sour/'sauə/酸的
fresh/freʃ/新鲜
favourite/'feivəri t/最喜欢的
clean/kli:n/干净的
tired/'taiəd/累的
excited/ik'saitid/兴奋的
angry/'æŋgri/生气的
happy/'hæpi/高兴的
bored/bɔ:d/无聊的
sad/sæd/难过的
taller / / 更高的
shorter / / 更短的
stronger / / 更强壮的
older / / 更老的
younger / / 更年轻的
bigger / / 更大的
heavier / / 更重的
longer / / 更长的
thinner / / 更瘦的
smaller / / 更小的
good / / 好的
better / / 更好的
higher / / 更高的
fine/fain/好的
great/greit/棒的
heavy/'hevi/重的
new/nju:/新的
fat/fæt/胖的
right /rait/对的
hungry/'hʌŋgri/饿的
cute/kju:t/可爱的
little/'litl/小的
lovely/'lʌvli/可爱的
beautiful/'bju:təfəl/漂亮的
colourful/'kʌləful/五颜六色的
pretty/'priti/漂亮的
cheap/tʃi:p/便宜的
expensive/iks'pensiv/贵的
juicy/'dʒu:si/有汁的
healthy/'helθi/健康的
helpful/'helpfəl /有帮助的
high/hai/高的
easy/'i:zi/简单的
proud/praud/骄傲的
in / / 在……里面
on / / 在……上面
under/'ʌndə/在……下面
near /niə/在……附近
behind/bi'haind/在……后面
next to / / 在……旁边
over/'əuvə/悬在……上面
in front of/frʌnt/在……前面
I /ai/ 我
we/wi:/我们
you/ju:/你,你们
he/hi:/他
she/ʃi:/她
it/it/它
they/ðei/他们
my/mai/我的
our/'auə/我们的
your/juə/你的,你们的
his/hiz/他的
her/hə:/她的
play/plei/玩
swim/swim/游泳
skate/skeit/溜冰
fly/flai/飞
jump/dʒʌmp/跳
walk/wɔ:k/走
run/rʌn/跑
climb/klaim/爬
fight/fait/打架
swing/swiŋ/荡秋千
eat/i:t/吃
sleep/sli:p/睡觉
like/laik/喜欢
have/hæv/有
buy/bai/买
take/teik /拍(照),带
live/liv/居住
teach/ti:tʃ/教
go/gəu/去
study/'stʌdi/学习
learn/lə:n/学习
sing/siŋ/唱歌
dance/dɑ:ns/跳舞
row/rəu/划
read books / / 读书
do homework / / 做作业
watch TV /wɔtʃ/ 看电视
cook the meals /kuk mi:l/ 烧菜
water the flowers /'flauə/浇花
sweep the floor /swi:p flɔ:/拖地
clean the bedroom /kli:n 'bedrum/打扫房间
make the bed / / 铺床叠被
set the table /'teibl/摆餐桌
wash the clothes /wɔʃ kləuðz/洗衣服
wash the dishes /diʃ/洗盘子
use a computer /kəm'pju:tə/用电脑
do morning exercises /'mɔ:niŋ 'eksəsaiz/做早操
eat breakfast /i:t 'brekfəst/吃早餐
eat dinner /'dinə /吃晚饭
go to school / / 去上学
have English class / / 上英语课
play sports/plei spɔ:ts/体育运动
get up / / 起床
climb mountains/klaim 'mauntins/爬山
go shopping / / 去购物
play the piano /pi'ænəu/ 弹钢琴
visit grandparents /'vizit 'grænd,pɛərənt/拜访祖父母
go hiking /haik/ 去远足
fly kites /flai kaits/ 放风筝
make a snowman /meik ə 'snəu,mæn/堆雪人
plant trees /plɑ:nt tri:z/ 植树
draw pictures /drɔ: 'piktʃəz/画画
cook dinner /kuk 'dinə/烧晚饭
read a book / / 读书
answer the phone/'ɑ:nsə fəun /接电话
listen to music /'lisn 'mju:zik/听音乐
clean the room / / 打扫房间
write a letter /rait 'letə/ 写信
write an e-mail / / 写电子邮件
drink water /driŋk 'wɔ:tə/ 喝水
take pictures /teik 'piktʃə/ 拍照片
pick up leaves /pik ʌp li:vz/ 摘树叶
write a report /rait ri'pɔ:t/ 写报告
play chess /tʃes/ 下棋
have a picnic /'piknik/ 野餐
get to / / 到达
ride a bike /raid baik/ 骑自行车
play the violin /,vaiə'lin/ 拉小提琴
collect stamps /kə'lekt stæmp/ 集邮
meet/mi:t/ 遇见
welcome/'welkəm/ 欢迎
thank /θæŋk/ 谢谢
work /wə:k/ 工作
drink /driŋk/ 喝
taste /teist/ 尝
smell /smel/ 闻
feed /fi:d/ 喂
milk /milk/ 挤牛奶
look /luk/ 看
guess /ges/ 猜
help /help/ 帮助
pass/pɑ:s/ 传递
show/ʃəu/展示,给……看
use /ju:z/ 用
clean /kli:n/ 打扫
open/'əupən/ 打开
close /kləuz/ 关
put /put/ 放
read /ri:d/ 读,看
write /rait/ 写
paint /peint/ 画画
tell /tel/ 告诉
kick /kik/ 踢
ride /raid/ 骑
stop /stɔp/ 停
wait /weit/ 等
find /faind/ 找
drive /draiv/ 驾驶
fold /fəuld/ 折叠
send /send/送,寄
wash /wɔʃ/ 洗
shine/ʃain/照耀
become/bi'kʌm/变成
feel /fi:l/ 感觉
think /θiŋk/ 想
fall /fɔ:l/ 掉下
leave /li:v/ 离开
wake up/weik ʌp/醒过来
put on / / 穿上
take off / / 脱下
hang up /hæŋ ʌp/ 挂起来
wear /wɛə/ 穿
go home / / 回家
go to bed / / 去睡觉
play computer games /kəm'pju:tə geims/玩电脑游戏
play chess /tʃes/ 下棋
do housework /'hauswə:k/ 做家务
empty the trash/'empti træʃ/倒垃圾
put away the clothes /kləuð/放好衣服
get off / / 下车
take a trip/trip/去郊游
read a magazine /,mægə'zi:n/读杂志
go to the cinema /'sinimə/去电影院
what / / 什么
what colour / / 什么颜色
what time / / 几点
what day / / 星期几
how / / 怎样
how old / / 年龄多大、几岁
how many / / 多少
how much / / 多少钱
how tall / / 多高
how heavy / / 多重
how long / / 多长
how big / / 多大
how large /hau lɑ:dʒ/ 面积多
who/hu:/ 谁
when/hwen/什么时候
whose/hu:z/ 谁的
where/hwɛə/在哪里
why/hwai/为什么
which /hwitʃ/ 哪一个

发表在 python | 留下评论

机器学习_逻辑回归_海龟画图

import math
import random
import turtle

def g(x1,x2):
return x1*x1 + x2*x2 – 100

def signoid(x1,x2):
a = 1 + pow(math.e,-g(x1,x2))
return 1/a

turtle.speed(0);turtle.delay(0)
turtle.fd(300);turtle.stamp();turtle.bk(600);turtle.fd(300);turtle.left(90)
turtle.fd(300);turtle.stamp();turtle.bk(600);turtle.fd(300);turtle.rt(90)

for i in range(500):
x1 = random.randint(-30,30)
x2 = random.randint(-30,30)
print(signoid(x1,x2))

由于中国自动化学会人工智能青少年素养评测需要学习人工智能知识,所以本人目前在补习这方面的知识.博客没有更新,今天特来更个新。当学到逻辑回归时,出现了signoid函数,于是我就写了个Python程序。这个程序的运行结果要不是1,要不是0。表示了分成两类的一个关系。

发表在 python, turtle | 留下评论

Python几何宝典目录_原创Python数学几何案例集

01_rotatemode旋转模式 02_addx和addy 03_scale比例缩放
04_gotorandom到随机位置 05_show和hide 06_move移动
07_collide矩形碰撞检测 08_collidemouse碰到鼠标指针 09_collide_edge碰到边缘
10_bounce_on_edge碰到边缘就反弹 11_bbox获取绑定盒 12_randomcolor随机颜色
13_randomheading随机方向 14_remove移除自己 15_stamp图章系列命令
16_play播放 17_setalpha和getalpha设置透明度 18_set_tag设置与get_tag得到标签
19_say说话系列 20_write写字命令 21_reborn重生命令
22_nextcostume下一个造型命令 23_角色的update命令 24_slide滑行命令
25_draw_grid命令 26_draw_grid2命令 27_draw_grid3命令
28_stampslide图章滑行命令 29_hidestamp和showstamp 30_stampishide图章是否隐藏命令
31_wander漫游命令 32_ishide命令 33_write2命令
34_find_overlapping查找重叠命令 35_overlap_with和某某重叠命令 36_到角落命令
37_arc画弧命令 38_polygon画多边形命令 39_contained所有包括的项目
40_contain是否完全包括某项目 41_getleft得到最左x坐标 42_gettop得到最顶y坐标
43_down是否按下检测 44_downup按下并松开 45_pixelcollide像素级碰撞检测
46_draggable设置角色为可拖放 47_saveshape保存造型为图片 48_coloroverlap颜色重叠检测命令
49_collidecolor碰到颜色命令 50_resizable命令 51_onmousemove命令
52_onscreenrelease命令 53_屏幕的move命令 54_屏幕的setx和sety及xcor与ycor
55_屏幕的save截屏命令 56_addpopup绑定右键菜单 57_右键菜单增加删除修改
58_获取先前鼠标指针 59_explode爆炸函数 60_txt2image文本转图像函数
61_txt3image多行文本转图像 62_按键检测Key与Mouse 63_Group分组与标签
64_Clock时钟类 65_对话框示例 66_collide_others碰到其它命令
67_find_overlapping_sprites 68_获取单击处坐标 69_stamponclick图章单击事件
70_find_in_square与爆炸效果举例 71_非紧急重要提醒(sayfontstyle) 72_askshape查询内置图片
73_rotate_points基本演示 74_rotate_points演示旋转多边形 75_rotate_points万类霜天竞自由
76_赵爽弦图动画 77_滚动正多边形 78_move_points平移
79_三角形拼平行四边形演示 80_内角和180度演示 81_scale_points基本演示_缩放的三角形
82_正弦与rotate_points演示 83_碰到线条就中止示例 84_线上取点
85_直线相交动画演示 86_直线与圆相交动画演示 87_圆与圆关系演示动画
88_中心对称演示 89_轴对称动画演示 90_位似演示
91_垂线 92_角平分线 93_中垂线与外心
94_平行线 95_反演 96_圆上的切线
97_圆外的切线 98_按钮标签与轴对称演示 99_等分圆交互动画Spinbox
100_翻转三角 101_最短距离 102_三线合一动画
103_画个多边形变图像输出 104_勾股拼图游戏 105_内角和180演示
106_矩形折叠演示 107_多边形重叠判断区域与滑块演示 108_发射与文本框参数设定(抛物演示)
109_活塞运动 110_简谐运动(正弦) 111_物理弹球受阻轨迹动画
112_玩转线段之中点 113_玩转三角形之重心 114_玩转三角形之内心
115_玩转三角形之外心 116_玩转三角心之垂心 117_动点到准线与焦点等距的秘密
118_散光到平行光 119_到两定点距离之和为常数的秘密 120_椭圆的光反射性质
121_滑块之双曲 122_完全平方公式拼图游戏 123_渐渐躺平的矩形
124_迭代方螺旋 125_path2points命令面积演绎 126_矩形罩三角
127_爬坡小正方 128_迭代十字架 129_根号扇子
130_可调速的风扇 131_“倒下”物理模拟 132_反比例函数课件
133_二次函数课件 134_滚动的半圆 135_折纸动画
136_正方形渐开线 137_渐开线生成动画 138_任意拖动的三角形(ondraghook用法)
139_选择题目圆与方(ondraghook用法) 140_犹抱琵琶半遮面 141_下一步是什么笑话?
142_顶点互联交互动画 143_棋盘 144_RGB调色盘
145_分数的意义课件 146_无理数的迭代 147_真正的摩天轮
148_谁是幸运儿 149_动点之谜 150_割补法动态演示
151_随机选号 152_我为人人人人为我 153_加法出题器
154_角的分类课件动画 155_投针实验 156_被限制的拖曳
157_扫圆交互程序 158_被困牢笼(drag_last_xy) 159_手写录制与回放(up与isup)
160_谁是傀儡(细观区别) 161_三角割补为平行四边形演示 162_几何D到O最大距离constrain应用
163_菱形内点左右拖 164_经典Rt三角形内面积最大交互 165_联动画圆
166_什么时候最短? 167_黄金分割做法交互演示 168_正弦定理证明交互图
169_多边形内产生点 170_外接圆 171_内切圆
172_intersection大全 173_三线八角交互 174_女孩钓鱼与正弦
175_产生随机矩形图像 176_透明之图拖曳缩放与平方根演示 177_透明矩形叠三角形目测面积
178_单击建点与吸附 179_光圈演绎 180_瓜豆原理
181_十字架变2正方形 182_目录浏览器 183_深入查找器_Listbox
184_直线的倾斜角(动态) 185_向量合成 186_平方差演示课件
187_认识直径演示 188_狗绕五边形 189_与pymunk物理引擎之弹球
190_可拖曳的三角形 191_极坐标与直角坐标演示 192_如何算极坐标
193_极坐标与心形图动画 194_蝴蝶曲线与极坐标曲线大集合 195_floodfill算法演示
196_框选交互 197_限定在圆上的点(圆周角与圆心角) 198_古今生肖拖轴演示
199_平方数交互动画 200_弧度学习演示动画 201_单位圆三角函数看值
202_点填之fill命令 203_填充新法 204_线条画板
205_彩虹三角 206_垂线斜率关系交互 207_弦的中点轨迹
208_draw_circle示例 209_半圆与商高定理 210_梯子轨迹问题
211_反转算法演示 212_简易DFS算法演示 213_找最大值算法演示
214_二分查找算法演示 215_选择排序算法演示 216_dfs迷宫寻路演示
217_将军饮马动图 218_圆内的点 219_正弦定理面积公式交互图
220_双绝对值函数动态演示 221_双滑杆与两圆相交互 222_小汽车的旅行
223_固定周长矩形面积啥时最大 224_斜线上的动点 225_动点平移与面积关系动图
226_橘红面积最大时A坐标交互 227_算圆周率的交互 228_角谷猜想交互动图
229_平行四边形与内三角形面积关系交互 230_正方形45度趣味折叠 231_影射定理交互动图
232_玩转2次函数三参数 233_与两平行线等距轨迹 234_函数缩半交互课件
235_光芒之星交互动图 236_方格线条RGB动图 237_直角三角形两边半圆弓形与相交面积
238_直径上动点到弧上M到B间垂线段探究 239_水面匀速上升模拟 240_三角形内角和折叠法演示
241_弦上动点与弦下定点之直线与圆相交 242_限制在抛物线上的动点 243_三角形内拖正方形演示
244_正方形内动点直角演示 245_滚切线动画 246_任意键,右键,建矩形角色
247_又一个勾股拼图游戏 248_半圆点对称弧与直径相交动图 249_小圆在大圆里滚
250_弦心距动图 251_偶函数与奇函数体验 252_45度圆周角与三角形面积何时最大
253_B点圆切线红虚线交互圆 254_梯形直角边上动点观察全等三角形 255_两个正三角形顶点中点轨迹
256_圆上正三角形中心轨迹 257_可能的角度是? 258_圆周率的可视化图
259_分段拖曳证明演示 260_司乃耳定律演示 261_子健的故事书
262_水果与竖立的滑杆 263_分蛋糕交互(分数演示课件) 264_约分演示课件
265_斜率交互演示 266_与两直线等距点轨迹 267_矩形与三角形面积关系交互
268_堆垛交互 269_翻转三角形变平行四边形 270_扇形面积占比交互
271_曲柄滑块交互 272_拼出最小数游戏 273_动态画面积交互
274_百分比学习交互课件 275_拖曳圆上Q点观察P点轨迹 276_外公切线交互动图
277_指数函数的上下平移交互 278_月亮的轨迹 279_贝塞尔线条艺术
280_高尔顿钉板实验 281_交互发射愤怒的小鸟 282_谁更大交互游戏
283_飞碟算术竞赛游戏 284_坐标训练游戏 285_弹弓游戏
286_平方数字炸弹 287_marcle标角 288_掘金游戏
289_角内中点反向找线段 290_超级玛丽闯球关 291_儿童数字识游戏
292_梯形面积交互课件 293_弦平分线交互 294_有吸力的点
295_新线产生器 296_有趣的眼珠 297_摩天轮的交互
298_抓住那正确的描述! 299_钻石算术游戏 300_等面积求高证明过程
301_一个正方形内求面积的辅助线演示 302_割圆术交互

以下是里面的几个例子









发表在 python, sprites | 留下评论

二分法求算术平方根

二分法求任意数的平方根源代码

def sqrt(a):
“””本函数求a的算术平方根”””
left = 0
right = a
while True:
x = (left+right)/2
if x*x>a: # 如果x的平方比a还要大,说明right值大了
right = x
elif x**2

发表在 python | 留下评论

python精灵模块角色的洪水填充fill命令用法举例画彩色五角星

Python精灵模块画彩色五角星海龟洪水填充命令用法


下面的程序从sprites模块导入Sprite类和Screen命令,前者用于新建角色,后者用于新建窗口,还从gameturtle模块中导入了makegif和makevideo命令,前者用于把frames中的每一帧合成gif动画,后者则把frames中的所有帧压成mp4视频。最新版gameturtle模块中包括了makevideo命令,需要用pip install gameturtle –upgrade来安装gameturtle模块的最新版本。

from sprites import Sprite,Screen
from gameturtle import makegif,makevideo   # pip install gameturtle --upgrade

screen = Screen()
screen.setup(480,360)
screen.onmousemove(lambda x,y:screen.title(f"{x},{y}"))
 
bug = Sprite()
bug.pendown()
bug.pensize(5)
frames =[]
for i in range(5):
    bug.fd(200);frames.append(screen.save())
    bug.right(144);frames.append(screen.save())
bug.penup()
bug.hide()
frames.append(screen.save())         # 屏幕截取到frames列表中

cs = ['red','orange','yellow','green','cyan','blue']
cors = [(47,-16),(100,25),(153,-16),(133,-78),(63,-78),(96,-34)]
for fc,xy in zip(cs,cors):        
    bug.fillcolor(fc) # 设定填充颜色
    bug.goto(xy)      # 到达xy坐标
    bug.fill()        # 填充区域,默认采用洪水填充方式 
    frames.append(screen.save())

makegif(frames,'生成的gif.gif')          # 生成动图
makevideo(frames,'生成的video.mp4')      # 生成mp4视频

screen.mainloop()

发表在 gameturtle, python, sprites | 留下评论

Python turtle绘制作的三狗看世界源代码

Python海龟绘图三狗看世界最终效果


三只小狗被关在门内,门坏了有一个洞,它们一起探出头来看外面的世界。
外面的世界多精彩啊,不知道主人什么时候会回来。

这是用Python的海龟模块绘制一个三狗看世界的源代码。
由于进行了抽象分析,所以并不是逐像素绘制,
分辨率没有那么高哦,具体见下面的gif图形,有着类似水彩画的效果。

ython的海龟模块绘制一个三狗看世界

以下是部分代码,需要完整代码请联系本人微信scratch8。

import sys
import time
import turtle

def make_rnd_string():
    digits = str(time.time())[-1:-4:-1]
    name = time.strftime("%Y_%m_%d-%H.%M.%S")+ digits
    return name

def draw_poly(downflag,iid,fill_flag,fc,pc,pz,points,scale=1):
    '''根据参数画多边形,downflag落笔标志
      iid: 编号,没有则是空, fill_flag:填充标志, fc:填充颜色,
      pc:画笔颜色,pz:画笔线宽,points_坐标序列'''  
    turtle.pencolor(pc)
    turtle.pensize(pz)
    turtle.penup()
    x ,y = points[0]
    turtle.goto(scale*x,scale*y)
    if downflag:turtle.pendown()  # 如果落笔标志为真,则落笔
    if fill_flag:
        turtle.fillcolor(fc)
        turtle.begin_fill()
    for x,y in points[1:]:
        turtle.goto(scale*x,scale*y)
    if fill_flag:
        turtle.end_fill()
    turtle.penup()

turtle.speed(0)
turtle.delay(0)
turtle.hideturtle()
turtle.title(sys.argv[0])
screen = turtle.getscreen()
root = screen._root
scrwidth = root.winfo_screenwidth()
scrheight = root.winfo_screenheight()
screen.setup(scrwidth//2,scrheight - 50)

...........................................
发表在 python, turtle | 留下评论

Python海龟借用sprites的fill命令绘制洪水填充封闭区域源代码

Python洪水填充画封闭图形填充演示by李兴球

import random
import turtle
from sprites import fill,Key,Mouse,mouse_pos

ysb = ['red','orange','yellow','green','cyan',
       'blue','purple','pink','brown','lime']

screen = turtle.Screen()    
screen.xy_grid()
screen.setup(480,720)
turtle.shape('blank')
turtle.hideturtle()
turtle.goto(0,100)
turtle.pd()
turtle.pensize(2)
turtle.circle(100)    
turtle.penup()
fill(50,150,mode=0)      # 在(50,150)坐标开始填充,模式为2
fill(-50,150,fillcolor='red',mode=2)      # 在(50,150)坐标开始填充,模式为2
fill(50,250,fillcolor='blue',mode=2)      # 在(50,150)坐标开始填充,模式为2
fill(-50,250,fillcolor='green',mode=2)      # 在(50,150)坐标开始填充,模式为2
ft = ('黑体',14,'normal')
s = '请画封闭图形,然后单击右键填充'
turtle.home();turtle.write(s,align='center',font=ft)

spacekey = Key('space')           # 实例化空格键
leftkey = Mouse()                 # 实例化鼠标左键
rightkey = Mouse(3)               # 实例化鼠标右键
turtle.ht()                       # 隐藏海龟
turtle.pensize(4)
turtle.pencolor('red')
screen.listen()                   # 监听按键检测
screen.colormode(255)
while True:
    turtle.goto(mouse_pos())
    if spacekey.isdownup():         # 如果按空格键,更换画笔颜色
        turtle.pencolor(random.choice(ysb))
    if leftkey.down():              # 如果单击左键,则落笔 
        turtle.pendown()
    else:
        turtle.penup()              # 否则抬笔
    if rightkey.isdownup():         # 如果单击右键并松开,则填充
        fx,fy = rightkey.pos
        r  = random.randint(0,255)
        g  = random.randint(0,255)
        b  = random.randint(0,255)
        fill(fx,fy,fillcolor=(r,g,b),mode=2) # 默认模式为2,共有0,1,2共有3种模式,请自行尝试
        
    screen.update()

发表在 python, sprites, turtle | 留下评论

python海龟填充新法之fill命令示例1

本程序需要最新版本sprites模块支持。安装方法: pip install sprites –upgrade

"""
   fill new method.py
   This is a example, demo fill  new method.
"""
from sprites import Sprite

turtle = Sprite('blank',visible=False)
screen = turtle.getscreen()
screen.delay(10)
# 设定鼠标移动事件,在标题栏显示鼠标指针坐标
screen.onmousemove(lambda x,y:screen.title(str(x)+"," + str(y)))

turtle.speed(1)
turtle.goto(0,200)
turtle.pensize(4)
turtle.pd()
for i in range(3):
    turtle.fd(30)
    turtle.right(120)
    turtle.fd(30)
    turtle.left(120)
turtle.circle(-10,180)
turtle.right(45)
turtle.fd(130)
turtle.goto(0,200)
turtle.fillcolor('pink')   # 设定填充颜色
turtle.penup()             #  remember penup (起新的线条项目)
turtle.fill(3,171,mode=2)  # mode为2会调用洪水填充函数

# 下面画个残缺圆进行填充
turtle.goto(-100,100)
turtle.pendown()
turtle.circle(-50,90)
turtle.circle(50,90)
turtle.circle(100,180)
turtle.circle(100,90)
turtle.fillcolor('cyan')
turtle.penup()            # remember penup 画完后要抬笔
turtle.fill(-150,200,mode=2)

# 空心十字架
turtle.pu();turtle.home();turtle.pd()
for  i in range(4):
    turtle.fd(50);turtle.left(90);turtle.fd(50)
    turtle.right(90);turtle.fd(50);turtle.right(90)
turtle.penup()
turtle.fillcolor('light green')
turtle.fill(10,-10)   # 不写第三个参数表示填充凸多边形

# 不规则图形
turtle.goto(-130,-130)
turtle.pd()
turtle.goto(-130,0)
turtle.goto(-230,-190)
turtle.goto(130,-200)
turtle.goto(-230,00)
turtle.penup()       # remember penup 
turtle.fillcolor('red')
turtle.fill(-137,-26)

# 凹
turtle.goto(150,-100);turtle.pd()
turtle.fd(50);turtle.right(90);turtle.fd(50);turtle.left(90);turtle.fd(50);turtle.left(90)
turtle.fd(50);turtle.right(90);turtle.fd(50);turtle.right(90);turtle.fd(100);turtle.right(90)
turtle.fd(150);turtle.right(90);turtle.fd(100);turtle.penup()
turtle.fillcolor('gray')
turtle.fill(200,-170)

# ☆
turtle.goto(200,200);turtle.pd()
for i in range(5):
    turtle.fd(50)
    turtle.left(144)
turtle.penup()          # remember penup 
turtle.fillcolor('magenta')
turtle.fill(195,237)
turtle.fillcolor('red')
turtle.fill(204,225)
turtle.fillcolor('blue')
turtle.fill(197,210)
turtle.fillcolor('green')
turtle.fill(182,218)
turtle.fillcolor('orange')
turtle.fill(183,231)
turtle.fillcolor('lime')
turtle.fill(194,223,mode=1)

screen.mainloop()

发表在 python, sprites | 留下评论

Python海龟画图每步截屏合成gif源代码

import turtle
from PIL import Image,ImageTk

def save():    
    left = screen._root.winfo_rootx()
    top = screen._root.winfo_rooty()
    width = screen.window_width()
    height = screen.window_height()
    box = (left,top,left+width,top+height)
    im = ImageGrab.grab(box)
    return im

screen = turtle.getscreen()
screen.setup(480,360)
screen.delay(0)
turtle.speed(0)
frames = []
for i in range(4):
    frame = save()
    frames.append(frame)
    turtle.fd(100)
    frame = save()
    frames.append(frame)
    turtle.right(90)
# frames形成后,可以保存到gif了 frames[0].save()即可
zx = [turtle.Shape('image',ImageTK.PhotoImage(im)) for im in frames]

screen.mainloop()
发表在 python, turtle | 标签为 , | 留下评论

描点画图的五星红旗程序

描点画图五星红旗Python程序

描点画图五星红旗Python程序

import random
import turtle

turtle.ht()
turtle.setup(1024,800)
turtle.title('画这图.jpg')
turtle.colormode(255)
turtle.speed(0)
turtle.delay(0)
turtle.pensize(3)

all_xy = []
xy_0 =  [(-395, -287), (242, -279), (230, 275), (-393, 264), (-395, -287), (157, 189, 227)]
xy_1 =  [(-106, 103), (-107, -119), (158, -119), (152, 106), (-106, 103), (157, 189, 227)]
xy_2 =  [(-85, -117), (-84, 134), (109, 135), (110, 112), (113, -118), (-85, -117), (157, 189, 227)]
xy_3 =  [(-28, -77), (-29, 103), (-51, 102), (-50, -102), (-28, -77), (9, 46, 91)]
xy_4 =  [(66, -81), (66, 106), (91, 105), (90, -103), (66, -81), (9, 46, 91)]
xy_5 =  [(-15, -30), (48, -30), (49, -38), (-18, -39), (-15, -30), (157, 170, 186)]
xy_6 =  [(-10, -39), (-9, -67), (-3, -67), (-2, -39), (-10, -39), (157, 170, 186)]
xy_7 =  [(38, -40), (39, -67), (46, -67), (47, -39), (38, -40), (157, 170, 186)]
xy_8 =  [(-21, -69), (-60, -117), (107, -119), (54, -68), (-21, -69), (133, 155, 186)]
xy_9 =  [(-25, -81), (56, -80), '']
xy_10 =  [(47, -90), (-21, -90), '']
xy_11 =  [(1, -105), (88, -104), '']
xy_12 =  [(-80, 127), (108, 129), '']
xy_13 =  [(-70, 103), (-69, -116), '']
xy_14 =  [(-40, -88), (-39, 78), '']
xy_15 =  [(1, -24), (0, 105), '']
xy_16 =  [(25, -29), (26, 106), '']
xy_17 =  [(47, -29), (46, 107), '']
xy_18 =  [(107, -46), (107, 76), '']
xy_19 =  [(81, -73), (80, 78), '']
xy_20 =  [(-89, 120), (-112, 159), '']
xy_21 =  [(110, 114), (134, 163), '']
xy_22 =  [(-112, 160), (135, 161), (110, 135), (-83, 135), (-112, 160), (77, 102, 122)]
xy_23 =  [(-86, 151), (-68, 150), (-68, 142), (-79, 141), (-86, 151), (11, 32, 79)]
xy_24 =  [(-54, 150), (-36, 150), (-36, 142), (-54, 142), (-54, 150), (11, 32, 79)]
xy_25 =  [(-23, 150), (-8, 150), (-8, 142), (-24, 142), (-23, 150), (11, 32, 79)]
xy_26 =  [(6, 153), (25, 153), (26, 141), (5, 142), (6, 153), (11, 32, 79)]
xy_27 =  [(39, 152), (52, 151), (51, 141), (39, 142), (39, 152), (11, 32, 79)]
xy_28 =  [(64, 151), (77, 151), (77, 144), (64, 143), (64, 151), (11, 32, 79)]
xy_29 =  [(92, 149), (111, 150), (103, 141), (92, 140), (92, 149), (11, 32, 79)]
xy_30 =  [(-393, 96), (-364, 69), (-363, -47), '']
xy_31 =  [(-236, 77), (-166, 78), (-151, 65), (-151, -120), '']
xy_32 =  [(-166, 78), (-166, -121), '']
xy_33 =  [(-236, 76), (-236, 58), '']
xy_34 =  [(-372, 54), (-199, 57), (-179, 35), (-179, -120), '']
xy_35 =  [(-364, -7), (-221, -5), (-223, -62), (-296, -61), '']
xy_36 =  [(-198, 58), (-197, -119), '']
xy_37 =  [(-209, -3), (-196, -2), (-181, -15), '']
xy_38 =  [(-209, -62), (-198, -61), (-180, -71), '']
xy_39 =  [(-180, 35), (-166, 35), (-151, 28), '']
xy_40 =  [(-176, 1), (-167, 3), (-151, -3), '']
xy_41 =  [(-178, -35), (-166, -37), (-152, -45), '']
xy_42 =  [(-179, -79), (-166, -79), (-151, -89), '']
xy_43 =  [(-343, 39), (-324, 39), (-325, 11), (-343, 11), (-343, 39), (11, 32, 79)]
xy_44 =  [(-307, 39), (-260, 39), (-259, 15), (-308, 15), (-307, 39), (11, 32, 79)]
xy_45 =  [(-246, 42), (-231, 39), (-233, 12), (-253, 12), (-246, 42), (11, 32, 79)]
xy_46 =  [(-344, -21), (-281, -21), (-282, -50), (-344, -50), (-344, -21), (11, 32, 79)]
xy_47 =  [(-265, -49), (-233, -48), (-234, -22), (-266, -24), (-265, -49), (11, 32, 79)]
xy_48 =  [(234, 84), (203, 84), (180, 67), (185, -54), '']
xy_49 =  [(203, 82), (206, -49), '']
xy_50 =  [(234, 57), (217, 44), (220, -51), '']
xy_51 =  [(220, 0), (236, 13), '']
xy_52 =  [(222, -53), (237, -39), '']
xy_53 =  [(203, 55), (183, 38), '']
xy_54 =  [(203, 28), (184, 12), '']
xy_55 =  [(219, -19), (206, -19), (185, -35), '']
xy_56 =  [(-224, -221), (-223, 238), (-216, 237), (-210, 240), (-210, -221), (-224, -221), (150, 162, 160)]
xy_57 =  [(-208, 241), (-196, 233), (-182, 227), (-172, 228), (-165, 230), (-158, 235), (-147, 239), (-132, 240), (-121, 240), (-111, 238), (-101, 233), (-98, 229), (-97, 167), (-111, 175), (-123, 176), (-134, 176), (-149, 170), (-159, 164), (-170, 160), (-183, 159), (-194, 159), (-203, 165), (-209, 167), (-208, 241), (255, 0, 0)]
xy_58 =  [(-224, 240), (-228, 249), (-227, 255), (-218, 258), (-210, 257), (-206, 253), (-205, 246), (-209, 242), (-215, 239), (-224, 240), (12, 5, 250)]
xy_59 =  [(87, -202), (161, -199), (165, -218), (88, -217), (87, -202), (255, 255, 255)]
xy_60 =  [(-260, -224), (-173, -222), (-172, -242), (-154, -243), (-136, -283), (-307, -285), (-278, -240), (-282, -247), (-260, -247), (-260, -224), (255, 255, 255)]
xy_61 =  [(-283, -244), (-157, -242), '']
xy_62 =  [(120, -196), (121, -95), (133, -95), (134, -199), (120, -196), (128, 0, 0)]
xy_63 =  [(239, -165), (135, -133), (115, -124), (98, -124), (90, -114), (86, -110), (77, -105), (71, -95), (69, -87), (71, -80), (74, -73), (84, -68), (86, -64), (86, -57), (89, -48), (102, -44), (112, -43), (120, -31), (136, -28), (146, -34), (147, -44), (148, -44), (160, -46), (167, -50), (172, -60), (166, -71), (163, -80), (179, -79), (179, -96), (168, -106), (161, -114), (154, -125), (135, -127), (135, -131), (239, -165), (0, 128, 0)]
xy_64 =  [(167, -49), (183, -61), (187, -50), (204, -46), (221, -52), (221, -59), (231, -65), (238, -70), (240, -164), (135, -133), (134, -126), (148, -124), (152, -124), (155, -119), (158, -114), (164, -109), (166, -105), (170, -102), (173, -99), (177, -97), (178, -90), (178, -79), (167, -79), (163, -79), (164, -73), (166, -69), (170, -62), (171, -58), (167, -49), (0, 128, 0)]
xy_65 =  [(-393, -173), (-393, -90), (-386, -83), (-378, -78), (-372, -78), (-366, -82), (-364, -71), (-360, -64), (-355, -60), (-349, -58), (-342, -58), (-332, -60), (-331, -63), (-329, -68), (-322, -61), (-311, -61), (-302, -61), (-293, -63), (-286, -69), (-284, -73), (-293, -82), (-280, -78), (-266, -81), (-260, -91), (-254, -99), (-251, -104), (-259, -93), (-248, -91), (-243, -93), (-233, -98), (-226, -106), (-224, -112), (-224, -117), (-393, -173), (0, 128, 0)]
xy_66 =  [(-360, -119), (-349, -97), (-330, -94), (-319, -100), (-305, -100), (-289, -110), '']
xy_67 =  [(-271, -77), (-234, -79), (-228, -80), (-228, -99), '']
xy_68 =  [(-394, -199), (-330, -154), '']
xy_69 =  [(-394, -255), (-283, -148), '']
xy_70 =  [(20, -278), (-98, -123), '']
xy_71 =  [(115, -277), (-68, -134), '']
xy_72 =  [(187, -92), (197, -80), (204, -76), (216, -77), (227, -87), (228, -93), '']
xy_73 =  [(206, -101), (209, -93), (215, -91), (220, -91), (227, -97), (230, -100), (235, -107), (237, -111), '']
xy_74 =  [(-210, -121), (155, -118), '']
xy_75 =  [(-228, -104), (-252, -104), '']
xy_76 =  [(-33, 109), (68, 107), (67, 125), (-31, 127), (-33, 109), (0, 64, 64)]

for i in range(77):
   all_xy.append(eval('xy_' + str(i)))

k = 1
for cors in all_xy:
    turtle.penup()
    x,y = cors[0]
    turtle.goto(x/k,y/k)
    turtle.pendown()
    if cors[-1]!='':
       turtle.fillcolor(cors[-1])
       turtle.begin_fill()
    for x,y in cors[1:-1]:
        turtle.goto(x/k,y/k)
    if cors[-1]!='':    
       turtle.end_fill()

turtle.color('yellow')
turtle.st()
turtle.penup()
turtle.goto(-190,210)
turtle.begin_fill()
for _ in range(5):
   turtle.fd(30)
   turtle.rt(144)
turtle.end_fill()


turtle.goto(-165,225)
turtle.begin_fill()
for _ in range(5):
   turtle.fd(10)
   turtle.rt(144)
turtle.end_fill()


turtle.goto(-150,210)
turtle.begin_fill()
for _ in range(5):
   turtle.fd(10)
   turtle.rt(144)
turtle.end_fill()

turtle.goto(-150,195)
turtle.begin_fill()
for _ in range(5):
   turtle.fd(10)
   turtle.rt(144)
turtle.end_fill()

turtle.goto(-160,185)
turtle.begin_fill()
for _ in range(5):
   turtle.fd(10)
   turtle.rt(144)
turtle.end_fill()

turtle.ht()
turtle.done()
发表在 python, turtle | 标签为 | 留下评论

turtle添加png图造型到形状字典封装的函数by李兴球

在python turtle中只能添加gif图为海龟造型吗?自己查看一下turtle.py你就能明白为什么了,下面的代码,懂的人拿去用。我已经用了很多年了。

def appendshape(self,image,name=None):
    """
       添加造型到形状字典(支持png图)
       self: screen对象
       name:给造型取的名字
       image:图像文件名
    """
    sp = Shape('image',screen._image(image)) # from turtle import Shape,注意是大写S
    # 如果名字为空,则以图像文件名为造型名称
    if name==None:             
        self.register_shape(image,sp)
    else:
        self.register_shape(name,sp)
发表在 python, turtle | 标签为 | 留下评论

绕pai的数字合成gif图by李兴球Python创意编程

绕pai的数字合成gif图by李兴球Python创意编程

绕pai的数字合成gif图by李兴球Python创意编程

"""
  绕pai的数字合成gif图.py
"""
from sprites import Screen,Sprite

pai = '3.14159265358979323846264338327950288 '

screen = Screen()
screen.bgcolor('black')
screen.setup(600,600)

t = Sprite('blank')
t.color('cyan')

radius = 200
frames = []
t.bk(radius);t.left(90)
ft = ('宋体',38,'normal')
for i in range(len(pai)):
    t.write(pai[i],angle=90-i * 360/len(pai),font=ft)
    t.circle(-radius,360/len(pai))
    frames.append(screen.save())
    t.wait(0.1)
#for index,frame in enumerate(frames):
#    frame.save(f'绕pai/{index}.png')

# 合成为gif图形
filename = '绕pai.gif'
pic = frames[0]
pic.save(filename, save_all=True,append_images=frames[1:],
        optimize=True,quality=80,duration=200,loop=True)
screen.mainloop()

发表在 python, sprites | 标签为 | 留下评论

测试图片长高上面加文字.py

本程序会把图片增高,并且在上面加上文字。


from PIL import Image,ImageTk,ImageDraw,ImageFont

def add_name(im,name):
    """im:pillow图形对象,name:字符串,本函数会在图像上面增加名字"""
    width,height = im.size
    hat = Image.new("RGBA",size=(width,50))
    fnt = ImageFont.truetype('simkai.ttf',22)
    d = ImageDraw.Draw(hat)
    d.multiline_text((width//2,0),name,font=fnt,fill=(0,0,255))
    
    new = Image.new("RGBA",size=(width,50+height))
    box = (0,0,width-1,49)
    new.paste(hat,(0,0))
    new.paste(im,(0,50))
    return new


im = Image.open('印度经典电影.png')
im2 = add_name(im,'图片增高')
im2.save('test.png')

发表在 pillow, python | 留下评论

做scratch作品的一个Python辅助程序


3月份太忙,要做的事情非常多,所以博客也没什么更新,其实我做了非常多的作品.这里一个程序贴上来,本程序用到了sprites模块中的Screen.它能截窗口为pillow图形对象或者直接保存在磁盘中的一个文件,然后就可以做成gif了.

import time
import turtle
import numpy as np
from PIL import Image
from sprites import Screen
    
s = '阳江十八子谢谢你,世界瓷都景德镇欢迎你,菠萝的海徐闻招待你。'
index = [0,1,13,14,15,24,25]
print(len(s))

screen = Screen()
screen.setup(500,500)

radius = 150
turtle.ht()
ft = ('',18,'normal')
turtle.bk(radius)
turtle.left(90)
frames = []
for i in range(len(s)):
    turtle.circle(-radius,360/len(s))
    if i in index:
        turtle.color('red')
    else:
        turtle.color('black')
    turtle.write(s[i],align='center',font=ft)
    time.sleep(0.1)
    im = screen.save().convert("RGBA") # 转换为RGBA模式
    frames.append(im)  # f'frames/{i}.png'   

print(frames)
screen.mainloop()


发表在 python, sprites, turtle | 留下评论

一个海龟作品的辅程序

from sprites import *

def _flash(self):
    if not hasattr(self,'times'):# 无此属性则建立之
        self.times = 0
    
    if self.times < 8:
        if self.times%2==0:
            self.show()
        else:
            self.hide()
        self.times += 1
        self.screen.ontimer(self.flash,200)
    else:
         self.times = 0
Sprite.flash = _flash        # 给Sprite类添加一个方法
        
screen = Screen()
screen.setup(704,688)
screen.bgpic('封面2.png')

dummy = Sprite('blank')
g = Sprite('turtle.png')
g.goto(-139.00,134.00)
g.say('嗨,我是海龟小博士。')
g.say('让我来教你编程吧。')
dummy.goto(220,200);dummy.shape('turtlex.png');dummy.flash()
g.say('单击右侧的黄色按钮能让我移动或旋转等。',delay=4);dummy.shape('blank')

dummy.goto(0,-300);dummy.shape('turtlex.png');dummy.flash()
g.say('单击下边的粉红色按扭能调出预置程序。',delay=4);dummy.shape('blank')

dummy.goto(100,-120);dummy.shape('turtlex.png');dummy.flash()
g.say('单击青色的执行按钮就可以执行程序了。',delay=4);dummy.shape('blank')

dummy.goto(-100,-150);dummy.shape('turtlex.png');dummy.flash()
g.say('当然也可以自己在文本框中编写代码,然后单击执行。',delay=4);dummy.shape('blank')

g.say('好了,我要变身了。',delay=4)

screen.mainloop()

发表在 python, sprites | 留下评论

风火轮编程的考试题目:红黑点阵

编写程序画以下图形,包括直角坐标系,点的直径是10,对角线点的颜色红,其它为黑。点与点的距离是25。

python点阵图

python点阵图


以下是参考代码:

import turtle

turtle.speed(0);turtle.delay(0)
turtle.fd(300);turtle.stamp();turtle.bk(600);turtle.fd(300);turtle.left(90)
turtle.fd(300);turtle.stamp();turtle.bk(600);turtle.fd(300);turtle.right(90)
turtle.penup()

d = 25
for i in range(-5,6):
    for j in range(-5,6):
        if i==j or i+j==0:
            turtle.color('red')
        else:
            turtle.color('black')
        x = i*d
        y = j*d
        turtle.goto(x,y)
        turtle.dot(10)
turtle.ht()

发表在 python, turtle | 留下评论

风火轮编程的考试题目:圆内等腰直角三角形turtle作图

编写程序画出以下图形,包括直角坐标系,圆半径是50,三角形ABC是等腰直角三角形,AB平行x轴。

python turtle 几何圆内等腰三角形

python turtle 几何圆内等腰三角形


以下是参考代码:

import turtle

turtle.fd(300);turtle.stamp();turtle.bk(600);turtle.fd(300);turtle.left(90)
turtle.fd(300);turtle.stamp();turtle.bk(600);turtle.fd(300);turtle.right(90)

r = 100
turtle.pensize(2)
turtle.penup()

turtle.fd(r)
turtle.left(90)
turtle.pendown()
turtle.circle(r)
turtle.penup()

turtle.circle(r,45)
C = turtle.position()
turtle.dot(10,'blue')

turtle.circle(r,-90)
B = turtle.position()
turtle.dot(10,'red')

turtle.circle(r,-90)
A = turtle.position()
turtle.dot(10,'green')

turtle.pendown()
turtle.goto(C);turtle.goto(B);turtle.goto(A)

turtle.ht()
turtle.done()

发表在 python, turtle | 留下评论

风火轮编程的考试题目:被困牢笼(turtle按键检测与预判)

3. 被困牢笼
如下图是8X8的格子图,每个正方形格子的边长是50,小蓝点的初始坐标是(25,25)。编写程序,用turtle模块中的海龟画出8×8格子,然后可以用上下左右方向箭头操作小蓝点移动,每次移动50个单位,但无论如何操作,它都到达不了格子外面。

python 8x8方格图

python 8×8方格图

以下是参考代码:

import turtle

def moveup():
    if queen.ycor()<=125:
       queen.sety(queen.ycor()+50)

def movedown():
    if queen.ycor()>= -125:
        queen.sety(queen.ycor()-50)

def moveleft():
    if queen.xcor()>= -125:
       queen.setx(queen.xcor()-50)

def moveright():
    if queen.xcor()<=125:
       queen.setx(queen.xcor()+50)
    
def draw_grid(n,length):
    """n: 行列数,length:格子边长"""
    turtle.penup()
    top = length * n/2
    left = -length * n/2
    turtle.goto(left,top)
    turtle.pendown()
    for _ in range(n):
        turtle.fd(n*length)
        turtle.bk(n*length)
        turtle.right(90)
        turtle.fd(length)
        turtle.left(90)
    turtle.fd(n*length)
    turtle.left(90)    
    for _ in range(n):
        turtle.fd(n*length)
        turtle.bk(n*length)
        turtle.left(90)
        turtle.fd(length)
        turtle.right(90)
    turtle.update()

turtle.dot(10,'red')
turtle.speed(0)
turtle.delay(0)
draw_grid(8,50)
turtle.ht()

queen = turtle.Turtle('circle')
queen.color('blue')
queen.penup()
queen.goto(25,25)

screen = turtle.getscreen()
screen.onkeypress(moveup,'Up')
screen.onkeypress(movedown,'Down')
screen.onkeypress(moveleft,'Left')
screen.onkeypress(moveright,'Right')
screen.listen()   
screen.mainloop()

发表在 python, turtle | 留下评论

风火轮编程的考试题目:和电脑对赌(小赌怡情)

这是一个非常简单的小游戏。首先由计算机给出第一个整数(假设为1到100之间)。然后玩家下注赌电脑出的第二个整数将会比第一个数大还是小。玩家下注一定的筹码数后,如t个数量的筹码。计算机就会自动出第二个数。若玩家赌对了,则系统奖励玩家t个筹码,反之扣除玩家t个筹码。在本题中,假设玩家初始有100个筹码。计算机给出的随机数都是1到100之间的。并且设定对赌的局数是5局。
编写程序,模拟上面的对赌过程,要显示相关信息,以便增加趣味性.
以下是参考代码:

import random

player_cm = 100                  # 玩家初始筹码

for i in range(5):
    first = random.randint(1,100)       # 计算机首先随机产生第一个数,叫first
    second = random.randint(1,100)       # 玩家输入筹码后,计算机产生第二个数叫second
    t = int(input(f'请输入第{i+1}局的筹码数量:'))
    result = input('我出的第二个数更大还是更小(输入"大"或者"小"):')
    
    if result=='大' and second>first:  # 如果玩家睹第二个数更大,并且真的second>first,则加筹码给玩家
        player_cm += t
    elif result=='大' and secondfirst:
        player_cm -= t
    print(f'第一个数是{first},第二个数是:{second},玩家当前筹码数量:{player_cm}')
    print()
    
if player_cm<100:
    print(f'你输了{100-player_cm}个筹码')
elif player_cm>100:
     print(f'你赢了{player_cm-100}个筹码')
else:
    print('平局')

发表在 python | 标签为 | 留下评论

风火轮编程的turtle考试题目:割圆术

1. 割圆术:
编写程序,画一个半径为200的圆形,然后不断地从键盘通过turtle.numinput命令输入多边形的边数来画圆形的内接正多边形,如:输入3的时候,图形大概是下面这样:
turtle.numinput命令接收两个参数,返回浮点数据,如果调用了这个命令但直接取消,则返回None
以下是参考答案:

import turtle

def draw_polygon(points):
    turtle.penup()
    turtle.goto(points[0])
    turtle.pd()
    for p in points[1:]:
        turtle.goto(p)
    turtle.goto(points[0])
    turtle.pu()
    
r = 200

turtle.penup()
turtle.fd(r)
turtle.left(90)
turtle.pd()
turtle.circle(r)
turtle.pu()
turtle.right(90)
turtle.bk(r)

while True:
    turtle.home()
    cors = []
    n = int(turtle.numinput('提示','边数'))
    if n==None:break
    turtle.fd(r)
    turtle.left(90)
    for i in range(n):
        turtle.circle(r,360/n)
        cors.append(turtle.position())
    draw_polygon(cors)
    

发表在 python, turtle | 留下评论

圆周率绕成圆形3.14159265358979323846264338327950288


from sprites import *

pai = '3.14159265358979323846264338327950288 '

screen = Screen()
screen.bgcolor('black')
screen.setup(600,600)

t = Sprite('blank')
t.color('cyan')

radius = 200
frames = []
t.bk(radius);t.left(90)
ft = ('宋体',38,'normal')
for i in range(len(pai)):
    t.write(pai[i],angle=90-i * 360/len(pai),font=ft)
    t.circle(-radius,360/len(pai))
    frames.append(screen.save())
    t.wait(0.1)
for index,frame in enumerate(frames):
    frame.save(f'绕pai/{index}.png')

screen.mainloop()

发表在 python, sprites | 留下评论

圆周率动态画出程序

from random import randint
from turtle import *

points = ([(119, 124), (120, 125), (125, 125), (126, 124), (126, 118), (125, 117), (125, 116), (124, 115), (124, 114), (118, 108), (117, 108), (114, 105), (113, 105), (112, 104), (111, 104), (109, 102), (108, 102), (107, 101), (106, 101), (105, 100), (104, 100), (103, 99), (102, 99), (101, 98), (100, 98), (99, 97), (97, 97), (96, 96), (94, 96), (93, 95), (90, 95), (89, 94), (59, 94), (58, 93), (58, 91), (57, 90), (57, 89), (56, 88), (56, 86), (55, 85), (55, 83), (54, 82), (54, 80), (53, 79), (53, 78), (52, 77), (52, 75), (51, 74), (51, 72), (50, 71), (50, 69), (49, 68), (49, 66), (48, 65), (48, 64), (47, 63), (47, 61), (46, 60), (46, 58), (45, 57), (45, 55), (44, 54), (44, 52), (43, 51), (43, 49), (42, 48), (42, 46), (41, 45), (41, 43), (40, 42), (40, 39), (39, 38), (39, 36), (38, 35), (38, 33), (37, 32), (37, 30), (36, 29), (36, 26), (35, 25), (35, 23), (34, 22), (34, 20), (33, 19), (33, 16), (32, 15), (32, 13), (31, 12), (31, 9), (30, 8), (30, 6), (29, 5), (29, 2), (28, 1), (28, -2), (27, -3), (27, -5), (26, -6), (26, -9), (25, -10), (25, -13), (24, -14), (24, -17), (23, -18), (23, -21), (22, -22), (22, -25), (21, -26), (21, -29), (20, -30), (20, -34), (19, -35), (19, -38), (18, -39), (18, -43), (17, -44), (17, -47), (16, -48), (16, -52), (15, -53), (15, -58), (14, -59), (14, -65), (13, -66), (13, -81), (12, -82), (13, -83), (13, -90), (14, -91), (14, -92), (15, -93), (15, -94), (16, -95), (16, -96), (18, -98), (19, -98), (21, -100), (22, -100), (23, -101), (26, -101), (27, -102), (36, -102), (37, -101), (39, -101), (40, -100), (41, -100), (42, -99), (43, -99), (44, -98), (45, -98), (46, -97), (47, -97), (49, -95), (50, -95), (52, -93), (53, -93), (56, -90), (57, -90), (60, -87), (61, -87), (67, -81), (68, -81), (73, -76), (77, -80), (76, -81), (76, -82), (73, -85), (73, -86), (69, -90), (69, -91), (64, -96), (64, -97), (53, -108), (52, -108), (47, -113), (46, -113), (44, -115), (43, -115), (41, -117), (40, -117), (39, -118), (38, -118), (37, -119), (36, -119), (35, -120), (34, -120), (33, -121), (31, -121), (30, -122), (28, -122), (27, -123), (24, -123), (23, -124), (14, -124), (13, -123), (10, -123), (9, -122), (8, -122), (7, -121), (6, -121), (-1, -114), (-1, -113), (-3, -111), (-3, -110), (-4, -109), (-4, -108), (-5, -107), (-5, -105), (-6, -104), (-6, -102), (-7, -101), (-7, -98), (-8, -97), (-8, -83), (-7, -82), (-7, -76), (-6, -75), (-6, -70), (-5, -69), (-5, -66), (-4, -65), (-4, -62), (-3, -61), (-3, -58), (-2, -57), (-2, -54), (-1, -53), (-1, -51), (0, -50), (0, -47), (1, -46), (1, -44), (2, -43), (2, -41), (3, -40), (3, -38), (4, -37), (4, -35), (5, -34), (5, -32), (6, -31), (6, -29), (7, -28), (7, -26), (8, -25), (8, -23), (9, -22), (9, -20), (10, -19), (10, -17), (11, -16), (11, -14), (12, -13), (12, -11), (13, -10), (13, -8), (14, -7), (14, -5), (15, -4), (15, -2), (16, -1), (16, 1), (17, 2), (17, 4), (18, 5), (18, 7), (19, 8), (19, 10), (20, 11), (20, 13), (21, 14), (21, 16), (22, 17), (22, 19), (23, 20), (23, 22), (24, 23), (24, 25), (25, 26), (25, 28), (26, 29), (26, 31), (27, 32), (27, 34), (28, 35), (28, 37), (29, 38), (29, 40), (30, 41), (30, 43), (31, 44), (31, 46), (32, 47), (32, 49), (33, 50), (33, 52), (34, 53), (34, 55), (35, 56), (35, 58), (36, 59), (36, 61), (37, 62), (37, 64), (38, 65), (38, 67), (39, 68), (39, 70), (40, 71), (40, 73), (41, 74), (41, 76), (42, 77), (42, 79), (43, 80), (43, 82), (44, 83), (44, 85), (45, 86), (45, 88), (46, 89), (46, 91), (47, 92), (47, 94), (-20, 94), (-20, 92), (-21, 91), (-21, 90), (-22, 89), (-22, 87), (-23, 86), (-23, 84), (-24, 83), (-24, 82), (-25, 81), (-25, 79), (-26, 78), (-26, 76), (-27, 75), (-27, 73), (-28, 72), (-28, 71), (-29, 70), (-29, 68), (-30, 67), (-30, 65), (-31, 64), (-31, 62), (-32, 61), (-32, 59), (-33, 58), (-33, 57), (-34, 56), (-34, 54), (-35, 53), (-35, 51), (-36, 50), (-36, 48), (-37, 47), (-37, 45), (-38, 44), (-38, 43), (-39, 42), (-39, 40), (-40, 39), (-40, 37), (-41, 36), (-41, 34), (-42, 33), (-42, 31), (-43, 30), (-43, 28), (-44, 27), (-44, 25), (-45, 24), (-45, 23), (-46, 22), (-46, 20), (-47, 19), (-47, 17), (-48, 16), (-48, 14), (-49, 13), (-49, 11), (-50, 10), (-50, 8), (-51, 7), (-51, 5), (-52, 4), (-52, 2), (-53, 1), (-53, -1), (-54, -2), (-54, -4), (-55, -5), (-55, -7), (-56, -8), (-56, -10), (-57, -11), (-57, -13), (-58, -14), (-58, -16), (-59, -17), (-59, -19), (-60, -20), (-60, -22), (-61, -23), (-61, -25), (-62, -26), (-62, -28), (-63, -29), (-63, -31), (-64, -32), (-64, -34), (-65, -35), (-65, -37), (-66, -38), (-66, -40), (-67, -41), (-67, -43), (-68, -44), (-68, -46), (-69, -47), (-69, -49), (-70, -50), (-70, -53), (-71, -54), (-71, -56), (-72, -57), (-72, -59), (-73, -60), (-73, -62), (-74, -63), (-74, -65), (-75, -66), (-75, -68), (-76, -69), (-76, -72), (-77, -73), (-77, -75), (-78, -76), (-78, -78), (-79, -79), (-79, -81), (-80, -82), (-80, -85), (-81, -86), (-81, -88), (-82, -89), (-82, -91), (-83, -92), (-83, -95), (-84, -96), (-84, -98), (-85, -99), (-85, -101), (-86, -102), (-86, -105), (-87, -106), (-87, -108), (-88, -109), (-88, -111), (-89, -112), (-89, -113), (-91, -115), (-91, -116), (-97, -122), (-98, -122), (-99, -123), (-101, -123), (-102, -124), (-113, -124), (-114, -123), (-117, -123), (-118, -122), (-120, -122), (-121, -121), (-122, -121), (-125, -118), (-125, -117), (-126, -116), (-126, -111), (-125, -110), (-125, -108), (-124, -107), (-124, -105), (-123, -104), (-123, -103), (-122, -102), (-122, -101), (-120, -99), (-120, -98), (-118, -96), (-118, -95), (-116, -93), (-116, -92), (-114, -90), (-114, -89), (-112, -87), (-112, -86), (-110, -84), (-110, -83), (-108, -81), (-108, -80), (-107, -79), (-107, -78), (-105, -76), (-105, -75), (-104, -74), (-104, -73), (-102, -71), (-102, -70), (-101, -69), (-101, -68), (-100, -67), (-100, -66), (-98, -64), (-98, -63), (-97, -62), (-97, -61), (-96, -60), (-96, -59), (-95, -58), (-95, -57), (-94, -56), (-94, -55), (-93, -54), (-93, -53), (-91, -51), (-91, -50), (-90, -49), (-90, -48), (-89, -47), (-89, -46), (-88, -45), (-88, -44), (-87, -43), (-87, -42), (-86, -41), (-86, -40), (-85, -39), (-85, -38), (-84, -37), (-84, -35), (-83, -34), (-83, -33), (-82, -32), (-82, -31), (-81, -30), (-81, -29), (-80, -28), (-80, -27), (-79, -26), (-79, -25), (-78, -24), (-78, -23), (-77, -22), (-77, -20), (-76, -19), (-76, -18), (-75, -17), (-75, -16), (-74, -15), (-74, -14), (-73, -13), (-73, -12), (-72, -11), (-72, -9), (-71, -8), (-71, -7), (-70, -6), (-70, -5), (-69, -4), (-69, -2), (-68, -1), (-68, 0), (-67, 1), (-67, 3), (-66, 4), (-66, 5), (-65, 6), (-65, 8), (-64, 9), (-64, 10), (-63, 11), (-63, 13), (-62, 14), (-62, 15), (-61, 16), (-61, 18), (-60, 19), (-60, 20), (-59, 21), (-59, 23), (-58, 24), (-58, 26), (-57, 27), (-57, 28), (-56, 29), (-56, 31), (-55, 32), (-55, 33), (-54, 34), (-54, 36), (-53, 37), (-53, 38), (-52, 39), (-52, 41), (-51, 42), (-51, 44), (-50, 45), (-50, 46), (-49, 47), (-49, 49), (-48, 50), (-48, 51), (-47, 52), (-47, 54), (-46, 55), (-46, 56), (-45, 57), (-45, 59), (-44, 60), (-44, 62), (-43, 63), (-43, 64), (-42, 65), (-42, 67), (-41, 68), (-41, 69), (-40, 70), (-40, 72), (-39, 73), (-39, 74), (-38, 75), (-38, 77), (-37, 78), (-37, 80), (-36, 81), (-36, 82), (-35, 83), (-35, 85), (-34, 86), (-34, 87), (-33, 88), (-33, 90), (-32, 91), (-32, 93), (-31, 94), (-58, 94), (-59, 93), (-65, 93), (-66, 92), (-70, 92), (-71, 91), (-74, 91), (-75, 90), (-77, 90), (-78, 89), (-80, 89), (-81, 88), (-82, 88), (-83, 87), (-84, 87), (-85, 86), (-86, 86), (-87, 85), (-88, 85), (-89, 84), (-90, 84), (-91, 83), (-92, 83), (-94, 81), (-95, 81), (-97, 79), (-98, 79), (-101, 76), (-102, 76), (-111, 67), (-114, 70), (-114, 72), (-113, 73), (-113, 74), (-112, 75), (-112, 76), (-110, 78), (-110, 79), (-109, 80), (-109, 81), (-108, 82), (-108, 83), (-106, 85), (-106, 86), (-104, 88), (-104, 89), (-101, 92), (-101, 93), (-89, 105), (-88, 105), (-86, 107), (-85, 107), (-84, 108), (-83, 108), (-81, 110), (-79, 110), (-78, 111), (-77, 111), (-76, 112), (-74, 112), (-73, 113), (-71, 113), (-70, 114), (-68, 114), (-67, 115), (-63, 115), (-62, 116), (-57, 116), (-56, 117), (82, 117), (83, 118), (97, 118), (98, 119), (102, 119), (103, 120), (107, 120), (108, 121), (110, 121), (111, 122), (113, 122), (114, 123), (116, 123), (117, 124), (119, 124)],)
screen = Screen()
screen.setup(960,780)
screen.colormode(255)


t = Turtle(shape='turtle')
t.penup()

for poly  in points:
    r = randint(0,255)
    g = randint(0,255)
    b = randint(0,255)
    t.fillcolor(r,g,b)
    t.begin_fill()
    for x,y in poly:
       t.goto(x,y)
       if not t.isdown():t.down()
    t.end_fill()
    t.penup()
t.ht()
screen.mainloop()

发表在 python, turtle | 留下评论

割圆术动画_需要最新sprites版本

import time
import math
import random
import turtle
from sprites import *

def rndcolor():
    r = random.randint(0,255)
    g = random.randint(0,255)
    b = random.randint(0,255)
    return r,g,b

def draw_polygon(turtle,cors):
    d = math.dist(cors[0],cors[1])
    turtle.penup()
    turtle.goto(cors[0])
    turtle.pendown()
    for x,y in cors[1:]:
        turtle.goto(x,y)
    turtle.goto(cors[0])
    turtle.penup()
    周长 = d * len(cors)
    return 周长

turtle.colormode(255)

screen = Screen()
screen.setup(500,500)
screen.bgcolor('black')
screen.tracer(0,0)

A = (-200,0)
B =(200,0)
pen = Sprite('blank')
pen.width(2)
pen.color('white')
pen.draw_circle(A,B)

ft = ('黑体',16,'normal')
p = Sprite('blank')        # 写圆周率的
p.sety(220)
p.pencolor('yellow')

frames = []
t = Sprite('blank')
for n in range(3,101):
    t.home()
    t.fd(200)
    t.left(90)
    points = []
    for i in range(n):
        t.circle(200,360/n)
        points.append(t.position())
    t.randomcolor()
    周长 = draw_polygon(t,points)
    pi = 周长/400
    p.clear()
    p.write(f'n={n},π={pi}',align='center',font=ft)
    screen.update()
    frames.append(screen.save())
    t.wait(2/n)
    #t.clear()
for index,frame in enumerate(frames):
    frame.save(f'gframes/{index}.png')

screen.mainloop()
    

发表在 python, sprites | 留下评论

本程序返回折线的拐点.py

"""
  本程序返回折线的拐点.py
  这是研究在python turtle中实现bloodfill算法的一个副产品。
  作者:李兴球,2022/12/3号
"""
import random
import turtle

def draw_segments(points):
    turtle.penup()
    turtle.goto(points[0])
    turtle.pendown()
    [turtle.goto(dot) for dot in points[1:] ]
    turtle.penup()
    
def twopointoneline(p1,p2):
    """两点一线函数,
    p1,p2表示坐标点,用二元组表示,本函数根据两点返回一元一次方程一般式的A,B,C,k,b"""
    x1,y1 = p1
    x2,y2 = p2
    dx = x1 - x2
    if dx==0:
        k = b = float('inf')
    else:
        k = (y1-y2)/dx
        b = (x1*y2-x2*y1)/dx
    A = y2 - y1
    B = dx
    C = (x2*y1-x1*y2)
    return A,B,C,k,b
twopaline = twopointoneline    # 两点一线的别名
twodotaline = twopointoneline

def point_is_on_line(point,line):
    """判断点是否在直线上,point:二元组表示的点,line:两个点表示的直线"""
    P,Q = line
    A,B,C,k,b = twopointoneline(P,Q) # 直线方程标准式,k斜率,b截距
    #print("A,B,C,k,b",A,B,C,k,b)
    x,y = point
    #print("x y = ",x,y)
    return abs(A*x + B*y + C)<0.00000001     # 符合直线标准方程则返回真,否则假        
dot_is_on_line = point_is_on_line

def point_is_on_segment(point,segment):
    """判断点是否在线段上,
       point:二元组表示的点,segment:两个点表示的线段,如((10,10),(20,20))或[(0,0),(100,100)]"""
    P,Q = segment    
    x,y = point
    if point_is_on_line(point,segment):   # 如果在直线上,进一步判断是否在线段上
        x1 = P[0];x2 = Q[0] # 线段1的两个x坐标
        if x1>x2:x1,x2 = x2,x1         # 如果x1比x2大,则交换x1和x2的值
        if x>x2 or xy2:y1,y2 = y2,y1         # 如果y1比y2大,则交换y1和y2的值
        if y>y2 or y
							
发表在 python, turtle | 留下评论