Seite 1 von 1

Guter Code (oder besser: kein zu schlechter Code)

Verfasst: Freitag 11. April 2008, 15:23
von mgraf
Hallo,
ich wollte nur fragen, ob folgender Code akzeptabel ist, oder ob und was man noch verbessern kann:

Code: Alles auswählen

n = context.REQUEST.get('promocode')
c = context.REQUEST.get('conference_fee')

b = int(c)*0.9 #Die conference_fee abzüglich Gutschein 10%
a = int(c)*0.1 #Der Gutschein 10% Preis

#entscheidet welcher der Radio-Buttons ausgewählt wurde und übergibt die Bezeichnung, anders möglich??
if c == '350':
  o = 'Conference registration for NOC'
elif c == '135':
  o = 'Conference registration for NOC (Student rate)'
elif c == '190':
  o = 'Conference registration for OC&I'
elif c == '390':
  o = 'Conference registration for both NOC and OC&I'
else:
  None

#Entscheidet ob ein Gutscheincode eingegeben wurde und gibt den Status zurück und die Input Werte
if n !='':
  if n == 'noc08krems':
    state.setError('promocode', None, new_status='success')
    state.setKwargs( {'portal_status_message':'Promotion Code is ok: ' + n + ' || ' + c + ' -10% (Promotion Code) = ' + str(b) + '€ Your Fees'} )
    context.REQUEST.set('option', o)
    context.REQUEST.set('optionprice', c)
    context.REQUEST.set('conference_fee', b)
    context.REQUEST.set('promocodefee', a)
  else:
    state.setError('promocode', 'Invalid Entry', new_status='failure')
    state.setKwargs( {'portal_status_message':'Promotion Code is invalid'} )
    context.REQUEST.set('option', o)
    context.REQUEST.set('optionprice', c)
else:
    context.REQUEST.set('option', o)
    context.REQUEST.set('optionprice', c)

# No errors. Always make sure to return the ControllerState object
return state
Und bitte nicht hauen, auch wenn der Code sehr schlecht ist. Ich lerne ja noch ;-)

lg
miichi

Verfasst: Freitag 11. April 2008, 15:53
von Leonidas
Du kannst etwa soas machen:

Code: Alles auswählen

selections = {
  '350' : 'Conference registration for NOC'
  '135' : 'Conference registration for NOC (Student rate)',
  '190' : 'Conference registration for OC&I',
  '390' : 'Conference registration for both NOC and OC&I'
}
o = selections.get(c, None)
Außerdem den Variablen brauchbare Namen geben, das wäre schon mal ein guter Anfang. Von Inline-Kommentaren würde ich auch abraten, wenn ``context.REQUEST`` ein dict ist, würde ich da via ``[]`` drauf zugreifen.

``if n != '':`` kannst du durch ``if not n:`` ersetzen. In Zeile 24 würde ich eher auf String-Formatting zurückgreifen.

Verfasst: Freitag 11. April 2008, 18:34
von gerold
Leonidas hat geschrieben:wenn ``context.REQUEST`` ein dict ist, würde ich da via ``[]`` drauf zugreifen.
Hallo!

Was aber den Nachteil hat, dass es einen Fehler wirft, wenn es den Eintrag nicht gibt.

mfg
Gerold
:-)

Verfasst: Freitag 11. April 2008, 18:45
von mgraf
Danke, für Eure Hilfe.
Das mit den selections = ... hab ich eingefügt, macht ja den Code schlanker und übersichtlicher.

Das mit den Dictornary hatte ich zuvor eh, aber wenn es leer ist....

naja, danke auf jedn Fall, ich geh jetzt Heim :wink:

lg
michi