Verwerken van elk item in een lijst

Geen Afbeelding

In deze les, ga je tools maken voor het tekenen van complexe ontwerpen van lijsten met punten. Om dit te doen, ga je probleem-decompositie gebruiken— een probleem in kleine stukjes opbreken.

Op deze pagina, ga je een script schrijven dat ervoor zorgt dat de punten met elkaar verbonden worden (gegeven door een lijst met punten) om zo de letter A tekenen.

 

Alex en Bo maken een programma dat een lijst van punten als invoer gebruikt (waarbij ieder punt weer een lijst met x en y coördinaten is) en de punten met elkaar verbindt. Ze kwamen erachter dat ze dit kunnen gebruiken om afbeeldingen of grafieken van data te tekenen.

Om een set data te maken om mee te beginnen, schetsten ze de letter A op ruitjespapier. Ze kozen een schaal waarvan ze dachten dat het de afbeelding er goed uit zou laten zien.
Geen AfbeeldingGeen Afbeelding
Daarna noteerden ze de coördinaten van elk punt, beginnend bij het pijltje en met de klok mee rond het figuur. Het eerste punt is bij (-50, 20), de tweede bij (-10, 120), enzovoort.
Daarna bouwden ze deze lijst in Snap! op deze manier:
Geen Afbeelding
Nu hebben ze een script nodig dat deze lijst gebruikt om de tekening te maken, op de manier hieronder:
Geen Afbeelding

Bo: "Deze lijst van coördinaten, tekent een A, dus laten we de lijst 'A' noemen."

Bo klikt op Maak een variabele, noemt hem A, en bouwt Geen Afbeelding.

Dan, klikt ze op het zet blok om de code te runnen.

Alex: "Dus, voor elk van die 8 punten, willen we dat de sprite ernaartoe beweegt. Hmmm... Geen Afbeelding gaat niet werken, want het moet invoeren onderscheiden. We hebben een blok nodig dat één invoer aanneemt, een punt als Geen Afbeelding."
Bo: "Dus we maken een nieuw blok. Laten we die ga naar punt noemen. Dat werkt zo: Geen Afbeelding. We gebruiken Geen Afbeelding of Geen Afbeelding daar in, maar we zullen de invoer moeten verwerken, Geen Afbeelding , om x: en y: apart te voeden. Hmmm..".
Yasmine: "Oh! Ik weet het! Volgens mij kunnen we Geen Afbeelding gebruiken. Geef het een nummer als eerste invoer. Ik denk dat de Geen Afbeelding gewoon aangeeft dat het een lijst als tweede invoer verwacht."
Alex: "Ik vraag me af of we ons ga naar punt blok kunnen laten zien dat het een lijst als invoer verwacht..."

Ja, jij kunt jouw blokken laten zien welk type data ze verwachten als invoer: een nummer, een lijst, of een ander type. Sommige talen vereisen dat het datatype aangegeven is. In Snap! is dit een optie. Het is niet per se nodig, maar, net als dat je een kleur toewijst aan een blok, kan het een handige herinnering zijn van wat het blok nu eigenlijk doet en welk type invoer het verwacht. Je hebt al invoeringangen gezien van verschillende vormen en soorten, die elk verschillende datatypen verwachten.

Heb je in de video gezien dat je veel verschillende invoertypes kunt specificeren? (Tekst, nummers, Boolean, etc.) De lijst invoertypes zijn gekozen, omdat een punt een lijst is bestaande uit twee coördinaten.
Geen Afbeelding
  1. Geen Afbeelding
    Het beschikt al over de lijst van punten, maar je moet nog het Geen Afbeelding blok bouwen.
  2. Specificeer je invoertype

    Deze animatie laat zien hoe je het invoertype van de lijst kunt specificeren. Andere invoertypes worden op dezelfde manier gespecificeerd. Geen Afbeelding
    Geen Afbeelding
    Nadat je de titel hebt gemaakt en de invoer een naam hebt gegeven:
    • Klik je op de rechter pijl naast de invoernaam:
      Geen Afbeelding
    • Kies je het data-type dat je wilt voor de invoer.
    • Klik je op OK.
  3. Rond het bouwen van je ga naar puntblok af en test je blok met een paar punten als invoer om er zeker van te zijn dat het doet wat je wilt.
 
Alex:" Top! Nu kunnen we ons ga naar punt blok gebruiken voor elk punt in onze lijst."
Bo:" Ik denk dat we Geen Afbeelding kunnen gebruiken."

Alex en Bo ontwerpen dit nieuwe script om het bezoeken van ieder punt te automatiseren.

Geen Afbeelding

Daarna proberen ze het uit.

Alex: "Yes! voor elke doet precies wat we willen. Maar we hebben een paar bugs die we moeten oplossen."
;
  1. Bouw en test het script dat ze gebruikt hebben.
  2. Fix de twee bugs die Alex vond.
  3. "H2L2-TekenVorm"Geen Afbeelding
  4. Denk en schrijf op:
    • Waarom zou je het eerste en laatste punt niet met elkaar willen verbinden?
    • Waarom zou je de pen alleen neer willen wanneer de sprite elk punt markeert, maar nooit wanneer de sprite beweegt van het ene naar het andere punt?
    • Voor welke reden zou je voorkeur geven aan ga naar in plaats van glijd?
 
  1. Maak drie nieuwe punten en een script dat het tekenen van de letter A afmaakt. Je moet een manier bedenken om aan te geven welke punten in een lijst nog niet met elkaar verbonden zijn.
    Kies de nieuwe coördinaten zelf.
    Geen Afbeelding

Test jezelf: For Each

  1. Met deze vraag kun jij je kennis testen.
    invoerlijst ← [3, -1, 2, 10, -5] 
    FOR EACH element IN invoerlijst 
    { 
        ALS ( (element > 0)  EN  (element * element > 4) ) 
        { 
            LAAT ZIEN element 
        } 
    } 
                                    

    Wat zal er worden weergegeven als resultaat van de code hierboven?
    9, 1, 4, 100, 25
    9, 100
    3, 2, 10
    3, 10
    PROCEDURE Mysterie(getallenlijst, doelgetal) 
    { 
        teller ← 0 
        FOR EACH getal IN getallenlijst 
        { 
            ALS (number > doelgetal) 
            { 
                teller ← teller + 1 
            } 
        } 
        RAPPORTEER (teller) 
    }
    
    mijnWiskundecijfers ← [100, 80, 90, 80, 60, 100, 50, 100] 
    Mysterie(mijnWiskundecijfers, 60) 
    

    Wat wordt er teruggegeven als de code hierboven wordt uitgevoerd?
    [100, 80, 90, 80, 100, 100]
    7
    6
    60
TerugVolgende