#Kontaktförmedling
#Sofie Eklund 24/11-2010
class Register(): #Klass för att räkna ut betyg på personerna
def meny(self):
val = self.meny_valen()
self.las_fil() #Hoppar till metoden las.fil()
while val != '4':
if val == '1': #Letar ny partner
self.las_fil()
self.soker()
self.preferenser()
self.normalisera()
self.rankning()
self.skriv_ut()
val = self.meny_valen()
elif val == '2': #Lägg till ny person
self.lagg_till()
print ('\n')
val = self.meny_valen()
elif val == '3': #Tar bort en person
self.ta_bort()
print ('\n')
val = self.meny_valen()
else:
print ('Kontaktförmedling')
print ('Tryck 1 för att leta efter en ny partner')
print ('Tryck 2 för att lägga till en ny person')
print ('Tryck 3 för att ta bort en person ur registret')
print ('Tryck 4 för att avsluta')
val = str(raw_input('Felaktigt val! Försök igen: '))
print ('\n')
if val == '4':#Avslutar program
print ('Programmet har avslutats')
def meny_valen(self): #Alternativ
print ('Kontaktförmedling')
print ('Tryck 1 för att leta efter en ny partner')
print ('Tryck 2 för att lägga till en ny person')
print ('Tryck 3 för att ta bort en person ur registret')
print ('Tryck 4 för att avsluta')
val = str(raw_input('Ange vad du vill göra: '))
print ('\n')
return val
def las_fil(self): #Metod som lägger in män och kvinnor i olika listor
meny = open('personregister2.txt','r')#Öppnar & läser filen.
self.las = meny.readlines()#Lägger personerna i en lista
self.alla_tjejer = []
self.alla_killar = []
self.alla = []
for i in range(len(self.las)): #Längden på filen
self.las[i]=self.las[i].rstrip('\n') #Tar bort \n
plats=self.las[i].split('/')
namn = plats[0]
kon = str(plats [1])
alder = int(plats [2])
skonhet = plats[3]
intelligens = plats[4]
humor = plats[5]
formogenhet = plats[6]
sexighet = plats[7]
utbildning = plats[8]
self.alla.append(plats)#Lägger till i listan self.alla
if plats[1] == "k": #Läggs till i listan för tjejer
self.alla_tjejer.append(plats)
elif plats[1] == "m":#Läggs till i listan för killar
self.alla_killar.append(plats)
meny.close()
def soker(self): #Metod som tar reda på vad personen söker
self.sokes = ''
while self.sokes not in ['man','kvinna', 'bada']:
self.sokes = raw_input ('Söker du en man, kvinna eller bada delarna? ')
if self.sokes not in ['man', 'kvinna', 'bada']:
print ('Felaktigt val')
def preferenser(self): #Metod som tar reda på personens preferenser
print ('Gradera från 0-5 hur du värdesätter följande: ')
egen=['Mognad: ', 'Skönhet: ', 'Intelligens: ', 'Humor: ', 'Förmögenhet: ', 'Sexighet: ', 'Utbildning: ']
count = 0
self.betyg=[0,0,0,0,0,0,0] #"Betyg" på egenskaperna hamnar i listan
while count <7:
try:
value = self.betyg[count]= input(egen[count])
except NameError as error:
print("Du måste ange ett tal mellan 0 och 5!")
count -=1
if self.betyg[count] < 0:
print ('Talet måste vara större än 0!')
count -= 1
elif self.betyg[count] > 5:
print ('Talet måste vara mindre än 5!')
count -= 1
count += 1
count=0
def normalisera(self): #Räknar ut en persons betyg, förklaring
if self.sokes == 'man':
self.totalt_passar_man = []
for l in range(len(self.alla_killar)):#Alla killar
passar = 0
for m in range(2,9):#Alla killars egenskaper
sum_max = []
for k in range(len(self.alla_killar)): #Rad(k), kolumn(m) :Alla killars egenskaper
sum_max.append(self.alla_killar[k][m])
passar = passar + float(self.betyg[m-2])*(float(self.alla_killar[l][m]))/float(max(sum_max))
self.totalt_passar_man.append(passar)
elif self.sokes == 'kvinna':
self.totalt_passar_kvinna = []
for l in range(len(self.alla_tjejer)):
passar = 0
for m in range(2,9):
sum_max = []
for k in range(len(self.alla_tjejer)):
sum_max.append(self.alla_tjejer[k][m])
passar = passar + float(self.betyg[m-2])*(float(self.alla_tjejer[l][m]))/float(max(sum_max))
self.totalt_passar_kvinna.append(passar)
elif self.sokes == 'bada':
self.totalt_passar_alla = []
for l in range(len(self.alla)):
passar = 0
for m in range(2,9):
sum_max = []
for k in range(len(self.alla)):
sum_max.append(self.alla[k][m])
passar = passar + float(self.betyg[m-2])*(float(self.alla[l][m]))/float(max(sum_max))
self.totalt_passar_alla.append(passar)
def rankning(databas,status,lista_ett,lista_tva): #Rankar alla personer som läggs i en sorterad lista
for inmatning in databas:
if inmatning == status:
self.top_lista = []
self.lista = []
for e in range(len(lista_ett)): #Länden på alla killar
self.lista.append(lista_ett[e]) #Ovan läggs i listan self.lista
self.lista.sort()
self.lista.reverse()#Nu är listan sorterad så den med högst betyg har lägst index
for b in range(len(lista_ett)):
for j in range(len(self.lista)):
if self.lista[b] == lista_ett[j]:
self.top_lista.append(lista_tva[j])
status = ['man','kvinna','bada']
rankning('databas','man','self.totalt_passar_man','self.alla_killar')
rankning('databas','kvinna','self.totalt_passar_kvinna','self.alla_tjejer')
rankning('databas','bada','self.totalt_passar','self.alla')
def skriv_ut(self): #Skriver ut toplistan
for t in range(len(self.top_lista)):
for u in range(1):
print ('\n')
print 'Namn: '+str(self.top_lista[t][0])
print 'Kön: '+str(self.top_lista[t][1])
print 'Ålder: '+self.top_lista[t][2]
print 'Skönhet: '+self.top_lista[t][3]
print 'Intelligens: '+self.top_lista[t][4]
print 'Humor: '+self.top_lista[t][5]
print 'Förmögenhet: '+self.top_lista[t][6]
print 'Sexighet: '+self.top_lista[t][7]
print 'Utbildning: '+self.top_lista[t][8]
print ('\n')
def lagg_till(self):#Lägger till en person i registret
print ('Lägg till en person genom att mata in nedanstående information: ')
meny = open('personregister2.txt', 'a')
meny.write(str(raw_input('Namn: '))+'/')
genus = ''
while genus not in ['m','k']:
genus = raw_input('Kön(m/k): ')
if genus not in ['m','k']:
print ('Felaktigt val!')
meny.write(genus +'/')
alder = int(raw_input('Ålder: ')) #Fixa resten som denna!
while not 100 >= alder >= 18:
alder = int(raw_input('Felaktigt val! Försök igen:: '))
meny.write(alder + '/')
print ('Ange ett värde mellan 0-1(med en decimal) på följande: ')
skonhet = int(raw_input('Skönhet: ')) #Fixa resten som denna!
while not 1.0 >= skonhet >= 0.0:
skonhet = int(raw_input('Felaktigt val! Försök igen:: '))
meny.write(skonhet + '/')
intelligens = int(raw_input('Intelligens: ')) #Fixa resten som denna!
while not 200 >= intelligens >= 70:
intelligens = int(raw_input('Felaktigt val! Försök igen:: '))
meny.write(intelligens + '/')
humor = int(raw_input('Humor: ')) #Fixa resten som denna!
while not 1.0 >= intelligens >= 0.0:
humor = int(raw_input('Felaktigt val! Försök igen:: '))
meny.write(humor + '/')
formogenhet = ''
while formogenhet < '0':
formogenhet = raw_input('Förmögenhet(kkr): ')
if formogenhet < '0':
print ('Felaktigt val')
meny.write(formogenhet +'/')
sexighet = int(raw_input('Sexighet: ')) #Fixa resten som denna!
while not 1.0 >= sexighet >= 0.0:
sexighet = int(raw_input('Felaktigt val! Försök igen:: '))
meny.write(sexighet + '/')
utbildning = int(raw_input('Utbildning: ')) #Fixa resten som denna!
while not 1.0 >= utbildning >= 0.0:
utbildning = int(raw_input('Felaktigt val! Försök igen:: '))
meny.write(utbildning + '/')
def ta_bort(self):#Tar bort en person ur registret.
meny = open('personregister2.txt','w')
ta_bort_person = raw_input('Vem vill du ta bort? ')
antal_personer_innan = len(self.alla)
for k in range(len(self.alla)):
if str(self.alla[k][0]) == str(ta_bort_person):
for h in range(len(self.alla_killar)):
if str(self.alla[k][0]) == str(self.alla_killar[h][0]):
self.alla_killar.pop(h)
break
for t in range(len(self.alla_tjejer)):
if str(self.alla[k][0]) == str(self.alla_tjejer[t][0]):
self.alla_tjejer.pop(t)
break
print (str(self.alla[k][0]) + ' finns inte längre i registret')
self.alla.pop(k)#Raderar hela personen
for f in range(len(self.alla)):
for s in range(9): #Rad(f), kolumn(s)
meny.write(self.alla[f][s])
if s <= 7:
meny.write('/')
meny.write('\n')
break #Så att den börjar om från början av metoden
antal_personer_efter = len(self.alla)
if antal_personer_innan == antal_personer_efter:
print ('Det finns ingen person med namnet ' + str(ta_bort_person))
#Huvudprogram
r = Register()
r.meny()