Video: DIY School Supplies! 12 Weird Back to School Hacks! 2024
In Ruby kunt u een rechthoek op het scherm maken met ASCII-illustraties. Als u een rechthoek tekent op papier dat met een patroon is gevuld, wat zou u dan moeten doen? Ten eerste kunt u de omtrek van de rechthoek tekenen en dan kunt u de binnenkant inkleuren.
Maar voor je programma in Ruby moet je in plaats daarvan de vorm van boven naar beneden tekenen, regel voor regel. Hoe zou je beschrijven hoe dat te doen? Zo:
-
Teken de bovenzijde van de rechthoek met behulp van het buitenste (of rand) patroon voor de eerste regel.
-
Teken voor elke lijn tussen de zijkanten en de binnenkant van de rechthoek de linkerrand, het hele midden en dan de rechterrand.
Herhaal deze stap totdat je de onderkant van de rechthoek moet tekenen.
-
Teken de onderkant van de rechthoek precies zoals u de bovenrand tekende.
Dit is een algoritme om rechthoeken regel voor regel van boven naar beneden te tekenen.
Een algoritme is slechts een reeks stappen die u volgt om een bepaalde taak of berekening te voltooien. In dit geval hebt u de reeks uitgeschreven om een rechthoek te tekenen door van regel naar regel van boven naar beneden te scannen.
De Ruby-versie van uw algoritme lijkt veel op de Engelse versie:
-
Stel twee variabelen in die het gemakkelijker maken om te zien wat er aan de hand is. U gebruikt de keuze van de gebruiker voor de vormgrootte als zowel de hoogte als de breedte van de figuur die u gaat tekenen:
hoogte = shape_size width = shape_size
-
u tekent de rechthoek regel voor regel, dus stel een lus in die uw code voor elke rij zal herhalen (dus dat betekent dat u uw tekencode nodig hebt om hoogte keer) uit te voeren:
1. tot (hoogte) do | rij | # Tekeningcode gaat hier end
Lussen zijn een krachtige manier om code een aantal keren (of zelfs een oneindig aantal keren) te herhalen! Ruby heeft verschillende manieren om een lus te programmeren. De tot-methode is een eenvoudige manier om te tellen van een beginnummer tot een eindnummer. Voor de rechthoek wilt u beginnen met 1 voor de eerste rij en eindigen met tellen wanneer u het getal bereikt dat wordt weergegeven door de hoogte.
-
Nu moet het algoritme werken om te controleren welke rij het programma moet afdrukken. U hebt drie cases: de eerste rij, de middelste rijen en de laatste rij. Voeg in het geval van de eerste rij in het midden van je lus:
als rij == 1 zet outside_letter * width end
Als de rijvariabele gelijk is aan één, gebruikt het programma puts om uw keuze voor de buitenbrief een aantal keren gelijk aan de breedte.
U gebruikt if-opdrachten wanneer u wilt zien of een voorwaarde waar of onwaar is.Het symbool == in Ruby stelt de vraag: "Is het ding aan de linkerkant gelijk aan het ding aan de rechterkant van het == symbool? "Als dat zo is, dan zal Ruby de coderegels uitvoeren tot een andere voorwaarde of een eindwoord.
-
Voeg vervolgens een vinkje toe om te zien of dit de laatste rij is. Het elsif-sleutelwoord begint met een andere conditietest en plaatst deze vlak voor het vorige eindwoord. Dat is overigens geen spelfout. Ruby heeft gewoon een grappige manier om "else if" te zeggen! Het geheel ziet er als volgt uit:
indien rij == 1 zet buitenletter * breedte elsif rij == hoogte zet buitenletter * breedte einde
-
Tot slot moet u de weergave van alle rijen in het midden afhandelen, dus voeg een laatste voorwaarde toe met Ruby's else-trefwoord. Deze code komt vlak voor het eindwoord. Hier is het hele blok van Ruby:
als rij == 1 zet buiten_brief * breedte elsif rij == hoogte zet buiten_brief * breedte anders midden = binnen_brief * (breedte - 2) zet "# {buiten_brief} # {midden} # { outside_letter} "end
De middelste case ziet er ingewikkeld uit. Wat doet het? Welnu, volgens uw algoritme moet het de linker- en rechterrand tekenen en alles in het midden.
De middelste variabele berekent de reeks die het midden van de rechthoek vertegenwoordigt. Als u er één weghaalt voor het karakter aan de linkerrand en één voor het rechterrandteken, is de uiteindelijke breedte van het midden de volledige breedte minus twee tekens.
De laatste put-instructie maakt gebruik van tekenreeksverwerking om de gecombineerde rij te maken.
-
Voer uw programma uit en kijk of u fouten heeft. Krijg je zoiets als wat hier wordt getoond? Als u een fout ziet die iets zegt als een vergelijking van Fixnum met String is mislukt, betekent dit dat Ruby moeite had de waarde in shape_size als een getal te gebruiken.
Ruby weet niet zeker hoe tekenreeksen voor getallen moeten worden gebruikt.Waarom is dat een probleem als je een nummer hebt ingetypt? Wel, je krijgt reads in je invoer, maar het leest alle karakters die je typt als een string. Je moet Ruby helpen de reeks naar een getal te converteren.
-
Wijzig de twee regels waar u de hoogte- en breedtevariabelen instelt om de methode to_i te gebruiken, wat inhoudt dat de inhoud van deze variabele wordt geconverteerd naar een geheel getal (getal):
height = shape_size. to_i width = shape_size. to_i
Voer uw code opnieuw uit. Succes!
Is dit 's werelds meest opwindende rechthoek?