Python, kod som genererar kod

Här diskuteras programmering och utveckling
Användarvisningsbild
Chippen
Inlägg: 1237
Blev medlem: 05 jun 2006, 18:15
Ort: Haninge Kommun

Python, kod som genererar kod

Inlägg av Chippen »

Hejsan

Jag sitter och funderar på om det finns något sätt att göra så att programmera så att skriva så att kod kan genereras utifrån vad användaren "inputtar". Det blev dumt formulerat.
Tex Om jag har en if sats där jag vill jämföra tärningskast och se om alla tärningar är lika dana så kan jag skriva något sådanthär:

Kod: Markera allt

import random

if random.randint(1, 6) == random.randint(1, 6):
Men om jag inte vet hur många tärningar användaren vill använda så blir det ju fel.
Jag inser att det förmodligen finns ett lämpligare sätt att lösa just detta problem på, och det är också intressant förståss. Det blev alltså två frågor i samma tråd, det viktigaste är Topic!

MVH
Chippen
Användarvisningsbild
per9000
Inlägg: 931
Blev medlem: 07 maj 2007, 11:06
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Västerås
Kontakt:

SV: Python, kod som genererar kod

Inlägg av per9000 »

Jag vet inte om jag förstår frågan, men att skriva kod som i sin tur genererar kod kallas metaprogrammering: http://en.wikipedia.org/wiki/Metaprogramming .

Se även begreppet Quine (ett program som skriver ut sin egen källkod) http://en.wikipedia.org/wiki/Quine_%28computing%29

Ett litet exempel på ett program som skapar ett annat program:

Kod: Markera allt

>cat meta.py 
i = int(raw_input("feed me number >> "))

f = open("script_%s.py" % str(i),'w')
f.write("import random\n")
f.write("sum = 0\n")

for n in range(i):
    f.write("sum += random.randint(1,6)\n")
    
f.write("print sum\n")  
Exempel på körning:

Kod: Markera allt

per@Dactyl:~/code/tmp
>python meta.py
feed me number >> 3

per@Dactyl:~/code/tmp
>python script_3.py
12

per@Dactyl:~/code/tmp
>python script_3.py
7

per@Dactyl:~/code/tmp
>python script_3.py
10
Koden som skapats:

Kod: Markera allt

>cat script_3.py 
import random
sum = 0
sum += random.randint(1,6)
sum += random.randint(1,6)
sum += random.randint(1,6)
print sum
En populär jämförelse är i filmer där man har en mördare som mördar mördare. Man har då en metamördare. Meta is the shit, helt enkelt.

Jag hoppas jag svarar på din fråga, säg till annars.

/Per
--
Per Erik Strandberg
Yet Another IT Consultant
Användarvisningsbild
Chippen
Inlägg: 1237
Blev medlem: 05 jun 2006, 18:15
Ort: Haninge Kommun

SV: Python, kod som genererar kod

Inlägg av Chippen »

å Tack så mycket. Det var något åt det hållet jag var ute efter... Jag kommer behöva läsa och fundera lite, men jag kommer säker tillbaka med fler dumma frågor senare :)
Användarvisningsbild
per9000
Inlägg: 931
Blev medlem: 07 maj 2007, 11:06
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Västerås
Kontakt:

SV: Python, kod som genererar kod

Inlägg av per9000 »

Chippen skrev: [...] fler dumma frågor senare [...]
Välj de som passar bäst:
  • Det finns inga dumma frågor - bara dumma svar.
  • Den som inte ställer dumma frågor förblir dum.
  • Frågar man inget så får man inget veta.
/P
--
Per Erik Strandberg
Yet Another IT Consultant
Skriv svar

Återgå till "Programmering och webbdesign"