Dragon kurva med Python (2 / 3 steg)
Steg 2: Programmet
I detta steg kommer jag att förklara varje del av programmet. Ett fullt Kommenterad version är tillgänglig längst ned.
Förberedelse-
Att börja måste vi ha några saker:
importera sköldpadda
Detta importerar modulen sköldpadda, som vi kommer att använda att Visa rättigheter och vänstervågor vi genererar. Du använder det Rita genom att ge kommandon till turtle, vilket rör sig om skärmen, dra en linje. Denna modul är användbara för våra ändamål som du lätt kan tala om för sköldpaddan att sväng höger eller vänster eller gå vidare utan att behöva beräkna var du vill placera linjer.
r = 'r'
l = 'l'
Här skapar vi variabler r och l och tilldela dem deras lämpliga tecken. Detta steg är inte verkligt nödvändig eftersom du kunde bara skriva det i programmet som en sträng, men jag tror programmet flödena lättare använda variabler i stället för strängar.
gamla = r
ny = gamla
Detta anger både gamla, som är den senaste iterationen genereras, och nya, iteration som genereras, till en höger. Gamla ligger till höger eftersom det är den första upprepningen att alla av dem är baserade bort av. Nya ligger också till höger ifall den första iterationen det efterfrågades. I så fall kommer det inte generera något och omedelbart skriva ut nya.
iteration = int (input ("Ange iteration:')) längd = int (input (" ange längd på varje segment :'))
pennfärg = input (' Skriv in färg: ")
bgcolor = input (' Skriv in bakgrundsfärg: ")
Detta block av kod tar i alla användare val, iteration vara genererade (iteration), längden på varje segment som gör upp Dragon kurvan (längd), färgen att Rita kurvan i (pennfärg) och bakgrundsfärg i fönstret sköldpadda grafik (bgcolor). Segmentet längd kan vara användbart när du genererar högre iterationer som den kurvan kan utöka utanför skärmen med för lång segment. De två sista val, färger, är roliga att leka med för att göra vackra mönster.
Cycle = 1
En viss iteration genereras genom att bygga upp varje iteration från den första R, cykling genom några steg för att få nästa varje gång. Denna variabel håller den nuvarande cykeln, så att vi först tilldela det värdet 1.
Generation-
Nu kan vi börja generera R och L mönstret för den önskade iterationen:
medan cykeln < iteration:
Vi kommer att fortsätta generera nästa iteration tills variabeln cykel berättar vi har nått till iteration som inte längre är mindre än det begärt.
ny = (gamla) + (r)
Detta är det första steget för att generera nästa iteration, att lägga till en ända till slutet av den förra. Vi kommer att spara detta till den nya iterationen.
gamla = gamla [:: -1]
Detta uttalande avslutar det andra steget med en längre bit för att vända på tecken i strängen gamla iteration. Syntaxen för strängen skivning metod är [börjar: slutet: steg]. Lämna bort begin och end och inställningen steg-1, gör hela strängen växla runt.
för röding i range(0,len(old)):
om gamla [tecken] == r:
gamla = (old[:char]) + (l) + (old[char+1:])
Elif gamla [tecken] == l:
gamla = (old[:char]) + (r) + (old[char+1:])
Detta kodblock växlar alla rättigheter och vänstervågor i den omvända gamla iterationen. Den finns i en for-loop som fungerar för varje tecken i strängen, bergskedjan strängalängden. För varje tecken, det kallas från strängen och testade. Om det är en rättighet, skall det ersättas med en vänster genom att lägga till del av strängen innan tecknet, en vänster och resten av strängen efter tecknet. Annars om det är en vänster, används samma metod för att ersätta tecknet med rätt.
ny = (ny) + (gamla)
Detta tar nya, vilket är den ursprungliga gammalt plus en rättighet, och lägger till den omvända och växlade gammalt på slutet. Resultatet sparas till nya. Nästa iteration har genererats!
gamla = ny
Genom att spara den nya iterationen i gamla, kan vi använda den nästa cykel att hitta nästa iteration.
Cycle = cykel + 1
Denna cykel är gjort och så vi avancera variabeln cykel. While loop håller genererar nästa iteration tills det är nöjd med cykeln variabeln att nå den iteration efterfrågades.
Display-
printans = input (' Visa r/l form? (y/n): ")
om printans == "y":
Print(New)
Speciellt med de högre iterationerna är strängen av rättigheter och vänstervågor så lång det är opraktiskt och kladdigt att skriva ut den. Denna kod ger användaren ett val. Det tar ett ja eller inget svar på om användaren vill det tryckt och, om svaret är ja, skriver ut nya, som innehar den slutliga iterationen.
Turtle.HT()
Turtle.Speed(0)
Turtle.Color(pencolor)
Turtle.bgcolor(bgcolor)
Här har vi satt upp fönstret sköldpadda grafik. Vi började genom att dölja ikonen sköldpadda och stänga av animeringen så det är snabbare. Dessutom tillämpar vi användaren begärt färger för ritningen och bakgrunden.
Turtle.Forward(length)
Här berätta vi sköldpaddan gå vidare segment längd, att göra den första raden som alla rättigheter och vänstervågor komma upp från.
för riktning i range(0,len(new)):
om nya [tecken] == (r):
Turtle.Right(90)
Turtle.Forward(length)
Elif nya [tecken] == (l):
Turtle.Left(90)
Turtle.Forward(length)
Detta for-loop liknar en som bytte alla rättigheter och vänstervågor tidigare i programmet. Det kontrollerar varje tecken i höger vänster sekvens och göra sköldpaddan sväng höger om det är en höger och vänster om det är en vänster. Efter varje tur går det också framåt önskat segment längd att slutföra vinkeln. På detta sätt kommer det diagram hela sekvensen.