在不到10行的简单代码中,您能做的最酷的事情是什么?帮我启发初学者![关闭]


406

我正在寻找可以用几行简单的代码完成的最酷的事情。我相信您可以在Haskell中用15行编写一个Mandelbrot集,但是很难遵循。

我的目标是激发学生编程的热情

我们知道编程很酷,因为您可以创建自己想像的任何东西-这是最终的创意渠道。我想激励这些初学者,让他们尽可能地克服早期学习的障碍。

现在,我的理由很自私。我正在为60位半工程半商业专业的学生讲授计算入门课程;所有新生。他们是来自贫困高中的学生。根据我以往的经验,该集团一般分为如下:一些摇滚明星,一些谁拼命和那种得到它,谁非常努力和一些几乎没有得到它,和几个谁不关心。我希望尽可能有效地覆盖这些群体。这是我如何使用计算机程序进行教学的示例:

这是我正在寻找的示例:1行VBS脚本,可让您的计算机与您交流:

CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it")

我可以用它来演示操作顺序。我将展示代码,让他们使用它,然后解释说这行有很多事情要做,但是计算机可以理解它,因为它知道规则。然后我给他们看这样的东西:

4(5*5) / 10 + 9(.25 + .75)

您会看到我首先需要做的是(5 * 5)。然后我可以乘以4。现在,我创建了对象。除以10等于调用“讲话”-在拥有对象之前我不能讲话,在拥有对象之前我不能除以100。然后在另一侧,我首先创建一个InputBox,其中包含一些如何显示它的说明。当我在输入框上按Enter键时,它将评估或“返回”我输入的内容。(提示:“ oooooo”发出有趣的声音)所以当我说“说话”时,右边就是要说的内容。我是从InputBox那里得到的。

因此,当您在一行上执行多项操作时,例如:

x = 14 + y;

您需要了解事物的顺序。首先,我们将14和y相加。然后,我们将结果(求值结果或返回值)放入x中。

这是我的目标,有很多有趣的示例可以在有趣的情况下演示和教学。我在室友上尝试了这个示例,虽然我可能不会将其用作第一堂课,但她喜欢它并学到了一些东西。

一些很酷的mathematica程序可以制作出易于理解的精美图形或形状,这是个好主意,我将对此进行研究。这里有一些复杂的动作脚本示例,但是有点太高级了,我不能教Flash。您还有什么其他想法?


102
我认为关于如何教编程的问题是优秀的,也是不平凡的。祝您好运。
Mike Dunlavey,2009年

6
“我的目​​标是激发学生编程的热情。” 我认为您无法告诉人们编程很酷。他们要么喜欢,要么不喜欢。
瑞克

2
您的一行VBS脚本在Mac上不起作用!:-P不过好问题。
约翰·托普利

1
我一直喜欢这种东西,但是您想给谁留下深刻的印象,我觉得Sierpinski密封垫会做得很好。对于IT人员而言,可能会创建文件,对于某些人而言,进行计算机对话会令人印象深刻,依此类推。那么目标受众是什么,那么您定义什么才是最酷的。
Oakcool,2009年

5
有83个人赞成对此问题如何“优秀且不平凡”的评论...被5名显然不同意的人关闭为“不具有建设性”。威力不大吗?
rg88 2011年

Answers:


78

我的孩子通过使用快速的VB脚本来操纵Microsoft Agent角色获得了很好的回应。对于那些不熟悉MS Agent的用户来说,它是一系列动画屏幕字符,可以通过COM界面进行操作。您可以在Microsoft代理下载页面上下载代码和字符。

以下几行将使Merlin角色出现在屏幕上,四处飞走,敲击屏幕以引起您的注意并打个招呼。

agentName = "Merlin"
agentPath = "c:\windows\msagent\chars\" & agentName & ".acs"
Set agent = CreateObject("Agent.Control.2")

agent.Connected = TRUE
agent.Characters.Load agentName, agentPath
Set character = agent.Characters.Character(agentName)

character.Show

character.MoveTo 500, 400
character.Play "GetAttention"
character.Speak "Hello, how are you?"
Wscript.Sleep 15000
character.Stop
character.Play "Hide"

您可以使用许多其他命令。校验有关更多信息,请http://www.microsoft.com/technet/scriptcenter/funzone/agent.mspx

EDIT 2011-09-02 我最近发现Windows 7上没有本地安装Microsoft Agent。但是,可以在此处单独下载。我尚未对此进行测试,因此无法验证其是否正常运行。


棒极了。这值得更多的投票。
汤姆·里特

感谢汤姆的认可。糟糕的是,即使它开始获得投票,我也不会得到任何代表点。:-P
Bob Mc

32
这样,您就可以看到回形针所有的时间:d
Pedery

8
@Bob BASIC是初学者的语言。VB 不是 BASIC。VB是MS当时为满足需求而创建的瑞士军刀。如今,有很多更好(更专业)的工具来代替它。VB并不是一种不好的语言,它有很多多余的行李。如果我给出一个完全公正的理由使用它,那是因为MS逐渐放弃了对VB的支持。这是一种垂死的语言。只要等到Office脚本使用JavaScript(计划在不久的将来)完成,VB的下降就可以确定。
Evan Plaice

3
@Evan-感谢您的公正回答,而不是一些宗教信仰。做得很好。还没有听说过Office Javascript的举动。会调查。
Bob Mc

339

在您的地址栏中(在浏览器中)输入此代码,然后按Enter。然后,您可以编辑网页的所有内容!

javascript:document.body.contentEditable='true'; document.designMode='on'; void 0

我知道那是最酷的“单线” =)


95
“单线”是这样的误称。这是3行,真的。如果您愿意,任何代码都可以是一行。
DisgruntledGoat

5
这看起来确实很整洁,但是一旦修改页面,是否有办法获取页面?
Sylverdrag

51
我非常喜欢,我为您投票999999999次!!img707.imageshack.us/img707/4843/jshack.png
JRL

4
在Firefox中,由于javascript:已被禁用,这不再适用。丢人现眼。

2
@DisgruntledGoat,javascript:并且void 0是样板:int main() {return 0; }C 等效。另外两行只是执行相同操作的不同浏览器API:第一个是IE API,第二个是NetScape API。HTML5使用contentEditable,因此,除非您关心支持Firefox 1.5或其他功能,否则实际代码为:document.body.contentEditable='true';
Zarel 2011年

201

当我第一次写这个。

10 PRINT "What is your name?"
20 INPUT A$
30 PRINT "Hello " A$
40 GOTO 30

它把人吹走了!电脑记住了他们的名字!

编辑:只是添加到此。如果您可以说服新程序员,这是他们可以做的最酷的事情,那么他们将成为优秀的程序员。如今,您可以使用一行代码来运行别人编写的库,几乎可以做任何您想做的事情。我个人对此绝对感到不满意,并且从中受益匪浅。


15
以下内容会更好:40 GOTO 30
支出者

8
+1用于显示用户名,人们总是喜欢看到自己的名称。@saua,那不是一个无限的打印循环吗?这又回到了30行,未行20
- •

13
确定应该转到10,以便其他人可以输入自己的名字...
Omar Kooheji 09年

17
您忘记了35 PRINT CHR $(7)
Adam Jaskiewicz 09年

6
这也是我学习编程的方式。这是imo的最佳答案。+1接受这一点
点击“在2009年

180

PHP-Sierpinski垫片又名Triforce

好的,这是15行代码,但是结果很棒!那种东西让我小时候很害怕。这来自PHP手册:

$x = 200;
$y = 200;

$gd = imagecreatetruecolor($x, $y);

$corners[0] = array('x' => 100, 'y' =>  10);
$corners[1] = array('x' =>   0, 'y' => 190);
$corners[2] = array('x' => 200, 'y' => 190);

$red = imagecolorallocate($gd, 255, 0, 0); 

for ($i = 0; $i < 100000; $i++) {
  imagesetpixel($gd, round($x),round($y), $red);
  $a = rand(0, 2);
  $x = ($x + $corners[$a]['x']) / 2;
  $y = ($y + $corners[$a]['y']) / 2;
}

header('Content-Type: image/png');
imagepng($gd);

塞尔平斯基垫片


25
作为记录,这是一个Sierpinski垫圈。
混乱

6
太棒了,但是我认为它应该出现在课程的中间,因为它建立在许多概念上,例如循环和数组。
Mike Dunlavey,2009年

4
@Masi:一般的想法是有三个固定点,它们是三角形的拐角,以及一个不断更新的“当前”点。要进行移动,请随机选择一个角,然后将当前点向该角移动一半。当前点的颜色。然后以相同的方式进行另一步,然后再重复几千次,该模式将出现。然后尝试使用不同数量的拐角,或更改当前点向拐角处跳跃的分数,以查看其如何影响图案。
丹尼尔·艾威克

18
根据记录,这不是Sierpinski密封垫……实际上是Triforce。en.wikipedia.org/wiki/The_Legend_of_Zelda
杰森(

2
这段代码对我来说似乎很奇怪,因为我通常认为这是通过递归完成的(也有很少的代码行)。实际上,分形是计算机科学课程中递归的很好的介绍。但是在我看来,由于其随机方法,此代码将效率很低,无法绘制和重绘许多像素。
史蒂夫·沃瑟姆

105

微软有Small Basic,一个“孩子”的IDE。

pic = Flickr.GetRandomPicture("beach")
Desktop.SetWallpaper(pic)

它是专门设计用来显示编程很酷的。


80
这实际上很糟,因为这些库调用看起来像魔术。您正在将它们设置为VB脚本小子。恐怕他们永远不会潜入那个“黑魔法”区域,而停留在“安全”的管道区域。...哦,看这是如何使Internet浏览器成一行的方法!MSIEControl(..布拉布拉什么...)显示()。
哈森

88
我不认为孩子是白痴。如果您让他们对编程的可能性感到兴奋,那么他们将找出如何自行完成更高级的事情。如果没有别的,年轻的受睾丸激素感染的男孩将在您甚至不知道发生什么之前,尝试学习最神秘,最黑暗的魔法事物。
蒂姆·林

28
@hansen j,那不公平,每个人都必须从某个地方开始。
约翰·法瑞尔

30
这不是面向孩子的CS学位,而是编程玩具。无论通过哪种途径让孩子看到编程的乐趣,这都很棒,它不一定是ASM。
巴拿马杯

29
知道我已经尝试教过的孩子,大概需要十秒钟,然后他们才能尝试pic = Flickr.GetRandomPicture(“ boobs”)
Iain Galloway 2010年

83

我倾向于认为人们对与自己的生活相关或与生活相关的事物印象深刻。我会尝试根据他们了解和理解的内容编写10行代码。以Twitter及其API为例。为什么不使用此API构建很棒的东西。以下10行代码将从Twitter返回“公共时间轴”并将其显示在控制台应用程序中...

using (var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss"))
    {
        SyndicationFeed
            .Load(xmlr)
            .GetRss20Formatter()
            .Feed
            .Items        
            .ToList()
            .ForEach( x => Console.WriteLine(x.Title.Text));
    }

我的代码示例可能不是最适合您的学生的。它是用C#编写的,并使用.NET 3.5。因此,如果您要教他们PHP,Java或C ++,这将无用。但是,我的观点是,通过将您的10行代码与“很酷,有趣且与学生相关的东西”相关联,您的样本也变得很酷,有趣且相关。

祝好运!

[是的,我知道我已经错过了几行using语句和Main方法,但是我猜想这10行并不一定就是10行]


这真是整洁!我对SyndicationFeed对象不熟悉-感谢您提供的代码!
塔德·多纳赫

目标受众是非极客,因此,他们对高音扬声器一无所知吗?
peufeu

80

这是一个Python telnet服务器,它将询问用户名称并向他们问好。这看起来很酷,因为您正在通过网络从另一台计算机与程序进行通信。

from socket import *
s=socket(AF_INET, SOCK_STREAM)
s.bind(("", 3333))
s.listen(5)
while 1:
   (c, a) = s.accept()
   c.send("What is your name? ")
   name = c.recv(100)
   c.send("Hello "+name)
   c.close()

68

我认为现在要成为计算机教育者很困难。我是。我们面临越来越艰巨的艰苦战斗。我们的学生是经验丰富的用户,需要给他们留下深刻的印象。他们拥有如此多的工具,可以完成令人惊奇的事情。

一个由10行代码组成的简单计算器?为什么?我有一个TI-86。

一个对图像应用特殊效果的脚本?那就是Photoshop的目的。而且Photoshop炸毁了您在10行中可以做的所有事情。

翻录CD并将文件转换为MP3怎么样?嗯,我已经从BitTorrent获得了50,000首歌曲。它们已经是MP3格式。我在iPhone上播放它们。谁会购买CD?

要将精明的用户介绍给编程人员,您将必须找到以下内容:

a)适用于他们觉得有趣和酷的事物,b)做他们尚未做过的事情。

假设您的学生已经可以使用最昂贵的软件。它们中的许多确实具有完整版的Adobe CS5.5(零售价:2,600美元;实际价格:免费),并且可以轻松获得通常会超出部门预算的任何应用程序。

但是他们中的绝大多数都不知道这些“计算机内容”是如何工作的。

他们是一群难以置信的创造力:他们喜欢创造东西。他们只希望能够做或做他们的朋友做不到的事情。他们想要吹牛。

这是我发现能引起我的学生共鸣的一些事情:

  • HTML和CSS。他们从中了解MySpace主题的工作原理并可以对其进行自定义。
  • 混搭。他们都看过它们,但是不知道如何创建它们。查看Yahoo! 管道。有很多可教的时刻,例如RSS,XML,文本过滤,映射和可视化。完整的mashup小部件可以嵌入到网页中。
  • 艺术品。上下文无关的艺术。递归和随机化是制作精美图片的关键。
  • 评书。使用像Alice这样的易于使用的3D编程环境,只需拖放即可轻松创建高质量,引人入胜的故事。

这些都不涉及传统意义上的任何编程。但是它们确实利用了强大的库。我认为它们是另一种编程方式。


11
+1我喜欢你如何描述这些日子里从torrent和Adobe CS4获得50,000首歌曲的孩子,这毫无
疑问

用python写一个简单的二进制搜索算法。将电话簿撕成两半,以描述其工作原理。经验丰富的程序员常常忽略了编程的简单但强大的方面,而新手则敬畏地看着@。大多数人没有意识到他们的显示器至少以60-120 /秒的速度刷新显示器上至少一半的像素。进行人与计算机的速度竞赛。好玩的东西。请参阅以下内容以获取更多想法:Academicearth.org/courses/introduction-to-computer-science-i:而且,无论您做什么...都不要将ANSI C作为第一语言来教他们。我去过那里,很烂。
Evan Plaice 2010年

3
如果要自定义网站,为什么不使用Greasemonkey?
new123456'7

您只需对示例进行一些思考:重新使用photoshop,您只需指出显而易见的一点-使用photoshop,您可以更改一张图片,使用脚本可以更改数十万张图片。再说一下MP3,没错,没有人再下载CD,但是您可以(如果不是合法的话)说明他们可以编写一个程序,将最新的音乐直接自动下载到ipod。
杰夫·威灵

@Jeff与Photoshop配合得很好,您还可以进行Batchs和Actions来对任意数量的文件进行更改。令人惊讶的是,如今计算机已花了多少钱。
约翰

63

我发现(在GWBASIC中)最喜欢的是:

10 input "What is your name ";N$
20 i = int(rnd * 2)
30 if i = 0 print "Hello ";N$;". You are a <fill in insult number 1>"
40 if i = 1 print "Hello ";N$;". You are a <fill in insult number 2>"

我发现初学者有一些概念需要修正。

  • 电脑看不懂你的想法。
  • 计算机一次只能做一件事情,即使它们做得如此之快,它们似乎一次也可以做。
  • 计算机只是愚蠢的机器,只能按照它们所告诉的去做。
  • 计算机只能识别某些事物,而这些事物就像构件。
  • 一个关键概念是变量是包含值的东西,并且其名称不同于该值。
  • 编辑程序的时间与运行时间之间的区别。

祝你上课好运。我相信你会做的很好。

附言:我敢肯定,您了解到,除了材料和技能之外,您还正在教导一种态度,这同样重要。


现代计算机一次只能完成一件事情。
dreamlax

但是,您的代码一次执行的功能是否多于一项?
JeffO

5
@dreamlax:当然,您是对的,但是我们不要割裂头发。我们正在谈论向孩子们介绍计算机,并为他们提供基本的智力构建模块。并行性可能会在以后出现。
Mike Dunlavey,2009年

1
@Ben S:您是否有机会删除了第10行前面的空格?我之所以这么说是因为SO格式化程序似乎会将第一行缩进1个空格。我想知道是否有更好的方法来使代码对齐?
Mike Dunlavey,2009年

2
@foljs:天哪!真?:-) dreamlax提出了同样的观点。关键是,当您与对计算机一无所知的人一起工作时,对他们来说好像一切都立即发生了,所以我们必须克服这些麻烦而不必费力。因此,一个真正的基本概念是“首先执行A,然后执行B,依此类推”。
Mike Dunlavey,2009年

62

这个C代码可能被混淆了,但是我发现它非常强大

#include <unistd.h>
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<L?--_
%6:6:7)+"World! \n",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}

结果就是...仅用3行...一种分形Hello World...

WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo
WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo
WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo
WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo
WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo
WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo
WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!!   !dWW!ddddllllrrrrrrrooooooo
WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo      WloW!!!ddddllrrrrrrrrooooo
WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl     r!dlooWWWoW!dllrrrrrrroooo
WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo  l!               rdo!l!r!dlrrrrrrrrooo
WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW                       lW!ddlrrrrrrrroo
WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd !                        rlW!ddllrrrrrrrro
Worrrrrrrllllllddd!oooWWWoloWWWWoodr                           drrWdlllrrrrrrrr
Worrrlllllllldddd!WolWrr!!dWWWlrrldr                            ro!dlllrrrrrrrr
Wrrllllllllddddd!WWolWr        oWoo                              r!dllllrrrrrrr
Wlllllllldddd!!odrrdW            o                              lWddllllrrrrrrr
Wlddddd!!!!!WWordlWrd                                          oW!ddllllrrrrrrr
olddddd!!!!!WWordlWrd                                          oW!ddllllrrrrrrr
Wlllllllldddd!!odrrdW            o                              lWddllllrrrrrrr
Wrrllllllllddddd!WWolWr        oWoo                              r!dllllrrrrrrr
Worrrlllllllldddd!WolWrr!!dWWWlrrldr                            ro!dlllrrrrrrrr
Worrrrrrrllllllddd!oooWWWoloWWWWoodr                           droWdlllrrrrrrrr
WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd !                        rlW!ddllrrrrrrrro
WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW                       lW!ddlrrrrrrrroo
WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo  l!               rdo!l!r!dlrrrrrrrrooo
WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl     r!dlooWWWoW!dllrrrrrrroooo
WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo      WloW!!!ddddllrrrrrrrrooooo
WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!!   WdWW!ddddllllrrrrrrrooooooo
WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo
WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo
WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo
WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo
WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo
WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo
WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

5
真好!太可惜了,那里没有任何地方实际说“你好,世界!”
Ponkadoodle

好漂亮 Mandelbrot模型:D
Aniket,2011年

45

如何显示可以使用任何Web浏览器并在地址栏中输入JavaScript并获取执行代码?

编辑:转到包含大量图像的页面,然后在地址栏中尝试以下操作:

javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i<DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++ }setInterval('A()',5); void(0)

2
好吧,不过你应该给一个具体的例子你知道..
哈森

1
@约翰:请举一个具体的例子。我仅通过导出JS文件在服务器中使用了JS。我从未将代码放入地址栏。
莱奥波德·赫兹(LéoLéopoldHertz),2009年

7
嗯,这不是一个令人兴奋的示例,但是您可以执行javascript:alert(“ Hello World”);
约翰·托普利

我更喜欢:“ javascript:for(var i = 0; i> -1; i ++)alert('恭喜,您已经按Enter键了'+ i +'次!');”。(在运行之前阅读该代码...)。^^
Arnis Lapsa,2009年

哇因子+1 ...十分壮观的例子:)
fretje

37

您可以创建一个选择随机数的应用程序。而且你必须猜出来。如果您错了,它会说:更高或更低。如果您猜对了,这是一个很好的消息。

为学生们演奏很酷。

没有适当错误检查的简单Python版本:

import random

while input('Want to play higher/lower? ').lower().startswith('y'):
    n = random.randint(1, 100)
    g = int(input('Guess: '))

    while g != n:
        print('  %ser!' % (g > n and 'low' or 'high'))
        g = int(input('Guess: '))

    print('  Correct! Congratulations!')

Erik建议计算机应该猜测该数字。这也可以在10行代码中完成(尽管现在缺少适当的错误检查更加严重:超出范围的有效数字会导致无限循环):

while input('Want to let the pc play higher/lower? ').lower().startswith('y'):
    n = int(input('Give a number between 1 and 100: '))
    lo, hi, guess, tries = 1, 100, 50, 1

    while guess != n:
        tries += 1
        lo, hi = (guess + 1, hi) if guess < n else (lo, guess - 1)
        guess = (lo + hi) // 2

    print('Computer guessed number in %d tries' % tries)

4
更有趣的是让用户选择随机数,然后让计算机猜测它。
Erik Forbes

15
现在,使这两个程序在套接字上相互播放。
Josh Lee,2009年

3
如果不直接给计算机提供编号,那会更好。您应该告诉用户“选择1到100之间的数字”。然后输出“我猜50”,并要求输入(“较高”,“较低”或“正确”)并优化您的猜测。
Ponkadoodle

我已经与儿子(9岁)一起完成了这项工作,它还具有进入算法思维的好处,即在最短的猜测中找到正确数字的最佳策略是什么。
mbesso 2011年

我认为您想要raw_input。输入等于eval(raw_input(prompt))。参见输入
Jeff Kaufman

26

回到高中的计算机班,我自己和几个朋友教了班上如何用Delphi编程。该课程主要侧重于使用Pascal进行编程,因此Delphi是不错的下一步。我们演示了Delphi及其RAD功能的事件驱动性质。在课程结束时,我们向全班展示了一个示例应用程序,并要求他们重现该应用程序。应用程序使用两个按钮“ 是”和“ ” 询问“ 您喝醉了吗? ” 。...我想您知道接下来会发生什么...“否”按钮更改了鼠标悬停位置,几乎无法单击。

学生和老师对此感到高兴。

该程序只需要几行用户编写的代码,并带有一个简单的方程式即可计算将按钮移动到何处。我不认为其他任何学生都知道了这一点,但是有几个是接近的。


7
我的同事不仅在娱乐方面曾经在某些软件中做到过这一点,还只是消息框中的“确定”按钮。这是一个内部使用的应用程序,因此不会被皱眉。它只在蓝色的月亮里做过一次。当然他们会打电话给他,他会说,如果他要相信的话,他需要看到它的发生。所以他会流连忘返,当然那在他在那里时不会发生……
Jason D

我记得这样的事..但是它在闪光中..问题是“你是同性恋吗?” ..以及点击烟花事件的按钮。
glasnt 2010年

2
那将是一个有趣的时间,教人们通过制表符和空格进行导航。
davidahines 2011年

23

当我第一次发现bash前炸弹时,我认为它真的很甜。如此简单,却能做到的很整洁:

:(){ :|:& };:


12
对于linux新手:不要运行,否则您将失去所有工作。
Behrooz

@Behrooz,取决于你的发行版,有的建在任意线程/叉限制。
剃刀风暴

它在SuSE上取得了巨大的成功,但在大多数基于debian的发行版上却一无所获。
Behrooz

那,以及用户限制,刷新磁盘缓存的频率,文件系统...
new123456 2011年

22

这是骗人的,甚至不是遥不可及的,但是我曾经使用Allegro图形库在20行C ++中编写了一个射击游戏。对于一条线是什么,没有真正的标准,但是那是前一阵子,纯粹是出于娱乐目的。它甚至具有粗糙的声音效果。

看起来是这样的:

20行http://img227.imageshack.us/img227/8770/20linesxx0.png

这是代码(编译):

bool inside(int x, int y, int x2, int y2) { return (x>x2&&x<x2+20&&y>y2&&y<y2+10); }
int main() {
  BITMAP* buffer;
  float px,shotx,shoty,monstars[8],first,rnd,pressed,points = 0, maxp = 0;
  unsigned char midi[5] = {0xC0,127,0x90,25,0x54}, plgfx[] = {0,0,0,10,3,10,3,5,6,5,6,10,8,12,10,10,10,5,13,5,13,10,16,10,16,0,13,0,13,2,3,2,3,0,0,0}, mongfx[] = {0,0, 10,5, 20,0, 17,8, 15,6, 10,16, 5,6, 3,8, 0,0};
  allegro_init(), set_color_depth(32), set_gfx_mode(GFX_AUTODETECT_WINDOWED,320,240,0,0), install_timer(), install_keyboard(),  install_mouse(), buffer = create_bitmap(320,240),srand(time(NULL)),install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT,""),clear_to_color(buffer,makecol32(100,100,255));
    while ((pressed=(!key[KEY_Z]&&pressed)?0:pressed)?1:1&&(((shoty=key[KEY_Z]&&shoty<0&&pressed==0?(pressed=1?200:200):first==0?-1:shoty)==200?shotx=px+9:0)==9999?1:1) && 1+(px += key[KEY_LEFT]?-0.1:0 + key[KEY_RIGHT]?0.1:0) && 1+int(px=(px<0?0:(px>228?228:px))) && !key[KEY_ESC]) {
    rectfill(buffer,0,0,244,240,makecol32(0,0,0));
    for(int i=0;i<8;i++) if (inside(shotx,shoty,i*32,monstars[i])) midi_out(midi,5);
        for (int i=0; i<8; monstars[i] += first++>8?(monstars[i]==-100?0:0.02):-100, points = monstars[i]>240?points-1:points, monstars[i]=monstars[i]>240?-100:monstars[i], points = inside(shotx,shoty,i*32,monstars[i])?points+1:points, (monstars[i] = inside(shotx,shoty,i*32,monstars[i])?shoty=-1?-100:-100:monstars[i]), maxp = maxp>points?maxp:points, i++) for (int j=1; j<9; j++) line(buffer,i*32+mongfx[j*2 - 2],monstars[i]+mongfx[j*2-1],i*32+mongfx[j*2],monstars[i]+mongfx[j*2+1],makecol32(255,0,0));
    if (int(first)%2000 == 0 && int(rnd=float(rand()%8))) monstars[int(rnd)] = monstars[int(rnd)]==-100?-20:monstars[int(rnd)]; // randomowe pojawianie potworkow
    if (shoty>0) rectfill(buffer,shotx,shoty-=0.1,shotx+2,shoty+2,makecol32(0,255,255)); // rysowanie strzalu
    for (int i=1; i<18; i++) line(buffer,px+plgfx[i*2 - 2],200-plgfx[i*2-1],px+plgfx[i*2],200-plgfx[i*2+1],makecol32(255,255,0));
    textprintf_ex(buffer,font,250,10,makecol32(255,255,255),makecol32(100,100,255),"$: %i   ",int(points)*10);
    textprintf_ex(buffer,font,250,20,makecol32(255,255,255),makecol32(100,100,255),"$$ %i   ",int(maxp)*10);
    blit(buffer, screen, 0, 0, 0, 0, 320,240);
  }
} END_OF_MAIN()

5
这怎么教任何人?无关紧要,酷!哈!爱它!
slezica 2011年

21

在当今时代,JavaScript是一种很好的方式来展示如何使用一些真正的基本工具(例如记事本)进行编程。

jQuery效果对于任何想让朋友赞叹的人来说都是一个很好的起点!

在这一步中,只需单击页面的空白。

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
$(document.body).click(function () {
  if ($("#pic").is(":hidden")) {
    $("#pic").slideDown("slow");
  } else {
    $("#pic").slideUp();
  }
});
</script>
</head>
<body><img id="pic" src="http://www.smidgy.com/smidgy/images/2007/07/26/lol_cat_icanhascheezburger.jpg"/>
</body>
</html>

1
我会同意的。您可以打开记事本并开始使用Java脚本进行编码,然后打开浏览器,我相信您的学生会印象深刻。这些是每个人都拥有的工具,他们可以查找许多不同的效果和东西,就像乔恩的例子一样。
杰夫·雷迪

1
我认为使用库向某人教授一种相当简单的语言不是一个好主意。您无需使用jQuery就可以轻松地做到这一点,对于初学者,您应该这样做。库不能代替实际语言。
有些盖伊

对于javascript,jQuery不能替代javascript,它可以替代(高度可变的)dom。对于任何人来说,能够回避都是一件好事。
卡扎伊2011年

20

您可能会考虑的一件事是Robocode之类的东西,其中大量的编码被抽象出来,而您基本上只是告诉机器人该怎么做。一个简单的10行功能可以使机器人做很多事情,并且具有非常直观和易于遵循的结果。

Robocode本身可能不适合该任务,但是这种事情是将书面代码与计算机上的视觉动作相关联的好方法,而且当您需要举一些示例时,也很有趣。

public class MyFirstJuniorRobot extends JuniorRobot {
 public void run() {
  setColors(green, black, blue);
  // Seesaw forever
  while (true) {
   ahead(100); // Move ahead 100
   turnGunRight(360); // Spin gun around
   back(100); // Move back 100
   turnGunRight(360); // Spin gun around
  }
 }
 public void onScannedRobot() {
  turnGunTo(scannedAngle);
  fire(1);
 }
 public void onHitByBullet() {
  turnAheadLeft(100, 90 - hitByBulletBearing);
 }
}

6
不了解robocode,但是在使用Logo后我开始进行编码。能够使用向前,向后,向左,向右等方向绘制房屋。它使您进入执行大型任务的简单指令的思维定式。
罗宾·戴斯2009年

1
是的,我在小学的计算机实验室学习了徽标。我是其中的孩子之一,他们除了想像酷之外,还想了解更多。
特拉维斯

1
为RoboCode +1!我喜欢robocode,我们之间经常进行竞争,看看谁会提出最好的算法
Andreas Grech

18

所以有一天,我决定自己受够了。我学钢琴。看到像Elton John这样的人掌握了这种键盘知识,这使我确信这是我想要做的。

实际上学习钢琴是一个巨大的失望。即使完成了八年级的钢琴课,我仍然对钢琴演奏的精神印象与享受活动的初衷如此不同印象深刻。

但是,我完全喜欢的只是我对音乐理论的三个初级等级。我了解了音乐的构造。我终于能够从表演书面音乐的世界过渡到创作自己的音乐。随后,我得以开始玩自己想玩的游戏。


不要试图使新程序员,特别是年轻的程序员眼花azz乱。整个“少于十行简单代码”的概念似乎引起了“向我展示聪明的东西” 的情绪。

您可以向新程序员展示一些聪明的东西。然后,您可以教同一个程序员如何复制这种“性能”。但这并不是让他们迷上编程的原因。教他们基本知识,让他们合成自己聪明的十行代码。

我将向新程序员展示以下Python代码:

input = open("input.txt", "r")
output = open("output.txt", "w")

for line in input:
    edited_line = line
    edited_line = edited_line.replace("EDTA", "ethylenediaminetetraacetic acid")
    edited_line = edited_line.replace("ATP", "adenosine triphosphate")
    output.write(edited_line)

我意识到我不需要分配lineedited_line。但是,这只是为了使情况保持清楚,并表明我没有编辑原始文档。

在不到十行中,我详细说明了一个文档。当然,还要确保向新程序员显示所有可用的字符串方法。更重要的是,我展示了我可以做的三件有趣的事情:变量赋值,循环,文件IO和标准库的使用。

我想您会同意此代码不会令人眼花。乱。实际上,这有点无聊。不-实际上,这很无聊。但是,请将该代码显示给新程序员,看看该程序员是否无法在一周(甚至不是一天)内将脚本的每个部分重新用于更多有趣的事情。当然,这对您来说是令人讨厌的(也许使用此脚本来创建简单的HTML解析器),但是其他一切都需要时间和经验。


17

像大多数其他评论者一样,我开始写代码来解决数学问题(或为我要设计的真正糟糕的游戏创建图形-例如印第安纳·琼斯与僵尸)。

真正让我着迷的(从数学和编程上来说)是从基于文本的游戏,选择自己的冒险风格的游戏...到更多基于图形的游戏。我开始为方格纸上色并绘制像素,直到进入几何图形……然后发现如何使用方程式绘制曲线,直线,盒子等。

我的意思是,我真的可以涉足诸如处理(http://processing.org/)之类的事情,其中典型的程序如下所示:

void setup() 
{
  size(200, 200); 
  noStroke();
  rectMode(CENTER);
}

void draw() 
{   
  background(51); 
  fill(255, 204);
  rect(mouseX, height/2, mouseY/2+10, mouseY/2+10);
  fill(255, 204);
  int inverseX = width-mouseX;
  int inverseY = height-mouseY;
  rect(inverseX, height/2, (inverseY/2)+10, (inverseY/2)+10);
}

对我来说,这是未来的“标志”。

有简单的“ hello world”示例,它们可以快速使某人绘制和更改代码,并了解如何破坏事物以及发生什么奇怪的“事故”……一直到更高级的交互和分形创建……


+1我认为处理是传授算法思维的好方法,这是初学者需要学习的最重要主题。
尼尔斯

15

您可以使用以下脚本编写 AutoIt,该模糊了使用传统应用程序和编程之间的界限。

例如,一个脚本打开了记事本,并让自己的计算机通过一个消息框在记事本中侮辱他们,然后没有留下任何动作的痕迹:

Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("You smell of human.")
Sleep(10000)
MsgBox(0, "Humans smell bad", "Yuck!")
WinClose("Untitled - Notepad")
WinWaitActive("Notepad", "Do you want to save")
Send("!n")

++我不确定它适合什么课程计划,但是很可爱。
Mike Dunlavey,2009年

13

我记得当我第一次开始编码循环时总是给我留下深刻的印象。您编写5至10行代码(或更少),并打印数百行(或您指定的数量)。(我首先学习过PHP和Java)。

for( int i = 0; i < 200; i++ )
{
   System.out.println( i );
}

13

我认为一个适合学生上手的好地方可能是Greasemonkey。userscripts.org上有成千上万个示例脚本,非常好的阅读材料,其中一些很小。Greasemonkey脚本会影响网页,如果不进行操作,学生将已经熟悉该网页。Greasemonkey本身提供了一种非常简单的方法,可以在测试期间编辑和启用/禁用脚本。

例如,以下是“ Google两栏”脚本:

result2 = '<table width="100%" align="center" cellpadding="10" style="font-size:12px">';
gEntry = document.evaluate("//li[@class='g'] | //div[@class='g'] | //li[@class='g w0'] | //li[@class='g s w0']",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for (var i = 0; i < gEntry.snapshotLength; i++) {
  if (i==0) { var sDiv = gEntry.snapshotItem(i).parentNode.parentNode; }
  if(i%2 == 0) { result2 += '<tr><td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td>'; }
  if(i%2 == 1) { result2 += '<td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td></tr>'; }
}
sDiv.innerHTML = result2+'</table>';

if (document.getElementById('mbEnd') !== null) { document.getElementById('mbEnd').style.display = 'none'; }

10

这是一个非常基本的基于文​​本的c#程序,它模拟老虎机的旋转动作。它不包括中奖或现金支付的不同赔率,但这对学生来说可能是一个不错的练习。

抱歉,超过10行。

string[] symbols = new[] { "#", "?", "~" }; // The symbols on the reel
Random rand = new Random();

do
{
    string a="",b="",c="";

    for( int i = 0; i < 20; i++ )
    {
        Thread.Sleep( 50 + 25 * i ); // slow down more the longer the loop runs

        if( i < 10 )
            a = symbols[rand.Next( 0, symbols.Length )];

        if( i < 15 )
            b = symbols[rand.Next( 0, symbols.Length )];

        c = symbols[rand.Next( 0, symbols.Length )];

        Console.Clear();
        Console.WriteLine( "Spin: " + a + b + c );
    }

    if( a == b && b == c )
        Console.WriteLine( "You win. Press enter to play again or type \"exit\" to exit" );
    else
        Console.WriteLine( "You lose. Press enter to play again or type \"exit\" to exit" );
}
while( Console.ReadLine() != "exit" );

9

使用Tcl,您可以使用一个简单的文本编辑器,该文本编辑器带有一个保存按钮,其中包含大约12行代码(但如果不打开,则需要另外8行代码)。它适用于所有标准平台:

pack [frame .toolbar] -side top -fill x
pack [button .save -text save -command save] -in .toolbar -side left
pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side right -fill y
pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true
proc save {} {
    set filename [tk_getSaveFile]
    if {$filename ne ""} {
        set f [open $filename w]
        puts $f [.text get 1.0 end-1c]
        close $f
    }
}

我意识到目标是10行,因此,如果您希望坚持10行或更少,那么没有负载或保存的简单文本编辑器就只有2行。不太破旧。

pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side left -fill y
pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true

在您选择的平台上使用“ wish filename ” 执行以上任一代码块。大多数* nix和Mac都附带了Wish,但您必须为Windows手动安装它。

更进一步,该两行脚本也可以用python编写,尽管它需要八行,但仍低于10行目标:

from Tkinter import *
root=Tk()
text = Text(wrap="word")
sb = Scrollbar(orient="vertical", command=text.yview)
text.configure(yscrollcommand=sb.set)
sb.pack(side="right", fill="y")
text.pack(side="left", fill="both", expand=True)
root.mainloop()

9

小书签呢?它将向他们展示如何在不需要任何开发工具的情况下操纵他们每天使用的某些东西(Internet)。


我想要这个建议,但最好有一个例子,并从中可以学到什么。例如问题中给出的示例:[code] javascript:alert(4(5 * 5)/ 10 + 9(.25 + .75)); [/ code]显示操作顺序。
tylermac

8

如果您负担得起的硬件,使用Arduino板+处理将产生一些很酷的东西,尽管对于可能对编程完全不感兴趣的人来说可能有点高级。


8

我最近在我编写过的最短,最有用的程序”一文中写道。

简介:我早在1996年就编写了3行VB6应用程序,至今仍每天使用。将exe拖放到“发送至”文件夹中之后。它使您可以右键单击资源管理器中的文件,然后将该文件的完整路径发送到剪贴板。

Public Sub Main()   
    Clipboard.SetText Command$   
End Sub  

为什么Clipboard.Clear呢?它会删除剪贴板中的所有内容,甚至是非文本数据(例如图像数据)。通常这根本不是您想要的。
Konrad Rudolph,2009年

好吧,那么最短的程序可能需要是当前大小的一半...
JohnFx

真的很整洁。我讨厌不得不输入长路径,然后想知道是否有错字
Sylverdrag

“现代” Windows版本中的AFAIK与复制文件时完全一样(Ctrl + C)...仅复制文件名。有人可以尝试这个吗(因为我没有窗户)?
opatut,2011年

我有Windows 7,但没有这样做。
JohnFx 2011年

7

有趣的是,您提到了Mandelbrot集,因为用GW-BASIC创建分形就是激发我对高中编程的热爱(大约在1993年)。在开始学习分形之前,我们编写了无聊的标准差应用程序,但我仍然打算从事新闻业。

但是,一旦我看到那个冗长且难以编写的BASIC程序生成“分形地形”,我就迷上了,我再也没有回头。它改变了我对数学,科学,计算机以及学习方式的思考方式。

我希望您能找到对学生有相同影响的程序。


这对一个学期的项目来说很棒。我希望我在教学时能想到这一点。
Mike Dunlavey,2009年


6

我确定它会变成10行以上的代码,但是您是否考虑过基于表单的应用程序,在该应用程序中,按下按钮会执行诸如更改背景颜色或更改文本大小之类的事情吗?这将向他们展示交互式程序如何工作。它还可以向他们表明,作为程序员,他们完全可以控制计算机(程序)的工作。

希望这将使他们针对他们可能会更改的其他事情提出建议,然后针对他们可能想要做的其他事情提出建议。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.