Diskussion:Programmieren für Philosophinnen und Philosophen: Unterschied zwischen den Versionen

Aus Philo Wiki
Wechseln zu:Navigation, Suche
(=lösungen wo ?=)
Zeile 150: Zeile 150:
 
print len(w)
 
print len(w)
 
</pre>
 
</pre>
 
(ml, 20.10.04:) eine zusatzfrage: lässt sich die schleife auch so gestalten, dass das statement "aus=aus+' '+tmp" (bzw wortliste.append) nur einmal vorkommt ?
 
  
 
<br>
 
<br>
Zeile 186: Zeile 184:
 
         wortliste.append( tmp)
 
         wortliste.append( tmp)
 
</pre>
 
</pre>
 +
 +
(ml, 20.10.04:) eine zusatzfrage: lässt sich die schleife auch so gestalten, dass das statement "aus=aus+' '+tmp" (bzw wortliste.append) nur einmal vorkommt ?
  
 
<br>
 
<br>

Version vom 20. Oktober 2004, 10:19 Uhr

programme

lösungen wo ?

im moment (20.10.04 in der früh, ml) sind lösungen bzw lösungsvorschläge auf inhalts- und diskussionseite verteilt. da könnten wir uns überlegen wie wir das handhaben wollen. ein argument dafür lösungen und lösungsvorschläge auf der diskussionsseite unterzubringen wäre, dass für leute die aufgabenstellungen suchen die sie selbst lösen wollen die lösung nicht sofort ersichtlich ist. daher habe ich die lösungen von daniel vorerst auf die diskussionsseite verlagert.


"stabreime": nur wörter mit dem selbem anfangsbuchstaben verwenden

(daniel, 19.10.04)

import random
satz = [ 'wer', 'hat', 'an', 'der', 'uhr', 'gedreht', ',',
         'ist', 'es', 'wirklich', 'schon', 'so', 'spaet', '?' ]

tmp = random.choice(satz)
print tmp,
i = 1
while i < len(satz):
    wort = random.choice(satz)
    if tmp[0] == wort[0]:
        print wort,
        i = i + 1


ausgangstext in wörter zerlegen, variante mit splitfields

(daniel, 19.10.04)

import string
import random
ein_satz = 'wer hat an der uhr gedreht , ist es wirklich schon so spaet ?'
satz = string.splitfields(ein_satz, ' ')

i = 0
while i < len(satz):
    print random.choice(satz),
    i = i + 1


den ergebnis text in einen string schreiben

(daniel, 19.10.04)

import random
ein_satz = [ 'wer', 'hat', 'an', 'der', 'uhr', 'gedreht', ',',
             'ist', 'es', 'wirklich', 'schon', 'so', 'spaet', '?' ]
i = 1
satz = random.choice(ein_satz)
while i < len(ein_satz):
    satz = satz + ' ' + random.choice(ein_satz)
    i = i + 1

print satz,


ausgewählte wörter nicht noch einmal auswählen

(daniel, 19.10.04)

import random
satz = [ 'wer', 'hat', 'an', 'der', 'uhr', 'gedreht', ',',
         'ist', 'es', 'wirklich', 'schon', 'so', 'spaet', '?' ]

tmp = [ random.choice(satz) ]
print tmp[0],

while len(tmp) < len(satz):
    wort = random.choice(satz)
    x = y = 0
    while x < len(tmp):
        if tmp[x] == wort:
            x = len(tmp)
            y = 1
        x = x + 1
    if y == 0:
        print wort,
        tmp.append(wort)


haiku, 1. versuch

ad haikus: das müsste mit klammer in der klammer funktionieren; bin schon am herumbasteln, hab aber keinen grund zu der annahme, bis heute 17 uhr eine fertige haikus-maschine gebaut zu haben. ...aber im grunde glaub´ich schon, dass es pipi-fax-einfach ist; AnAd(19.10.04)

so weit bin ich schon mal:

import random
wort1 = ['Herb', 'stes']
wort2 = ['Ab', 'end']
wort3 = ['an', 'mach','en']
wort4 = ['frag', 'te']
wort5 = ['Des']
wort6 = ['Soll']
wort7 = ['ich']
wort8 = ['Licht']
wort9 = ['Kam']
wort10 = ['sie']
wort11 = ['und']
wort12 = ['schon']
satz = [ wort1 , wort2 , wort3, wort4, wort5 , wort6 , wort7, wort8, wort9 , wort10, wort11, wort12 ]

i = 0
j = 0
k = 0
while i < 5:
    i = i + 1
    print random.choice( satz),
    while j < 7:
        j = j + 1
        print random.choice( satz),
        while k < 5:
            k = k + 1
            print random.choice( satz),

zwei sachen können noch verbessert werden: 1. zur zeit werden wahllos wörter reingeworfen, so kommen manvhe gar nicht vor, andere wiederum mehrmals; 2. es schaut nicht nach haiku aus, weil noch keine zeilenumbrüche vorkommen; -> noch ein problem: python hat silben mit wörtern verwechselt; ist also doch noch keine haiku-maschine; aber fast!

die schleifen sache werde ich nochmal überdenken; hab auch schon eine idee; stell ich dann in den nächsten tagen rein;

der vollständigkeit halber das original:

Des Herbstes Abend ::: Soll ich schon Licht anmachen? ::: Kam sie und fragte. (Etsujin)

(ml, 19.10.04:) mutig. und eine meisterleistung. auch nach über 20 jahren programmiererfahrung war mir nicht auf den ersten klar was dieses programm eigentlich macht. klar war nur das es sicher keine haikus erzeugt. ein fall für den debugger. das gilt für die verschachtelten schleifen unten. daran knüpft sich eine zusatzaufgabe: warum werden 17 wörter ausgegeben und nicht 5*7*5=175 wörter wie die verschachtelten schleifen auf den ersten blick erwarten lassen.

das datenformat jedoch ist ein interessanter und brauchbarer ansatz. der text ist eine liste von wörtern. wörter sind eine liste von silben. folgendes codefragment knüpft an die variablenbelegung oben an (wort1-12, satz) und zeigt wie man für eine auswahl sowohl das wort wie auch die silbenanzahl bekommt. die funktion len() gibt für listen die anzahl der elemente an. (für strings die anzahl der zeichen, aber in diesem fall handelt es sich um eine liste.)

w = random.choice( satz)
print w
print len(w)


vorarbeit zu: satz zerlegen zu wörtern

hier ein weiteres stückchen code, vorerst mal undokumentiert.

i=0
s = 'wer hat an der uhr gedreht, ist es wirklich schon so spaet ?'
tmp=''
aus=''
while i < len(s):
    if s[i] == ' ':
        aus=aus+' '+tmp
        tmp=''
    else:  
        tmp = tmp + s[i]
    i = i + 1

aus=aus+' '+tmp
print aus

(ml, 19.10.04:) in diesem codefragment werden die wörter jeweils in der variable "tmp" "gesammelt". genutzt wird das feature, dass mit s[i] auf ein einzelnes zeichen eines strings zugegriffen werden kann. testweise werden die in "tmp" befindlichen wörter zum string "aus" summiert. aber um worte zufällig daraus erzeugen zu können würden wir eine liste von wörtern benötigen. dazu folgende codeauschnitte:

# statt: aus=''
wortliste = []
...

        #statt: aus=aus+' '+tmp
        wortliste.append( tmp)

(ml, 20.10.04:) eine zusatzfrage: lässt sich die schleife auch so gestalten, dass das statement "aus=aus+' '+tmp" (bzw wortliste.append) nur einmal vorkommt ?


shell protokoll vom 19.10

IDLE 1.0.3      
>>> gtrtz

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in -toplevel-
    gtrtz
NameError: name 'gtrtz' is not defined
>>> 1+1
2
>>> +1
1
>>> i = 1+1
>>> i
2
>>> i = 3+3
>>> i
6
>>> i = i + 1
>>> i
7
>>> i == i + 1
False
>>> i +1 + 1 = i + 2
SyntaxError: can't assign to operator
>>> i + 1 + 1 = i + 2
SyntaxError: can't assign to operator
>>> i +1 + 1 == i + 2
True
>>> s = 'aber'
>>> s
'aber'
>>> s = aber

Traceback (most recent call last):
  File "<pyshell#15>", line 1, in -toplevel-
    s = aber
NameError: name 'aber' is not defined
>>> aber = 'aber'
>>> s = aber
>>> aber = 'aber nicht'
>>> aber
'aber nicht'
>>> aber = aber + '. aber doch'
>>> aber
'aber nicht. aber doch'
>>> aber = aber - 'doch'

Traceback (most recent call last):
  File "<pyshell#22>", line 1, in -toplevel-
    aber = aber - 'doch'
TypeError: unsupported operand type(s) for -: 'str' and 'str'
>>> w234234 = 1
>>> 42432a = 1
SyntaxError: invalid syntax
>>> _wkjhlkhj = 1
>>> w-ere = 1
SyntaxError: can't assign to operator
>>> I

Traceback (most recent call last):
  File "<pyshell#27>", line 1, in -toplevel-
    I
NameError: name 'I' is not defined
>>> i
7
>>> s=['wer','hat','der']
>>> s
['wer', 'hat', 'der']
>>> print s
['wer', 'hat', 'der']
>>> print s[1]
hat
>>> s[0]
'wer'
>>> 
>>> 
>>> w = true

Traceback (most recent call last):
  File "<pyshell#36>", line 1, in -toplevel-
    w = true
NameError: name 'true' is not defined
>>> w = 1 == 1
>>> w
True
>>> w = True
>>> w
True
>>> w = False
>>> w
False
>>> (1 == 1) == w
False
>>> w = True
>>> 1 == 1) == w
SyntaxError: invalid syntax
>>> (1 == 1) == w
True
>>> w = 'True'
>>> w
'True'
>>> print w
True
>>> (1 == 1) == w
False