Sida 1 av 1

Python, kod som genererar kod

Postat: 27 jun 2007, 12:24
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

SV: Python, kod som genererar kod

Postat: 27 jun 2007, 15:12
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

SV: Python, kod som genererar kod

Postat: 27 jun 2007, 15:33
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 :)

SV: Python, kod som genererar kod

Postat: 27 jun 2007, 15:47
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