HJÄLP!!!! med python...

Här diskuteras programmering och utveckling
conini
Inlägg: 4
Blev medlem: 29 okt 2009, 21:38
OS: *BSD

HJÄLP!!!! med python...

Inlägg av conini »

Kod: Markera allt

#]min kod kommer nedan oxh frågor brevid!!! behöver hjälp!!!
#den är en Bokningssystem där användaren ska boka,avboka ock skriva ut sin biljet.

# coding: latin-1


#import string 
#import datetime 
print '\n'
print '"Välkommen till SJ-Bokning!" '
print '\n'
print ' Här nedan ser du Vagnen!!'
print '\n'


class Biljet: # Biljetn med dess atribut och metoder

     def __init__(self,indistans,utdistans,datum,passagerare,rok_och_ejrokplatsen,sittplats):
          self.indistans = indistans
          self.datum = datum
          self.utdistans = utdistans
          self.passagerare = passagerare
          self.rok_och_ejrokplatsen = rok_och_ejrokplatsen
          self.sittplats =int(sittplats)
          
         
          
     def __str__(self): 
          return 'från: '+ self.indistans +'\n'+'till: '+ self.utdistans +'\n'+'Datum: '+str(self.datum)+'\n' +'passagerare: '+ self.passagerare +'\n'+ 'plats: '+ self.rok_och_ejrokplatsen +'\n'+'sittplats: '+ str(self.sittplats) +'\n'

     #Lagra den senaste bokningen i en textfil för att kunna skriva ut den.
     def SkrivaUt(self):
          utfil= open('platsbiljet.txt','w')
          print>>utfil, 'PLATSBLIJET'
          print>>utfil,'Från:',self.indistans,'Till:',self.utdistans
          print>>utfil,'Datum',self.datum
          print>>utfil,'Passagerare:',self.passagerare
          print>>utfil,'Plats Smoking eller None-smoking:',self.rok_och_ejrokplatsen
          print>>utfil,'Sittplats:',self.sittplats
          
          utfil.close()
          
# Vagn klassen där platserna finns, och metoder om hur platserna ska hanteras   
class Vagn:                        
     def __init__(self):
          self.bokade = []
         
     #Skriver ut Platserna på skärmen
     def Platserna(self):
          print '\tSmoking\t'
          print '...............................'

          for lista1_2 in [0,1]:
               for element_i_lista1_2 in range(8):
                    if self.BokadPlats(platserna1_2[lista1_2][element_i_lista1_2]) :
                         print ' * ',
                   
                      
                    else:
                         print str (platserna1_2[lista1_2][element_i_lista1_2])+' ',
               print
          print '...............................'
          
          print '\tNone-Smoking\t'
          print '...............................'
               
          for lista3_4 in [0,1]:
               for element_i_lista3_4 in range(8):
                    if self.BokadPlats(platserna3_4[lista3_4][element_i_lista3_4]):
                         print ' * ',
                    else:
                         print str (platserna3_4[lista3_4][element_i_lista3_4])+' ',
               print

          return ''
     
          
     # Hur platserna bokas          
     def BokadPlats (self,nr): 
          for B in self.bokade:
               if B.sittplats == nr:
                    return True
                
               
               
          return False

     #Hur en platse avbokas och dess felinmatningar     
     def Avboka(self,nr):
          
          for A in self.bokade:
               if str(A.sittplats)==nr:
                    self.bokade.remove(A)
                    print 'Din plats har blivit avbokad välj någon av följande:  '
                    print '\n'
                    print self.Platserna()
                    break     
          else:
               print 'Den platsen finns ej att avboka, Försök igen!! '
               print '\n'
          
               
        
     def Meny(self):
          
         val =''
            
         while val != 'B'+'A'+'S'+'Q' :
               print '\n'
               print 'VÄLJ NÅGOT AV FÖLJANDE!!'
               print '1 - vill du boka?: tryck på B'
               print '2 - vill du avboka : tryck på A?'
               print '3 - vill du skriva ut din bokning ?: tryck S'
               print '0 - Avsluta tryck Q'
               print '\n'
               val = raw_input('Ditt val: ');
               print '\n'
               if val == 'B':
                    self.BokaBiljet()
                 
               if val == 'A':
                    nr = raw_input( 'vilket plats vill du avboka: '+ '\n')
                    self.Avboka(nr)
                     
               if val == 'S':
                    self.SkrivaUt()
               if val == 'Q':
                    print
                    print '"Tack och välkommen åter"'+ '\n'
                    #break
               
                
         #return True
                
     
          
     # När användaren väjler BOKA då kommer till denna meny alltså Boka Biljeten meny     
     def BokaBiljet(self): 
          indistans=''
          while True:
               svar = raw_input('Vart vill du åka? (skriv staden)  : '+ '\n'+ 'Stockholm'+'\n'+'GTB'+'\n'+'Lund'+'\n'+'Kiruna'+'\n''\n')
               indistans =(svar)
               print '\n'
               if indistans not in ['Stockholm','stockholm','lund','Lund','kiruna','Kiruna','gtb','GTB']:
                    print 'Skriv en av ovanstående destinationerna!!!'
                    print '\n'
               else:
                    break
               
          utdistans=''
          while True:
               svar = raw_input('Varifrån vill du åka?(skriv staden)  : '+ '\n'+ 'Stockholm'+'\n'+'GTB '+'\n'+'Lund '+'\n'+'Kiruna '+'\n''\n')
               utdistans =(svar)
               if utdistans not in ['Stockholm','stockholm','lund','Lund','kiruna','Kiruna','gtb','GTB']:
                    print 'Skriv en annan avreseort!! '
                    print '\n'
               elif utdistans ==indistans:
                    print 'Skriv en annan avreseort!! '
                    print '\n'
               else:
                    break
               
          print '\n'
          
          svar = raw_input('när vill du åka ååmmdd:  ')
          datum = (svar)
          print '\n'

          passagerare=''
          while True:
               svar = raw_input('Vuxen : V '+ '\n' +'Barn : B '+'\n' )
               passagerare =(svar)
               print '\n'
               if passagerare not in ['V','v','B','b']:
                    
                    print'Felaktig val'
                    print '\n'
               else:
                    break
          #print '\n'
               #############Hur kan jag göra så att när användaren har valt sitt tex. rökare  får inte välja nån icke rökare platsnummer?????
          rok_och_ejrokplatsen=''
          while True:
               svar=raw_input('Smoking: S'+'\n'+'None-Smoking? : N '+ '\n')
               rok_och_ejrokplatsen = (svar)
               if rok_och_ejrokplatsen not in ['S','s','N','n']:
                    print 'Felaktig val'
                    print '\n'
               else:
                    break

          print '\n'
          self.Platserna()
          print '\n'

          
          #sittplats = ''
          sittplats = True ###########hur ska jag göra så att användaren inte får skriva bokstäver eller trycka på enter så att programmet inte kraschar?????
          while  sittplats:
               svar=raw_input('välj en sittplats från skärmen : ' + '\n') 
               sittplats = int(svar)
                    
               if sittplats > 32:
                    print ' Denna plats finns ej!! '
                    print '\n'
               elif self.BokadPlats(sittplats):
                    print 'Platsen är Bokad!! välj en annan Sittplats!!'
                    print '\n'
               elif sittplats =='':
                    print 'Fel'
               else:
                    sittplats = False
               
               
               
          B = Biljet(indistans,utdistans,datum,passagerare,rok_och_ejrokplatsen,sittplats)
          self.bokade.append(B)
          B.SkrivaUt()
          
          print B 
          print '\n'
          self.Platserna()
          
          print
     #Skriver ut på skärmen den senaste bokningen     #######det kommer alltid den första bokningen och inte den senaste. Jag vill ha den senaste/ eller alla bokningar som har gjorts. Alltså de ska visas på skärmen.
     def SkrivaUt (self):
          for B in self.bokade:
               print B
               break
          else:
               
               print'"Det finns ingenting av skriva ut!"'
               print '\n'
          
#platsernas listor
platserna1 = ([1,8,9 ,16,17,24,25,32])
platserna2 = ([2,7,10,15,18,23,26,31])
platserna3 = ([3,6,11,14,19,22,27,30])
platserna4 = ([4,5,12,13,20,21,28,29])
platserna1_2 = ([platserna1,platserna2])
platserna3_4= ([platserna3,platserna4])



V1=Vagn()
V1.Platserna()
print'\n' 
V1.Meny()
V1.SkrivaUt()
#V1.Platserna()
Senast redigerad av 4 conini, redigerad totalt 14 gång.
Alleinsora
Inlägg: 378
Blev medlem: 24 maj 2007, 01:53
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Kalmar/Luleå
Kontakt:

Re: Hjälp med python

Inlägg av Alleinsora »

Det hela beror på hur avancerat du vill ha programmet. Personligen skulle jag börja med att skapa en klass för platserna, med variabler för allt man vill att de ska inehålla och metoder för bokning och avbokning. Något som liknar detta kanske:

Kod: Markera allt

class plats:
    def __init__(self, number):
        self.bokad=False
        self.vem=""
        self.number = number
    def boka(self, vem):
        self.bokad=True
        self.vem=vem
    def avboka(self):
        self.bokad=False
        self.vem=""
Sen finns det många sätt att hålla reda på platserna, personligen föredrar jag antingen en dict eller en array. Ex med array och 32 platser:

Kod: Markera allt

platser= []
for a in range(32):
    platser.append(plats(a+1))
En funktion för att tolka input är också rätt enkelt (använder platser-arrayen ovan):

Kod: Markera allt

def kommando():
    global platser
    command = raw_input(">>")
    command.split(' ')
    if command[0] == 'b':
        if command[1} <= 32:
            if not platser[command[1]-1].bokad
                platser[command[1]-1].boka(command[2])
            else:
                print "redan bokad"
        else:
            print "number to high"
Dock blir det lätt många snåriga if-satser i en sådan tolk. I C hade man använt SWITCH/CASE för att göra det mindre snårigt men det är mig veterligen inte implementerat i python. Dock kan man använda en dict och några funktioner för att åstadkomma samma princip:

Kod: Markera allt

switch={'b':boka,'a':avboka,'s':skriv,'q':quit}
if command[0] in switch:
    switch[command[0]](command)
else:
    print "errorous command"
När detta fungerar så kan du börja titta på grafiken. Happy coding och fråga gärna om du stöter på patrull.

*EDIT*
Kom på att det ofta underlättar att skriva pseudokod först för att få koll på hur dataflödet i programmet ska vara.
Hur jag än gör så slutar det alltid med E17 på netbooken....
Skriv svar

Återgå till "Programmering och webbdesign"