Seite 6 von 14

Verfasst: Montag 18. Mai 2009, 18:28
von BlackJack
@derdon: Selbst unter Windows kann das bei CGI-Skripten wichtig sein, wenn der Webserver damit herausfinden will womit er die Datei mit der Endung *.cgi denn nun eigentlich starten soll.

@KlaliB: Die ``for``-Schleife wird da richtig erklärt, Du solltest den Fehler bei Dir suchen.

Was willst Du denn mit der Schleife überhaupt machen? Worüber willst Du iterieren?

Verfasst: Montag 18. Mai 2009, 18:30
von snafu
@KlaliB:

Die Shebang-Thematik ist für dein eigentliches Programm völlig unerheblich. Das ist nur ein Hinweis an die Shell wie sie das Programm ausführen soll, wenn man es "direkt" startet, d.h. es nicht dem Pythoninterpreter als Argument mitgibt. Für diesen Schritt sorgt nämlich dann der/die/das Shebang. Zur Lösung deines Problems trägt das allerdings nicht wirklich etwas bei. Lass dich da nicht verwirren und schau dir vielleicht mal lieber die drei Links an, die ich gepostet habe. :)

Verfasst: Montag 18. Mai 2009, 18:31
von Pascal
ich misch mich hier mal ein...

also du sollst einen Bankautomaten bzw. die Ausgabe der Scheine programmieren??
eigentlich würde es reichen wenn du dich an das hälts was KEBA sehr schön geschrieben hat.
Hier nochmal das ganze:
KEBA hat geschrieben:Stell dir vor, du bist ein Bankautomat und sollst 120€ auszahlen. Was wäre die einfachste Form (= am wenigsten Scheine, ausbauen kann man das ja immernoch). Ich nehme die Lösung hier mal vorweg: ein 100€-Schein und ein 20€-Schein.

Was machst du also nun bei folgenden Beträgen: 100€, 75€, 140€, 120€, 555€, 2005€?

Notiere/Merk dir genau, wie du jeweils zur Lösung gelangt bist.
ich entschuldige mich schon mal im Vorfeld für den folgenden Code:
Viel Spaß damit ;)

Code: Alles auswählen

# -*- coding: cp1252 -*-
# Geldausgabe am defekten Bankautomaten (der Automat kann nur 5€-Scheine ausgeben)


print 'Bankautomat'
print
print '(auf Grund eines Defektes kann der Automat nur Beträge in 5€-Scheinen ausgeben)'
print
betrag=input('Wie viel soll ausgezahlt werden? ')
if betrag%5!=0:
    print 'Leider kann dieser Betrag nicht ausgezahlt werden, sorry'
else:
    print 'Der Automat zahlt aus: '
    for i in range(betrag/5):
        print '5€ Schein'  

Verfasst: Montag 18. Mai 2009, 18:35
von KlaliB
Pascal hat geschrieben:ich misch mich hier mal ein...

also du sollst einen Bankautomaten bzw. die Ausgabe der Scheine programmieren??
eigentlich würde es reichen wenn du dich an das hälts was KEBA sehr schön geschrieben hat.
Hier nochmal das ganze:
KEBA hat geschrieben:Stell dir vor, du bist ein Bankautomat und sollst 120€ auszahlen. Was wäre die einfachste Form (= am wenigsten Scheine, ausbauen kann man das ja immernoch). Ich nehme die Lösung hier mal vorweg: ein 100€-Schein und ein 20€-Schein.

Was machst du also nun bei folgenden Beträgen: 100€, 75€, 140€, 120€, 555€, 2005€?

Notiere/Merk dir genau, wie du jeweils zur Lösung gelangt bist.
ich entschuldige mich schon mal im Vorfeld für den folgenden Code:
Viel Spaß damit ;)

Code: Alles auswählen

# -*- coding: cp1252 -*-
# Geldausgabe am defekten Bankautomaten (der Automat kann nur 5€-Scheine ausgeben)


print 'Bankautomat'
print
print '(auf Grund eines Defektes kann der Automat nur Beträge in 5€-Scheinen ausgeben)'
print
betrag=input('Wie viel soll ausgezahlt werden? ')
if betrag%5!=0:
    print 'Leider kann dieser Betrag nicht ausgezahlt werden, sorry'
else:
    print 'Der Automat zahlt aus: '
    for i in range(betrag/5):
        print '5€ Schein'  
also eine sache check ich nicht
wieso nur ` nach dem print muss es nicht " sein?

Verfasst: Montag 18. Mai 2009, 18:40
von BlackJack
Ganz offensichtlich nicht. Zeichenketten kann man in ' oder in " einfassen. Das steht aber auch in der Dokumentation.

Verfasst: Montag 18. Mai 2009, 18:41
von Dill
sehr schön :)

wie wärs damit:

Code: Alles auswählen

import random
print 'Bankautomat'
print
print '(auf Grund eines Defektes kann der Automat nur Beträge in 1€-Münzen ausgeben)'
print
betrag=int(raw_input('Wie viel soll ausgezahlt werden? '))
for _ in range(0, betrag):
    print('%s' % ("pling", "plang", "plong")[random.randint(0,2)])

Verfasst: Montag 18. Mai 2009, 18:46
von BlackJack
Dill: Ich würde `xrange()` vorschlagen und `random.choice()` zur Auswahl des Geräuschs. Das ist dann nicht so fehleranfällig beim Erweitern. ;-)

Verfasst: Montag 18. Mai 2009, 18:47
von Dill
ich werde mich in die dokumentation dieser für mich neuen methoden vertiefen und dann ein refactoring starten 8)

Verfasst: Montag 18. Mai 2009, 18:50
von KlaliB
ich wollte mir mal die ansehen doch bei mir läuft es nicht :( das ´wird rot markiert
ich check da wirklich nichts :roll: :?:

werd mir jetzt mal die seiten angucken

Verfasst: Montag 18. Mai 2009, 18:56
von Dill
das liegt wahrscheinlich daran, dass der code noch nicht refactored war.

Code: Alles auswählen

import random 
print """
Bankautomat
-----------
(auf Grund eines Defektes kann der Automat nur Beträge in 1€-Münzen ausgeben)' 
(es können jetzt auch besonders grosse beträge ausgezahlt werden. 
der nächste lastwagenverleih befindet sich am hauptbahnhof.)

""" 
 
betrag=int(raw_input('Wie viel soll ausgezahlt werden? ')) 
for _ in xrange(betrag): 
    print(random.choice( ("pling", "plang", "plong") ))

besser?

evtl liegt es auch daran, dass du dir das tutorial noch nicht angeschaut hast?

Verfasst: Montag 18. Mai 2009, 19:01
von KlaliB
hab kopfschmerzen und bin krank ich gucks mir morgen weiter an

Verfasst: Montag 18. Mai 2009, 19:10
von Pascal
Das von Dill find ich gut

und damit es wirklich pling, plang, plong macht ...

Code: Alles auswählen

import random, winsound
print """ 
Bankautomat 
----------- 
(auf Grund eines Defektes kann der Automat nur Beträge in 1€-Münzen ausgeben)' 
(es können jetzt auch besonders grosse beträge ausgezahlt werden. 
der nächste lastwagenverleih befindet sich am hauptbahnhof.) 

""" 
  
betrag=int(raw_input('Wie viel soll ausgezahlt werden? ')) 
for _ in xrange(betrag):
    pliplaplo=random.choice( ("pling", "plang", "plong") )
    print pliplaplo
    if pliplaplo == 'pling':
        winsound.Beep(780,25)
    elif pliplaplo == 'plang':
        winsound.Beep(100, 60)
    else:
        winsound.Beep(260, 41)


Verfasst: Montag 18. Mai 2009, 19:26
von Dill
langsam könnte man schon fast ein projekt bei sourceforge aufmachen....

Code: Alles auswählen

# -*- coding: utf-8 -*-
import random, winsound, time
print """ 
Bankautomat 
----------- 
(auf Grund eines Defektes kann der Automat nur Beträge in 1€-Münzen ausgeben)' 
(es können jetzt auch besonders grosse beträge ausgezahlt werden. 
der nächste lastwagenverleih befindet sich am hauptbahnhof.) 

""" 
  
betrag = int(raw_input('Wie viel soll ausgezahlt werden? ')) 
for _ in xrange(betrag): 
    pliplaplo=random.choice( ("pling", "plang", "plong") ) 
    print pliplaplo
    time.sleep(random.choice(range(100, 300, 50))/1000.)
    if pliplaplo == 'pling': 
        winsound.Beep(780,25) 
    elif pliplaplo == 'plang': 
        winsound.Beep(100, 60) 
    else: 
        winsound.Beep(260, 41)

Verfasst: Montag 18. Mai 2009, 21:37
von sma
Dill hat geschrieben:

Code: Alles auswählen

import random, winsound, time
Bäh, das funktioniert ja gar nicht:

Code: Alles auswählen

ImportError: No module named winsound
Aber ich habe eine viel bessere Lösung:

Code: Alles auswählen

import random, os
...
os.system("say " + random.choice(("pling", "plung", "plong")))
Ich musste allerdings plang in plung umbenennen, weil mein Kumpel Alex die erste Version nicht aussprechen konnte.

Stefan

Verfasst: Montag 18. Mai 2009, 22:14
von snafu
sma hat geschrieben:

Code: Alles auswählen

os.system
:o

Verfasst: Montag 18. Mai 2009, 22:21
von Leonidas
sma hat geschrieben:
Dill hat geschrieben:

Code: Alles auswählen

import random, winsound, time
Bäh, das funktioniert ja gar nicht:

Code: Alles auswählen

ImportError: No module named winsound
Aber ich habe eine viel bessere Lösung:

Code: Alles auswählen

import random, os
...
os.system("say " + random.choice(("pling", "plung", "plong")))
Ich musste allerdings plang in plung umbenennen, weil mein Kumpel Alex die erste Version nicht aussprechen konnte.
``say`` funktioniert hier auch nicht, kann also nicht so viel besser als ``winsound`` sein.

Verfasst: Montag 18. Mai 2009, 22:23
von derdon
Ich glaube, dass sma seinen Post nicht ernst gemeint hat. Dadurch, dass er bewusst auf einen Befehl zurückgreift, der ebenfalls nur auf einem OS läuft, hat er sozusagen mit "den eigenen Waffen zurückgeschlagen".

Verfasst: Montag 18. Mai 2009, 23:11
von BlackJack
@derdon: Interessant das er sich dafür ausgerechnet den guten alten Amiga ausgesucht hat. Oder sollte AmigaOS nicht das einzige OS sein, dass einen ``say``-Befehl kennt. ;-)

Verfasst: Dienstag 19. Mai 2009, 09:42
von KlaliB
bei mir läuft keines eurer programme :(
brauch ich dafür ein extra programm oder was ist los?
hab nur python runtergeladen
es funktioniert aber wirklich garnix
die dinge die ich in der schule schaffe schaf ich nicht .
immer wenn ich irgendwas mit " mache wird das " rot markiert und da steht invalid syntax

Verfasst: Dienstag 19. Mai 2009, 10:22
von Dill
probier das mal bitte und poste hier was passiert:

Code: Alles auswählen

C:\>python
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> "Hallo, Welt"
'Hallo, Welt'
>>>