Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.83 KB | None | 0 0
  1. def volumes(tuple):
  2. alfabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3. plaatsalfabet = 0 # de plaats van het alfabet houdt bij waar we zitten in het alfabet als men de cijfers afgaat,
  4. # als men 4 heeft gehad als element v tuple moet men niet terug beginnen bij 0 maar verdertellen vanaf de laatste letter
  5. eindlijst = []
  6.  
  7. if type(tuple) == int:
  8. raise AssertionError('ongeldige opdeling') # als de tuple eig een int is
  9. for _ in tuple:
  10. if type(_) != int: # als element van tuple geen getal is
  11. raise AssertionError('ongeldige opdeling')
  12. if _ <= 0: # als getal v tuple kleiner is dan 0
  13. raise AssertionError('ongeldige opdeling')
  14. if sum(tuple) != 26: # als som vd getallen niet 26 is
  15. raise AssertionError('ongeldige opdeling')
  16.  
  17.  
  18. else:
  19. for _ in tuple:
  20. eersteletter = alfabet[plaatsalfabet]
  21. laatsteletter = alfabet[plaatsalfabet + _ - 1] # +1 want men begint te tellen op 0 in python
  22.  
  23. if eersteletter == laatsteletter: # in het geval dat men "p-p" krijgt moet men gewoon "p" krijgen
  24. eindlijst.extend((eersteletter, ' '))
  25. else:
  26. eindlijst.extend((eersteletter, '-', laatsteletter, ' '))
  27.  
  28. plaatsalfabet += _ # +2 want men neemt de volgende letter
  29.  
  30. eindlijst.pop(-1) # laatste spatie op het einde wegdoen
  31. eindlijst = ''.join(eindlijst)
  32.  
  33. return eindlijst
  34.  
  35.  
  36. def aantallen(string):
  37. """"
  38. >>> aantallen('A-G H-O P Q-Z')
  39. (7, 8, 1, 10)
  40. """
  41. alfabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  42. assertionlijst = [] # lijst die nodig is om te kijken dat alle letters mekaar alfabetisch opvolgen
  43.  
  44. if not isinstance(string, str): # als de input geen string is
  45. raise AssertionError('ongeldige opdeling')
  46.  
  47. if string[0] != 'A' or string[-1] != 'Z':
  48. raise AssertionError('ongeldige opdeling')
  49.  
  50. string_list = list(string) # kijken ofdat de letters voor en na de spatie mekaar alfabetisch opvolgen
  51. for _ in string_list:
  52. if _ in ' ':
  53. voorspatie = string_list[string_list.index(_) - 1]
  54. naspatie = string_list[string_list.index(_) + 1]
  55.  
  56. if ord(voorspatie) + 1 != ord(naspatie):
  57. raise AssertionError('ongeldige opdeling')
  58. else:
  59. string_list.pop(string_list.index(
  60. _)) # we poppen de 'gebruikte' spatie want anders ga je telkens terug gaan naar de spatie die men eerst tegenkomt bij de volgende spatie
  61.  
  62. combo = [] # lijst waar x-y in gaat
  63. eindlijst = []
  64.  
  65. for _ in string:
  66. if _ not in ' ':
  67. combo.append(_)
  68. else:
  69. eersteletter = combo[0]
  70. laatsteletter = combo[-1]
  71. indexeersteletter = alfabet.index(eersteletter)
  72. indexlaatsteletter = alfabet.index(laatsteletter)
  73.  
  74. getal = indexlaatsteletter - indexeersteletter + 1 # getal dat wordt toegevoegd aan tuple
  75.  
  76. eindlijst.append(getal)
  77. combo = []
  78.  
  79. eersteletter = combo[
  80. 0] # deze blok doen we nog een laatste keer want op het einde van de string staat er geen spatie om de bewerking door te laten gaan
  81. laatsteletter = combo[-1]
  82. indexeersteletter = alfabet.index(eersteletter)
  83. indexlaatsteletter = alfabet.index(laatsteletter)
  84. getal = indexlaatsteletter - indexeersteletter + 1 # getal dat wordt toegevoegd aan tuple
  85. eindlijst.append(getal)
  86. combo = []
  87.  
  88. return tuple(eindlijst)
  89.  
  90.  
  91. def delta(opdeling, namen):
  92. """
  93. >>> delta('A B C-I J K-L M-N O P Q-Y Z', [18, 1, 30, 48, 29, 49, 44, 45, 8, 35, 48, 7, 31, 31, 34, 44, 19, 39, 3, 42, 4, 5, 6, 15, 22, 11])
  94. 548.8
  95. """
  96.  
  97.  
  98. lijstsum = [] # hier gaan alle opgetelde letterintervallen in
  99.  
  100. if isinstance(opdeling, int): #als je opdeling een int is
  101. raise AssertionError('ongeldige opdeling')
  102.  
  103. if isinstance(opdeling[0], int): # als de opdeling bestaat uit cijfers
  104. opdeling = volumes(opdeling)
  105.  
  106. if opdeling[0] != 'A' or opdeling[-1] != 'Z':
  107. raise AssertionError('ongeldige opdeling')
  108.  
  109.  
  110. if isinstance(opdeling, str):
  111. string_list = list(opdeling) # kijken ofdat de letters voor en na de spatie mekaar alfabetisch opvolgen
  112. for _ in string_list:
  113. if _ in ' ':
  114. voorspatie = string_list[string_list.index(_) - 1]
  115. naspatie = string_list[string_list.index(_) + 1]
  116.  
  117. if ord(voorspatie) + 1 != ord(naspatie):
  118. raise AssertionError('ongeldige opdeling')
  119. else:
  120. string_list.pop(string_list.index(
  121. _)) # we poppen de 'gebruikte' spatie want anders ga je telkens terug gaan naar de spatie die men eerst tegenkomt bij de volgende spatie
  122.  
  123. opdeling = list(opdeling)
  124.  
  125. alfabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  126. combo = []
  127. for _ in opdeling:
  128. if _ not in ' ':
  129. combo.append(_)
  130. else:
  131. eersteletter = combo[0]
  132. laatsteletter = combo[-1]
  133. indexeersteletter = alfabet.index(eersteletter)
  134. indexlaatsteletter = alfabet.index(laatsteletter)
  135. lijstsum.append(sum(namen[indexeersteletter:(indexlaatsteletter+1)]))
  136. combo = []
  137.  
  138. eersteletter = combo[0]
  139. laatsteletter = combo[-1]
  140. indexeersteletter = alfabet.index(eersteletter)
  141. indexlaatsteletter = alfabet.index(laatsteletter)
  142. lijstsum.append(sum(namen[indexeersteletter:(indexlaatsteletter + 1)]))
  143. combo = []
  144.  
  145.  
  146. gemiddeld = sum(namen) / (opdeling.count(' ') + 1) # aantal - in opdeling is aantal volumes
  147.  
  148. deltaa = 0
  149. for _ in lijstsum:
  150. deltaa += abs(_ - gemiddeld)
  151. return deltaa
  152.  
  153. if __name__ == '__main__':
  154. import doctest
  155. (doctest.testmod())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement