Advertisement
Guest User

ISBN

a guest
Nov 21st, 2014
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. '''
  2. Created on 20 nov. 2014
  3.  
  4. @author: femkebuys
  5. '''
  6. def isISBN13(code):
  7.  
  8. """
  9. Gaat na of de gegeven ISBN-13 code geldig is of niet.
  10.  
  11. >>> isISBN13('9789743159664')
  12. True
  13. >>> isISBN13('9787954527409')
  14. False
  15. >>> isISBN13('8799743159664')
  16. False
  17. """
  18.  
  19. def controlecijfer(code):
  20.  
  21. # controlecijfer berekenen
  22. controle = sum(
  23. (3 if i % 2 else 1) * int(code[i]) for i in range(12)
  24. ) % 10
  25.  
  26. # controlecijfer omzetten naar één enkel cijfer
  27. return str((10 - controle) % 10)
  28.  
  29. # controleer of de gegeven code een string is
  30. if not isinstance(code, str):
  31. return False
  32.  
  33. # controleer of de gegeven code bestaat uit 13 karakters
  34. if len(code) != 13:
  35. return False
  36.  
  37. # prefix van de gegeven code controleren
  38. if code[:3] not in {'978', '979'}:
  39. return False
  40.  
  41. # controleer of alle karakters van de gegeven code cijfers zijn
  42. if not code.isdigit():
  43. return False
  44.  
  45. # controleer het controlecijfer van de gegeven code
  46. return controlecijfer(code) == code[-1]
  47.  
  48. def overzicht(codes):
  49.  
  50. """
  51. >>> codes = [
  52. ... '9789743159664', '9785301556616', '9797668174969', '9781787559554',
  53. ... '9780817481461', '9785130738708', '9798810365062', '9795345206033',
  54. ... '9792361848797', '9785197570819', '9786922535370', '9791978044523',
  55. ... '9796357284378', '9792982208529', '9793509549576', '9787954527409',
  56. ... '9797566046955', '9785239955499', '9787769276051', '9789910855708',
  57. ... '9783807934891', '9788337967876', '9786509441823', '9795400240705',
  58. ... '9787509152157', '9791478081103', '9780488170969', '9795755809220',
  59. ... '9793546666847', '9792322242176', '9782582638543', '9795919445653',
  60. ... '9796783939729', '9782384928398', '9787590220100', '9797422143460',
  61. ... '9798853923096', '9784177414990', '9799562126426', '9794732912038',
  62. ... '9787184435972', '9794455619207', '9794270312172', '9783811648340',
  63. ... '9799376073039', '9798552650309', '9798485624965', '9780734764010',
  64. ... '9783635963865', '9783246924279', '9797449285853', '9781631746260',
  65. ... '9791853742292', '9781796458336', '9791260591924', '9789367398012'
  66. ... ]
  67. >>> overzicht(codes)
  68. Engelstalige landen: 8
  69. Franstalige landen: 4
  70. Duitstalige landen: 6
  71. Japan: 3
  72. Russischtalige landen: 7
  73. China: 8
  74. Overige landen: 11
  75. Fouten: 9
  76. """
  77.  
  78. # histogram van groepen opbouwen
  79. groepen = {}
  80. for i in range(11):
  81. groepen[i] = 0
  82. for code in codes:
  83. if not isISBN13(code):
  84. groepen[10] += 1
  85. else:
  86. groepen[int(code[3])] += 1
  87.  
  88. # samenvatting uitschrijven
  89. print('Engelstalige landen: {}'.format(groepen[0] + groepen[1]))
  90. print('Franstalige landen: {}'.format(groepen[2]))
  91. print('Duitstalige landen: {}'.format(groepen[3]))
  92. print('Japan: {}'.format(groepen[4]))
  93. print('Russischtalige landen: {}'.format(groepen[5]))
  94. print('China: {}'.format(groepen[7]))
  95. print('Overige landen: {}'.format(groepen[6] + groepen[8] + groepen[9]))
  96. print('Fouten: {}'.format(groepen[10]))
  97.  
  98. if __name__ == '__main__':
  99. import doctest
  100. doctest.testmod()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement