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 »

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()
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: HJÄLP!!!! med python...

Inlägg av mcNisse »

formattera texten med code taggen. Som det ser ut nu ör det ingen fungerande python kod.
conini
Inlägg: 4
Blev medlem: 29 okt 2009, 21:38
OS: *BSD

Re: 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.
# hjälp med när användaren ska välja plats om den trycker bokstäver eller bara enter då kraschar programet.
#det skriver inte ut den senaste bokningen utan den första bokningen. om det går att den ska skrivas ut alla bokningarna(på skärmen)
#om användaren väljer rökare, den ska kunna välja icker rökare plats. 
# 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'
          
          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
          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     
     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 2 conini, redigerad totalt 14 gång.
Användarvisningsbild
Urban Anjar
Inlägg: 7306
Blev medlem: 05 nov 2006, 22:59
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Vickleby
Kontakt:

Re: HJÄLP!!!! med python...

Inlägg av Urban Anjar »

Fortfarande nåt knas. I python är indenteringarna betydelsebärande.
Ubuntu från början: http://ubuntufranborjan.wordpress.com/
Vill påminna om den här lilla filmen http://video.google.com/videoplay?docid ... 522818645#
Användarvisningsbild
Louie
Inlägg: 2361
Blev medlem: 15 nov 2006, 10:15
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Ort: Göteborg
Kontakt:

Re: HJÄLP!!!! med python...

Inlägg av Louie »

Vad är det som inte fungerar med koden?
Mycket lättare att felsöka om du kan ge ett felmeddelande samt referera till raden/raderna som krånglar för allt är väl inte kaput?

/L
Ett väl utfört arbete ger en inre tillfredsställelse och är den grund var på samhället vilar.
Linuxuser - Fri webhosting åt folket!
IRC: Louie` @ #kurbitz freenode - Jabber: PM för jabber
Användarvisningsbild
Urban Anjar
Inlägg: 7306
Blev medlem: 05 nov 2006, 22:59
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Vickleby
Kontakt:

Re: HJÄLP!!!! med python...

Inlägg av Urban Anjar »

Ja, felmeddelanden är hjälpsamma, även om de kanske inte verkar så i början. Råkar man ut för ett helt gäng är det ofta det första man ska bry sig om. Resten är inte sällan följdefel.
Ubuntu från början: http://ubuntufranborjan.wordpress.com/
Vill påminna om den här lilla filmen http://video.google.com/videoplay?docid ... 522818645#
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 »

Tittat lite och försökt hitta var någonstans det blir fel med inmatningen och kommit fram till att din while-loop för att kolla om man är skrivit in ett gitligt alternativ inte fungerar, detta för att python tolkar 'B'+'A'+'S'+'Q' som 'BASQ' och man fastnar i loopen.

Jag föreslår att du använder en dict för att hålla reda på vilka menyalternativ som finns och en rekursiv funktion för inmatningen. ungefär som nedan.

Kod: Markera allt

class Vagn:
    # ... Dina metoder
    self.alternativ = { 'b': self.bokaBiljett, 'a' : self.avbokaBiljett, 'q' : self.exit, 'e': self.exit , 's' : self.SkrivaUt, 'h' : self.help}
    def promt(self, line):
        try:
            val = raw_input(line).lower() # .lower() gör att upper eller lower-case blir egalt.
        except:
            print "Error in getting input, exiting" #För att veta om det blir fel. :)
            val = 'e'
        if alternativ.has_key(val): #testar så att det var ett giltligt val
            self.alternativ[val]() #Kallar den funktion som matchas mot input
        else:
            self.promt('Inget giltligt val (h för hjälp)\nDitt val: ')
            
    def help(self):
        print 'VÄLJ NÅGOT AV FÖLJANDE:\n\
            1 - vill du boka?: tryck på B\n\
            2 - vill du avboka : tryck på A?\n\
            3 - vill du skriva ut din bokning ?: tryck S\n\
            0 - Avsluta tryck Q\n\n'

Angående att programmet krashar när användaren frågas om en sittplats och inte matar in ett nummer så rekommenderar jag samma metodik där, rekursiv funktion som frågar om en siffra, testar den och antingen skickar den vidare till bokning/avbokning eller säger att det inte är en siffra och ber användaren försöka igen.

Kod: Markera allt

#exempelvis
def getNumber(line):
    nr_raw = raw_input(line)
    try:
        nr = int(nr_raw)
    except:
        print "\b\r'
        getNumber('inget tal! Försök igen:')
    return nr
För utskriften av biljetten på skärmen så misstänker jag att det är ett följdfel på något annat. Är dock lite för trött för att sätta mig in i det fullt ut.
Hur jag än gör så slutar det alltid med E17 på netbooken....
Skriv svar

Återgå till "Programmering och webbdesign"