Quelle est la chose la plus cool que vous puissiez faire en moins de 10 lignes de code simple? Aidez-moi à inspirer les débutants! [fermé]


406

Je cherche la chose la plus cool que vous puissiez faire en quelques lignes de code simple. Je suis sûr que vous pouvez écrire un ensemble de Mandelbrot en Haskell en 15 lignes mais c'est difficile à suivre.

Mon objectif est d'inspirer les étudiants que la programmation est cool .

Nous savons que la programmation est cool parce que vous pouvez créer tout ce que vous imaginez - c'est le débouché créatif ultime. Je veux inspirer ces débutants et leur faire surmonter autant de bosses d'apprentissage précoce que possible.

Maintenant, mes raisons sont égoïstes. J'enseigne un cours d' introduction à l'informatique à un groupe de 60 mi-ingénieurs, mi-affaires majors; tous les étudiants de première année. Ce sont les élèves qui viennent de lycées défavorisés. D'après mon expérience passée, le groupe est généralement divisé comme suit: quelques rock-stars , certains qui essaient très fort et en quelque sorte de l' obtenir, quelques-uns qui essaient très fort et l' obtiennent à peine , et quelques-uns qui s'en moquent. Je veux toucher autant de ces groupes que possible. Voici un exemple de la façon dont j'utiliserais un programme informatique pour enseigner:

Voici un exemple de ce que je recherche: un script VBS à 1 ligne pour que votre ordinateur vous parle:

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

Je pourrais l'utiliser pour démontrer l'ordre des opérations. Je montrerais le code, les laisser jouer avec, puis expliquer que beaucoup de choses se passent dans cette ligne, mais l'ordinateur peut le comprendre, car il connaît les règles. Ensuite, je leur montrerais quelque chose comme ceci:

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

Et vous pouvez voir que je dois d'abord faire (5 * 5). Ensuite, je peux multiplier pour 4. Et maintenant, j'ai créé l'objet. Diviser par 10 équivaut à appeler Parler - Je ne peux pas parler avant d'avoir un objet et je ne peux pas diviser avant d'avoir 100. Ensuite, de l'autre côté, je crée d'abord un InputBox avec quelques instructions pour l'afficher. . Lorsque j'appuie sur Entrée dans la zone de saisie, il évalue ou "renvoie" tout ce que j'ai entré. (Indice: 'oooooo' fait un drôle de son) Donc quand je dis Parle, le côté droit est ce qu'il faut dire. Et je l'obtiens de la InputBox.

Donc, lorsque vous faites plusieurs choses sur une ligne, comme:

x = 14 + y;

Vous devez être conscient de l'ordre des choses. Nous ajoutons d'abord 14 et y. Ensuite, nous mettons le résultat (ce qu'il évalue ou renvoie) dans x.

C'est mon objectif, avoir un tas de ces exemples sympas pour démontrer et enseigner la classe pendant qu'ils s'amusent. J'ai essayé cet exemple sur ma colocataire et bien que je ne puisse pas l'utiliser comme première leçon, elle l'a aimé et a appris quelque chose.

Certains programmes mathématiques sympas qui font de beaux graphiques ou des formes faciles à comprendre seraient de bonnes idées et je vais les examiner. Voici quelques exemples compliqués d'actionscript mais c'est un peu trop avancé et je ne peux pas enseigner le flash. Quelles autres idées avez-vous?


102
Je pense que les questions sur la façon d'enseigner la programmation sont excellentes et non triviales. Bonne chance avec ce que vous essayez de faire.
Mike Dunlavey

6
"mon objectif est d'inspirer les étudiants à ce que la programmation soit cool." Je ne pense pas que vous puissiez dire que la programmation est cool. Soit ils l'aiment, soit ils ne l'aiment pas.
Rik

2
Votre script VBS d'une ligne ne fonctionne pas sur mon Mac! :-P Bonne question cependant.
John Topley

1
J'aime toujours ce genre de choses, mais qui vous essayez d'impressionner, moi le joint Sierpinski ferait du bon travail. Pour un informaticien, quelque chose peut créer des fichiers, pour certaines personnes faire parler l'ordinateur serait impressionnant, etc. Donc, ce qui importe, c'est le public cible, alors vous définissez ce qui est cool.
Oakcool

5
83 personnes ont voté sur le fait que cette question est "excellente et non triviale" ... classée comme "non constructive" par 5 personnes qui ne sont apparemment pas d'accord. Le pouvoir n'est-il pas grandiose?
rg88

Réponses:


78

J'ai reçu une excellente réponse de mes enfants avec un script VB rapide pour manipuler un personnage Microsoft Agent. Pour ceux qui ne connaissent pas MS Agent, il s'agit d'une série de personnages animés à l'écran qui peuvent être manipulés via une interface COM. Vous pouvez télécharger le code et les caractères sur la page de téléchargement de Microsoft Agent .

Les quelques lignes suivantes feront apparaître le personnage de Merlin à l'écran, voleront, frapperont à l'écran pour attirer votre attention et vous salueront.

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"

Il existe de nombreuses autres commandes que vous pouvez utiliser. Vérifierhttp://www.microsoft.com/technet/scriptcenter/funzone/agent.mspx pour plus d'informations.

EDIT 2011-09-02 J'ai récemment découvert que Microsoft Agent n'est pas installé nativement sur Windows 7. Cependant, il est proposé ici en téléchargement séparé . Je n'ai pas testé cela, je ne peux donc pas vérifier s'il fonctionne.


C'est génial. Cela mérite bien plus de votes positifs.
Tom Ritter

Merci pour la reconnaissance Tom. Suce que je n'obtiendrai aucun point de représentant même si cela commence à augmenter les votes. :-P
Bob Mc

32
De cette façon, vous pouvez voir le trombone tout le temps : D
Pedery

8
@Bob BASIC est une langue pour débutants. VB n'est pas BASIC. VB est le couteau suisse que MS a créé pour répondre aux besoins de l'époque. De nos jours, il existe de bien meilleurs outils (beaucoup plus spécialisés) pour prendre sa place. VB n'est pas un mauvais langage, il a juste beaucoup de bagages excédentaires. Si je devais donner une raison totalement impartiale de ne pas l'utiliser, ce serait parce que MS abandonne lentement le support de VB. C'est une langue mourante. Attendez simplement que les scripts Office soient effectués avec JavaScript (qui est prévu dans un proche avenir), puis le déclin de VB sera une chose sûre.
Evan Plaice

3
@Evan - Merci pour la bonne réponse, plutôt que pour une chape religieuse. Bien fait. N'avait pas entendu parler du mouvement Javascript Office. Va enquêter.
Bob Mc

339

Entrez ce code dans votre barre d'adresse (dans votre navigateur) et appuyez sur Entrée. Ensuite, vous pouvez modifier tout le contenu de la page Web!

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

C'est le "one-liner" le plus cool que je connaisse =)


95
"One-liner" est un tel abus de langage. C'est vraiment 3 lignes. Tout code peut être composé d'une seule ligne si vous le souhaitez.
DisgruntledGoat

5
Cela semble vraiment bien, mais existe-t-il un moyen d'obtenir la page une fois qu'elle est modifiée?
Sylverdrag

51
Je l'aime tellement, j'ai voté pour vous 999999999 fois !! img707.imageshack.us/img707/4843/jshack.png
JRL

4
Ce n'est plus le cas dans Firefox car javascript: a été désactivé. Une honte.

2
@DisgruntledGoat, javascript:et void 0sont passe-partout: l'équivalent de int main() {et return 0; }en C. Et les deux autres lignes ne sont que des API de navigateur différentes qui font la même chose: la première est l'API IE, la seconde est l'API NetScape. HTML5 utilise contentEditable, donc à moins que vous ne vouliez prendre en charge Firefox 1.5 ou quelque chose du document.body.contentEditable='true';
genre

201

Quand j'ai écrit cela pour la première fois.

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

Cela a époustouflé les gens! L'ordinateur s'est souvenu de leur nom!

EDIT: Juste pour ajouter à cela. Si vous pouvez convaincre un nouveau programmeur que c'est la chose la plus cool qu'il puisse faire, il deviendra le bon programmeur. De nos jours, vous pouvez faire presque tout ce que vous voulez avec une seule ligne de code pour exécuter une bibliothèque écrite par quelqu'un d'autre. Personnellement, je ne reçois absolument aucune satisfaction de faire cela et je vois peu d'avantages à l'enseigner.


15
serait mieux avec ce qui suit: 40 GOTO 30
dépenser

8
+1 pour afficher le nom d'utilisateur, les gens aiment toujours voir leur propre nom affiché. @saua, comment est-ce que ce n'est pas une boucle d'impression infinie? Il revient à la ligne 30, pas à la ligne 20.
z -

13
Doit être sûrement 10 pour que quelqu'un d'autre puisse entrer son nom ...
Omar Kooheji

17
Vous avez oublié 35 PRINT CHR $ (7)
Adam Jaskiewicz

6
c'est ainsi que j'ai aussi appris la programmation. C'est la meilleure réponse imo. +1 pour accepter celui-ci
Cliquez sur Upvote

180

PHP - le joint Sierpinski alias le Triforce

OK, c'est 15 lignes de code mais le résultat est génial! C'est le genre de choses qui m'ont fait paniquer quand j'étais enfant. C'est du manuel 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);

joint sierpinski


25
Pour mémoire, c'est un joint Sierpinski.
chaos

6
C'est génial, mais je pense que cela devrait arriver vers le milieu du cours, car il s'appuie sur un certain nombre de concepts, comme les boucles et les tableaux.
Mike Dunlavey

4
@Masi: l'idée générale est d'avoir trois points fixes qui sont les coins du triangle, et un point "courant" que vous continuez à mettre à jour. Pour faire un mouvement, choisissez l'un des coins au hasard et déplacez le point actuel à mi-chemin vers ce coin. Couleur au point courant. Ensuite, effectuez un autre mouvement de la même manière, puis à nouveau quelques milliers de fois de plus et le motif apparaîtra. Ensuite, essayez-le avec un nombre différent de coins, ou modifiez la fraction par laquelle le point actuel saute vers le coin, pour voir comment il affecte le motif.
Daniel Earwicker

18
Pour mémoire, ce n'est pas un joint Sierpinski ... C'est en fait la Triforce. en.wikipedia.org/wiki/The_Legend_of_Zelda
jason

2
Ce code me semble bizarre car je vois normalement cela se faire avec la récursivité (également avec très peu de lignes de code). En fait, les fractales sont une bonne introduction à la récursivité dans les cours d'informatique. Mais il me semble que ce code sera assez inefficace, peignant et repeignant beaucoup de pixels en raison de son approche aléatoire.
Steve Wortham le

105

Microsoft a Small Basic , un IDE pour les "enfants".

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

Il est spécialement conçu pour montrer à quel point la programmation est cool.


80
En fait, ça craint, car ces appels de bibliothèque semblent magiques. Vous les configurez pour être des enfants de script VB. J'ai peur qu'ils ne se cachent jamais dans cette zone de "magie noire" et restent sur la zone de plomberie "sûre". ... Oh regardez, voici comment créer un navigateur Internet en une seule ligne! MSIEControl (.. blabla que ce soit ...). Show ()
hasen

88
Je ne pense pas que les enfants soient des idiots. Si vous les passionnez pour les possibilités de programmation, ils découvriront comment faire des choses plus avancées par eux-mêmes. À tout le moins, les jeunes garçons infectés par la testostérone essaieraient d'apprendre les choses les plus obscures et magiques avant même de savoir ce qui s'est passé.
Tim Lin

28
@hansen j, c'est injuste, tout le monde doit commencer quelque part.
John Farrell,

30
Ce n'est pas un diplôme CS pour les enfants, c'est un jouet de programmation. Quelle que soit cette passerelle, c'est pour amener les enfants à voir le côté amusant de la programmation qui est génial, il n'a pas besoin d'être ASM.
Copas

29
Connaissant les enfants que j'ai essayé d'enseigner, il faudrait environ dix secondes avant d'essayer pic = Flickr.GetRandomPicture ("boobs")
Iain Galloway

83

J'ai tendance à penser que les gens sont impressionnés par des choses auxquelles ils peuvent se rapporter ou qui sont pertinentes pour leur vie. J'essaierais de baser mes 10 lignes de code sur quelque chose qu'ils connaissent et comprennent. Prenez, par exemple, Twitter et son API. Pourquoi ne pas utiliser cette API pour créer quelque chose de cool. Les 10 lignes de code suivantes renverront la "chronologie publique" de Twitter et l'afficheront dans une application console ...

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));
    }

Mon exemple de code n'est peut-être pas le meilleur pour vos élèves. Il est écrit en C # et utilise .NET 3.5. Donc, si vous allez leur enseigner PHP, Java ou C ++, cela ne sera pas utile. Cependant, mon point est qu'en associant vos 10 lignes de code à quelque chose de "cool, intéressant et pertinent pour les étudiants, votre échantillon devient également cool, intéressant et pertinent.

Bonne chance!

[Oui, je sais que j'ai manqué quelques lignes d'utilisation des instructions et de la méthode Main, mais je suppose que les 10 lignes n'avaient pas besoin d'être littéralement 10 lignes]


C'est vraiment bien! Je ne connaissais pas l'objet SyndicationFeed - merci pour le code!
Tad Donaghe

Le public cible est non-geeks, ergo, ils ne se soucient pas du tweeter?
peufeu

80

Il s'agit d'un serveur Telnet Python qui demandera le nom des utilisateurs et leur dira bonjour. Cela a l'air cool parce que vous communiquez avec votre programme à partir d'un autre ordinateur via le réseau.

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

Je pense qu'il est difficile d'être un enseignant en informatique de nos jours. Je suis. Nous sommes confrontés à une bataille de plus en plus abrupte. Nos étudiants sont des utilisateurs incroyablement sophistiqués et il faut beaucoup pour les impressionner. Ils ont tellement d'outils à leur disposition qui font des choses incroyables.

Une calculatrice simple en 10 lignes de code? Pourquoi? J'ai une TI-86 pour ça.

Un script qui applique des effets spéciaux à une image? C'est à ça que sert Photoshop. Et Photoshop souffle tout ce que vous pouvez faire en 10 lignes.

Que diriez-vous d'extraire un CD et de convertir le fichier en MP3? Euh, j'ai déjà 50 000 chansons que j'ai obtenues de BitTorrent. Ils sont déjà au format MP3. Je les joue sur mon iPhone. Qui achète des CD de toute façon?

Pour initier les utilisateurs avertis à la programmation, vous devrez trouver quelque chose qui soit:

a) applicable à quelque chose qu'ils trouvent intéressant et cool, et b) fait quelque chose qu'ils ne peuvent pas déjà faire.

Supposons que vos élèves aient déjà accès au logiciel le plus cher. Beaucoup d'entre eux ont la version complète d'Adobe CS5.5 (prix de détail: 2600 $; prix réel: gratuit) et peuvent facilement obtenir n'importe quelle application qui casserait normalement le budget de votre service.

Mais la grande majorité d'entre eux n'ont aucune idée du fonctionnement réel de ces "trucs informatiques".

Ils sont incroyablement créatifs: ils aiment créer des choses. Ils veulent juste pouvoir faire ou faire quelque chose que leurs amis ne peuvent pas. Ils veulent se vanter de quelque chose.

Voici certaines choses que j'ai trouvées en résonance avec mes élèves:

  • HTML et CSS. De ceux-ci, ils apprennent comment fonctionnent les thèmes MySpace et peuvent les personnaliser.
  • Mashups. Ils les ont tous vus, mais ne savent pas comment les créer. Découvrez Yahoo! Pipes . Il existe de nombreux moments d'apprentissage, tels que RSS, XML, filtrage de texte, cartographie et visualisation. Les widgets mashup terminés peuvent être intégrés dans des pages Web.
  • Ouvrages d'art. Regardez l'art sans contexte . La récursivité et la randomisation sont essentielles pour faire de belles images.
  • Raconter des histoires. Avec un environnement de programmation 3D facile à utiliser comme Alice , il est facile de créer des histoires engageantes de haute qualité en utilisant rien de plus que le glisser-déposer.

Aucun de ceux-ci n'implique de programmation au sens traditionnel. Mais ils exploitent de puissantes bibliothèques. Je les considère comme une programmation différente.


11
+1 J'ai adoré la façon dont vous décrivez les enfants de nos jours qui ont 50 000 chansons de bittorrent et Adobe CS4 pour rien, c'est bien sûr la réalité
thomasrutter

Écrivez un algorithme de recherche binaire simple en python. Déchirez un annuaire téléphonique en deux fois plusieurs fois pour décrire son fonctionnement. Ce sont les aspects simples mais puissants de la programmation que les programmeurs expérimentés négligent souvent et les novices regardent @ avec admiration. la plupart des gens ne réalisent pas que leurs moniteurs rafraîchissent au moins la moitié des pixels de leur moniteur à 60-120 / sec. faire des courses de vitesse humaine vs informatique. truc amusant. voir ceci pour plus d'idées: academicearth.org/courses/introduction-to-computer-science-i : et, quoi que vous fassiez ... ne leur enseignez pas l'ANSI C comme première langue. J'y suis allé, c'était nul.
Evan Plaice

3
Si vous personnalisez des sites, pourquoi ne pas utiliser Greasemonkey?
new123456

Juste quelques réflexions sur vos exemples: re photoshop, il vous suffit de souligner l'évidence - avec photoshop vous pouvez changer 1 image, avec les scripts vous pouvez changer des centaines de milliers. Et en ce qui concerne les MP3, vous avez raison, personne ne télécharge plus de CD, mais vous pourriez (sans la légalité) expliquer qu'ils pourraient écrire un programme pour télécharger automatiquement la dernière musique directement sur leur iPod.
Jeff Welling

@JeffWelling bien avec Photoshop, vous pouvez également effectuer des lots et des actions pour apporter ces modifications à n'importe quel nombre de fichiers. Il est étonnant de voir combien on tient pour acquis de nos jours avec les ordinateurs.
John

63

J'ai trouvé un grand favori (dans 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>"

J'ai trouvé que les étudiants débutants ont quelques conceptions qui doivent être corrigées.

  • Les ordinateurs ne lisent pas votre esprit.
  • Les ordinateurs ne font qu'une chose à la fois, même s'ils le font si vite qu'ils semblent tout faire en même temps.
  • Les ordinateurs ne sont que des machines stupides et ne font que ce qu'on leur dit.
  • Les ordinateurs ne reconnaissent que certaines choses et ce sont comme des blocs de construction.
  • Un concept clé est qu'une variable est quelque chose qui contient une valeur et que son nom est différent de cette valeur.
  • La distinction entre l'heure à laquelle vous modifiez le programme et l'heure à laquelle il s'exécute.

Bonne chance avec ta classe. Je suis sûr que tu feras bien.

PS Je suis sûr que vous comprenez que, avec du matériel et des compétences, vous enseignez également une attitude, et c'est tout aussi important.


Les ordinateurs modernes font bien plus d'une chose à la fois.
dreamlax

Mais, votre code fait-il plus d'une chose à la fois?
JeffO

5
@dreamlax: Vous avez bien sûr raison, mais ne séparons pas les cheveux. Nous parlons d'introduire des ordinateurs aux enfants et de leur donner les éléments de base de la construction mentale. Le parallélisme peut venir plus tard.
Mike Dunlavey

1
@Ben S: Avez-vous supprimé par hasard l'espace devant la ligne 10? J'avais mis cela parce qu'il semble que le formateur SO semble détacher la première ligne d'un espace. Je me demande s'il y a une meilleure façon de faire la ligne de code?
Mike Dunlavey

2
@foljs: Gosh! Vraiment? :-) dreamlax a fait la même remarque. Le fait est que lorsque vous travaillez avec des gens qui ne connaissent rien aux ordinateurs, il leur semble que tout se passe en même temps, donc nous devons surmonter cela, sans couper les cheveux. Donc, un concept vraiment basique est "D'abord il fait A, puis il fait B, et ainsi de suite."
Mike Dunlavey

62

Ce code C est peut-être obscurci, mais je l'ai trouvé très puissant

#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;}

Et voici le résultat ... En seulement 3 lignes ... Une sorte de fractale 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
Agréable! Dommage qu'il n'y ait aucun endroit là-bas qui dise "Bonjour tout le monde!"
Ponkadoodle

C'est joli! Modèle Mandelbrot: D
Aniket

45

Que diriez-vous de montrer que vous pouvez utiliser n'importe quel navigateur Web et entrer JavaScript dans la barre d'adresse et obtenir le code à exécuter?

EDIT: Accédez à une page avec beaucoup d'images et essayez ceci dans la barre d'adresse:

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
ok, mais tu devrais donner un exemple concret tu sais ..
hasen

1
@John: Veuillez donner un exemple concret. J'ai utilisé JS uniquement sur mon serveur en exportant le fichier JS. Je n'ai jamais mis le code dans ma barre d'adresse.
Léo Léopold Hertz 준영

7
Eh bien, ce n'est pas un exemple très excitant, mais vous pouvez faire javascript: alert ("Hello World");
John Topley

Je préfère: "javascript: for (var i = 0; i> -1; i ++) alert ('Félicitations, vous avez appuyé sur la touche' + i + 'fois!');". (Lisez ce code avant de lancer ...). ^^
Arnis Lapsa

+1 pour le facteur wow ... exemple assez spectaculaire :)
fretje

37

Vous pouvez créer une application qui sélectionne un nombre aléatoire. Et vous devez le deviner. Si vous vous trompez, il est dit: supérieur ou inférieur. Et si vous l'avez deviné, un joli message.

C'est cool de jouer pour les étudiants.

Version Python simple sans vérification d'erreur appropriée:

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 suggère que l' ordinateur devine le nombre. Cela peut également être fait dans 10 lignes de code (bien que le manque de vérification des erreurs soit encore plus grave: les nombres valides en dehors de la plage provoquent une boucle infinie):

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
Il serait plus intéressant de demander à l'utilisateur de choisir le nombre aléatoire, puis de le faire deviner par l'ordinateur.
Erik Forbes

15
Faites maintenant jouer ces deux programmes sur une socket.
Josh Lee

3
Ce serait mieux si l'ordinateur ne recevait pas directement le numéro. Vous devez dire à l'utilisateur de "choisir un nombre compris entre 1 et 100". Puis sortez "je suppose 50", et demandez l'entrée ("supérieur", "inférieur" ou "correct") et affinez votre supposition.
Ponkadoodle

J'ai fait cela avec mon fils (9) et cela a également l'avantage de se lancer dans la pensée algorithmique, quelle est la meilleure stratégie pour trouver le bon nombre dans le plus petit nombre de suppositions.
mbesso

Je pense que vous voulez raw_input. L'entrée est égale à eval(raw_input(prompt)). Voir entrée .
Jeff Kaufman

26

De retour en classe d'informatique au lycée, moi-même et quelques amis avons appris à la classe comment programmer avec Delphi. La classe était principalement axée sur la programmation avec Pascal, Delphi était donc une bonne étape suivante. Nous avons démontré la nature événementielle de Delphi et ses capacités RAD. À la fin de la leçon, nous avons montré à la classe un exemple d'application et leur avons demandé de le reproduire. L'application a demandé " Êtes-vous ivre? " Avec deux boutons Oui et Non . ... Je pense que vous savez ce qui va suivre ... le bouton Non a changé d'emplacement à la souris et a été presque impossible à cliquer.

Les étudiants et l'enseignant en ont profité.

Le programme ne nécessitait que quelques lignes de code écrit par l'utilisateur avec une équation simple pour calculer où déplacer le bouton. Je ne pense pas que les autres étudiants l'ont compris, mais quelques-uns étaient proches.


7
Non seulement divertissant, mais un de mes collègues l'a fait une fois dans certains logiciels, seulement c'était le bouton "OK" sur une boîte de message. C'était une application utilisée en interne, donc elle n'était pas désapprouvée. Il n'a fait cela qu'une fois dans une lune bleue. Bien sûr, ils l'appelleraient et il dirait qu'il avait besoin de voir cela se produire s'il voulait le croire. Alors il se promenait et bien sûr ça n'arriverait pas quand il était là ...
Jason D

Je me souviens de quelque chose comme ça .. mais c'était en flash .. et la question était "Êtes-vous gay?" .. et le bouton en cliquant sur un feu d'artifice.
glasnt le

2
Ce serait un moment intéressant pour apprendre aux gens à naviguer via l'onglet et l'espace.
davidahines

23

Quand j'ai découvert le forkbomb bash, je pensais que c'était vraiment adorable. Si simple, mais soigné dans ce qu'il peut faire:

:(){ :|:& };:

7
Voici une très bonne explication: cyberciti.biz/faq/understanding-bash-fork-bomb
hodgesmr

12
pour les nouveaux utilisateurs de Linux: ne courez pas, sinon vous perdrez tout votre travail.
Behrooz

@Behrooz, dépend de votre distribution, certains ont des limites de thread / fork arbitraires intégrées.
Razor Storm

Cela fait un grand bruit sur SuSE, mais ne fait rien sur la plupart des distributions basées sur Debian.
Behrooz

Cela, ainsi que les limites des utilisateurs, la fréquence à laquelle vos caches de disque sont vidés, votre système de fichiers ...
new123456

22

C'est de la triche, et même pas simple à distance, mais j'ai déjà écrit un shoot'em up en 20 lignes de C ++, en utilisant la bibliothèque graphique Allegro. Pas de vrais critères pour ce qu'est une ligne , mais c'était il y a un peu et elle était faite uniquement pour le plaisir. Il avait même des effets sonores grossiers.

Voici à quoi cela ressemblait:

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

Et voici le code ( devrait compiler):

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
Comment est-ce censé enseigner quoi que ce soit à quelqu'un? Sur une note indépendante, COOL! HA! J'ai adoré!
slezica

21

De nos jours, JavaScript est un excellent moyen de montrer comment vous pouvez programmer en utilisant des outils vraiment basiques, par exemple le bloc-notes.

Les effets jQuery sont un excellent point de départ pour tous ceux qui veulent épater leurs amis!

Dans celui-ci, cliquez simplement sur l'espace blanc de la page.

<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
Je serais d'accord. Vous pouvez ouvrir le bloc-notes et commencer à coder avec le script java, puis ouvrir un navigateur et je suis sûr que vos élèves seront impressionnés. Ce sont des outils que tout le monde a et ils peuvent rechercher de nombreux effets et trucs différents qui peuvent être faits comme l'exemple de Jon.
Jeff Reddy

1
Je ne pense pas que ce soit une bonne idée d'enseigner à quelqu'un la base d'un langage assez simple à l'aide d'une bibliothèque. Vous pouvez facilement le faire sans utiliser jQuery, et pour un débutant, vous devriez. Les bibliothèques ne remplacent pas la langue actuelle.
Some Guy

Dans le cas de javascript, jQuery n'est pas un remplacement pour javascript, c'est un remplacement pour les doms (très variables). Ce qui est formidable de pouvoir contourner, pour n'importe qui.
Kzqai

20

Une chose que vous pourriez considérer est quelque chose comme Robocode , dans lequel beaucoup de codage est abstrait et vous dites simplement à un robot quoi faire. Une simple fonction de 10 lignes peut faire beaucoup pour le robot et a un résultat très visuel et facile à suivre.

Peut-être que Robocode lui-même n'est pas adapté à la tâche, mais ce genre de chose est un bon moyen de relier le code écrit aux actions visuelles sur l'ordinateur, et c'est amusant à surveiller lorsque vous devez donner des exemples.

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
Je ne connais pas le robocode, mais je me suis mis au codage après avoir utilisé Logo. Pouvoir dessiner une maison en utilisant vers l'avant, vers l'arrière, vers la gauche, vers la droite, etc.
Robin Day

1
Oui, j'ai appris le logo dans un laboratoire informatique à l'école primaire. J'étais l'un des enfants qui, au-delà de penser que c'était cool, voulait en savoir plus.
Travis

1
+1 pour RoboCode! J'adore le robocode, et nous avions l'habitude de faire des compétitions entre nous pour voir qui trouverait les meilleurs algorithmes
Andreas Grech

18

Alors un jour, j'ai décidé que j'en avais assez. Je voudrais apprendre le piano. Voir des gens comme Elton John maîtriser une telle maîtrise du clavier m'a assuré que c'était ce que je voulais faire.

En fait, l'apprentissage du piano a été une énorme déception. Même après avoir terminé huit années de cours de piano, je n'étais toujours pas impressionné par la façon dont mon image mentale de jouer du piano était si différente de ma vision originale de profiter de l'activité.

Cependant, ce que j'ai vraiment apprécié, ce sont mes trois grades de rudiments de la théorie musicale. J'ai appris la construction de la musique. J'ai enfin pu passer du monde de la musique écrite à l'écriture de ma propre musique. Par la suite, j'ai pu commencer à jouer ce que je voulais jouer.


N'essayez pas d'éblouir les nouveaux programmeurs, en particulier les jeunes programmeurs. Toute la notion de «moins de dix lignes de code simple» semble susciter une ambiance de «Montrez-moi quelque chose d' intelligent ».

Vous pouvez montrer à un nouveau programmeur quelque chose d'intelligent. Vous pouvez ensuite apprendre à ce même programmeur comment reproduire cette "performance". Mais ce n'est pas ce qui les rend accro à la programmation. Apprenez-leur les rudiments et laissez-les synthétiser leurs dix intelligentes lignes de code.

Je montrerais à un nouveau programmeur le code Python suivant:

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)

Je me rends compte que je ne pas besoin d'attribuer lineà edited_line. Cependant, c'est juste pour garder les choses claires et pour montrer que je n'édite pas le document original.

En moins de dix lignes, j'ai verbalisé un document. Bien sûr, assurez-vous également de montrer au nouveau programmeur toutes les méthodes de chaîne disponibles. Plus important encore, j'ai montré trois choses fondamentalement intéressantes que je peux faire: l'affectation de variables, une boucle, les entrées-sorties de fichiers et l'utilisation de la bibliothèque standard.

Je pense que vous conviendrez que ce code n'éblouit pas. En fait, c'est un peu ennuyeux. Non - en fait, c'est très ennuyeux. Mais montrez ce code à un nouveau programmeur et voyez si ce programmeur ne peut pas réutiliser chaque partie de ce script pour quelque chose de beaucoup plus intéressant dans la semaine, sinon la journée. Bien sûr, cela vous sera désagréable (peut-être en utilisant ce script pour créer un analyseur HTML simple), mais tout le reste prend du temps et de l'expérience.


17

Comme la plupart des autres commentateurs, j'ai commencé à écrire du code pour résoudre des problèmes mathématiques (ou pour créer des graphiques pour des jeux vraiment terribles que je concevrais - des choses comme Indiana Jones contre Zombies).

Ce qui m'a vraiment commencé (à la fois en mathématiques et en programmation), c'est de passer du texte, choisissez vos propres jeux de style aventure ... à des jeux plus graphiques. J'ai commencé à colorier du papier millimétré et à tracer des pixels, jusqu'à ce que j'entre dans la géométrie ... et j'ai découvert comment utiliser des équations pour tracer des courbes et des lignes, des boîtes, etc.

Mon point est, j'aurais pu vraiment entrer dans quelque chose comme le traitement ( http://processing.org/ ) où un programme typique ressemble à ceci:

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);
}

Pour moi, c'est le "Logo" du futur.

Il y a des exemples simples de "bonjour" qui peuvent rapidement amener quelqu'un à dessiner et à changer le code et à voir comment les choses se brisent et quels étranges "accidents" peuvent être créés ... jusqu'à une interaction plus avancée et une création fractale ...


+1 Je pense que le traitement est un excellent moyen d'enseigner la pensée algorithmique, qui est le sujet le plus important que les débutants doivent apprendre.
Nils

15

Vous pouvez utiliser un script écrit avec AutoIt , ce qui brouille la frontière entre l'utilisation d'une application traditionnelle et la programmation.

Par exemple, un script qui ouvre le bloc-notes et fait insulter leur propre ordinateur dans celui-ci et via une boîte de message, puis ne laisse aucune trace de ses actions:

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")

++ Je ne sais pas où cela s'inscrirait dans un plan de leçon, mais c'est mignon.
Mike Dunlavey

13

Je me souviens quand j'ai commencé à coder des boucles pour la première fois. Vous écrivez 5 à 10 lignes de code (ou moins) et des centaines (ou autant que vous spécifiez) de lignes s'impriment. (J'ai d'abord appris en PHP et Java).

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

13

Je pense qu'un bon endroit pour un étudiant pour commencer pourrait être Greasemonkey . Il existe des milliers d'exemples de scripts sur userscripts.org, de très bonnes lectures, dont certains sont très petits. Les scripts Greasemonkey affectent les pages Web, que les étudiants seront déjà familiarisés avec l'utilisation, sinon la manipulation. Greasemonkey lui-même offre un moyen très simple de modifier et d'activer / désactiver les scripts pendant les tests.

À titre d'exemple, voici le script "Google Two Columns":

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

Il s'agit d'un programme c # textuel très rudimentaire qui simule l'action de rotation d'une machine à sous. Cela n'inclut pas les différentes chances de gagner ou les paiements en espèces, mais cela pourrait être un bon exercice pour les étudiants.

Désolé, c'est plus de 10 lignes.

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

Avec Tcl, vous avez un simple éditeur de texte avec un bouton d'enregistrement dans environ 12 lignes de code (mais pas d'ouverture, cela prendrait encore 8 lignes). Il fonctionne sur toutes les plateformes standard:

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
    }
}

Je me rends compte que l'objectif était de 10 lignes, donc si vous voulez que cela reste sur 10 lignes ou moins, un simple éditeur de texte sans chargement ni sauvegarde n'est que de deux lignes. Ce n'est pas trop minable.

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

Exécutez l'un des blocs de code ci-dessus avec "wish filename " sur la plate-forme de votre choix. Wish est livré avec la plupart des * nix et du mac, mais vous devrez l'installer manuellement pour Windows.

Pour aller plus loin, ce script de deux lignes peut également être écrit en python, bien qu'il prenne huit lignes, toujours sous l'objectif de 10 lignes:

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

Que diriez-vous d'un bookmarklet? Cela leur montrerait comment manipuler quelque chose qu'ils utilisent tous les jours (Internet) sans avoir besoin d'outils de développement.


J'aimerais cette suggestion, mais ce serait mieux avec un exemple et ce que l'on peut en tirer. Comme l'exemple donné dans la question: [code] javascript: alert (4 (5 * 5) / 10 + 9 (.25 + .75)); [/ code] pour afficher l'ordre des opérations.
tylermac

8

Si vous pouvez vous permettre le matériel, l'utilisation d'une carte Arduino + traitement produira des choses assez cool, même si cela peut être un peu avancé pour les personnes qui ne sont pas du tout intéressées par la programmation.


8

J'ai récemment écrit à ce sujet dans un article "Le programme le plus court et le plus utile que j'aie jamais écrit".

Résumé: J'ai écrit une application VB6 à 3 lignes en 1996 que j'utilise toujours tous les jours. Une fois l'exe déposé dans le dossier "Send-to". Il vous permet de cliquer avec le bouton droit sur un fichier dans l'explorateur et d'envoyer le chemin complet de ce fichier au presse-papiers.

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

Pourquoi Clipboard.Clear? Il supprime tout le contenu du presse-papiers, même les données non textuelles (par exemple, les données d'image). Ce n'est généralement pas du tout ce que vous voulez.
Konrad Rudolph

Eh bien, alors peut-être que le programme le plus court doit être la moitié de sa taille actuelle ...
JohnFx

Vraiment bien. Je déteste devoir taper de longs chemins et me demander ensuite s'il y a une faute de frappe
Sylverdrag

AFAIK dans les versions Windows "modernes" c'est exactement ce qu'il fait lorsque vous copiez le fichier (Ctrl + C) ... Il suffit de copier le nom du fichier. Quelqu'un peut-il essayer cela (car je n'ai pas de fenêtres)?
opatut

J'ai Windows 7 et cela ne fait PAS cela.
JohnFx

7

Il est intéressant que vous mentionniez l'ensemble Mandelbrot, car la création de fractales avec GW-BASIC est ce qui a suscité mon amour de la programmation au lycée (vers 1993). Avant de commencer à apprendre sur les fractales, nous avons écrit des applications ennuyeuses d'écart type et je prévoyais toujours de me lancer dans le journalisme.

Mais une fois que j'ai vu ce long programme BASIC difficile à écrire générer un «terrain fractal», j'ai été accroché et je n'ai jamais regardé en arrière. Cela a changé ma façon de penser les mathématiques, les sciences, les ordinateurs et ma façon d'apprendre.

J'espère que vous trouverez le programme qui a le même effet sur vos élèves.


C'est super pour un projet de semestre. J'aurais aimé y avoir pensé en arrière quand j'enseignais.
Mike Dunlavey


6

Je suis sûr que cela se transformerait en plus de 10 lignes de code, mais avez-vous envisagé une application basée sur un formulaire où appuyer sur les boutons fait des choses comme changer la couleur de l'arrière-plan ou changer la taille du texte? Cela leur montrerait comment fonctionnent les programmes interactifs. Cela leur montrerait également qu'en tant que programmeur, ils contrôlent totalement ce que fait l'ordinateur (programme).

J'espère que cela les amènera à faire des suggestions sur d'autres choses qu'ils pourraient changer, puis sur d'autres choses qu'ils pourraient vouloir faire.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.