我正在寻找最酷的事情,你可以在几行简单的代码。我相信你可以用Haskell用15行写一个Mandelbrot集,但是很难理解。

我的目标是启发学生编程很酷。

我们知道编程很酷,因为你可以创造任何你想象到的东西——它是最终的创意出口。我想激励这些初学者,让他们尽可能多地克服早期学习的困难。

Now, my reasons are selfish. I'm teaching an Intro to Computing course to a group of 60 half-engineering, half business majors; all freshmen. They are the students who came from underprivileged High schools. From my past experience, the group is generally split as follows: a few rock-stars, some who try very hard and kind of get it, the few who try very hard and barely get it, and the few who don't care. I want to reach as many of these groups as effectively as I can. Here's an example of how I'd use a computer program to teach:

Here's an example of what I'm looking for: a 1-line VBS script to get your computer to talk to you: CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it") I could use this to demonstrate order of operations. I'd show the code, let them play with it, then explain that There's a lot going on in that line, but the computer can make sense of it, because it knows the rules. Then I'd show them something like this: 4(5*5) / 10 + 9(.25 + .75) And you can see that first I need to do is (5*5). Then I can multiply for 4. And now I've created the Object. Dividing by 10 is the same as calling Speak - I can't Speak before I have an object, and I can't divide before I have 100. Then on the other side I first create an InputBox with some instructions for how to display it. When I hit enter on the input box it evaluates or "returns" whatever I entered. (Hint: 'oooooo' makes a funny sound) So when I say Speak, the right side is what to Speak. And I get that from the InputBox. So when you do several things on a line, like: x = 14 + y; You need to be aware of the order of things. First we add 14 and y. Then we put the result (what it evaluates to, or returns) into x.

这就是我的目标,有一堆很酷的例子来演示,并在他们玩得开心的时候教他们。我在我室友身上尝试了这个例子,虽然我可能不会把它作为第一课,但她喜欢它,并学到了一些东西。

一些很酷的数学程序,可以做出漂亮的图形或容易理解的形状,这是很好的想法,我将研究这些。这里有一些复杂的actionscript示例,但这有点太高级了,我不能教flash。你还有什么其他的想法吗?


当前回答

你可以创建一个选择随机数的应用程序。你得猜一下。如果你错了,它会说:更高或更低。如果你猜对了,这是个不错的消息。

为学生们演奏很酷。

简单的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!')

埃里克建议让电脑猜数字。这也可以在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)

其他回答

当史蒂夫·沃兹尼亚克(Steve Wozniak)制作第一台Apple II时,他喜欢用Apple Basic来展示一款Breakout游戏,他当场就输入了这个游戏。我想大概有10行;我希望我能把它粘贴在这里。你也可以在Processing这样的系统中这样做。

当我第一次想出bash叉式炸弹的时候,我觉得它真的很可爱。如此简单,但它能做的事情却很整洁:

:(){ :|:& };:

使用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行或更少,一个简单的文本编辑器没有加载或保存只有两行。这还不算太寒酸。

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文件名”的上述代码块中的任何一个。Wish安装在大多数*nix和mac上,但你必须手动安装windows。

更进一步,两行脚本也可以用python编写,尽管需要8行,但仍然低于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()
import sys
for y in range(80):
    for x in range(80):
        c = complex(x-40.0,y-40.0) / 20.0
        z = 0.0
        for i in range(100):
            z = z*z+c
        sys.stdout.write('#' if abs(z) < 2.0 else ' ')
    sys.stdout.write('\n')

我倾向于认为,人们会对那些与他们生活有关或相关的东西印象深刻。我会试着以他们知道和理解的东西为基础编写我的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行代码与一些“酷、有趣、与学生相关”的东西联系起来,你的示例也会变得酷、有趣、与学生相关。

好运!

[是的,我知道我错过了使用语句和Main方法的几行,但我猜这10行并不需要真的是10行]