1 ######################################################################### 2 # 10-row School abacus 3 # by 4 # Michael H 5 ######################################################################### 6 # Description partially extracted from from wikipedia 7 # 8 # Around the world, abaci have been used in pre-schools and elementary 9 # 10 # In Western countries, a bead frame similar to the Russian abacus but 11 # with straight wires and a vertical frame has been common (see image). 12 # Helps schools as an aid in teaching the numeral system and arithmetic 13 # 14 # |00000***** | row factor 1000000000 15 # |00000***** | row factor 100000000 16 # |00000***** | row factor 10000000 17 # |00000***** | row factor 1000000 18 # |00000***** | row factor 100000 19 # |00000***** | row factor 10000 20 # |00000***** | row factor 1000 21 # |00000**** *| row factor 100 * 1 22 # |00000*** **| row factor 10 * 2 23 # |00000** ***| row factor 1 * 3 24 # ----------- 25 # Sum 123 26 # 27 # Each row represents a different row factor, starting with x1 at the 28 # bottom, ascending up to x1000000000 at the top row. 29 ###################################################################### 30 31 # TASK: 32 # Define a procedure print_abacus(integer) that takes a positive integer 33 # and prints a visual representation (image) of an abacus setup for a 34 # given positive integer value. 35 # 36 # Ranking 37 # 1 STAR: solved the problem! 38 # 2 STARS: 6 < lines <= 9 39 # 3 STARS: 3 < lines <= 6 40 # 4 STARS: 0 < lines <= 3 41 42 def print_abacus(value): 43 row_number = 1 44 while row_number <= 10: 45 number = value // (10**(10-row_number)) 46 if number == 0: 47 print '|' + '0'*5 + '*'*5 + ' '*3 + '|' 48 elif number > 0 and number < 5: 49 print '|' + '0'*5 + '*'*(5-number) + ' '*3 + '*'*number + '|' 50 else: 51 print '|' + '0'*(10-number) + ' '*3 + '0'*(number-5) + '*'*5 + '|' 52 value -= number*(10**(10-row_number)) 53 row_number += 1 54 55 56 57 58 59 ### TEST CASES 60 print "Abacus showing 0:" 61 print_abacus(0) 62 #>>>|00000***** | 63 #>>>|00000***** | 64 #>>>|00000***** | 65 #>>>|00000***** | 66 #>>>|00000***** | 67 #>>>|00000***** | 68 #>>>|00000***** | 69 #>>>|00000***** | 70 #>>>|00000***** | 71 #>>>|00000***** | 72 print "Abacus showing 12345678:" 73 print_abacus(12345678) 74 #>>>|00000***** | 75 #>>>|00000***** | 76 #>>>|00000**** *| 77 #>>>|00000*** **| 78 #>>>|00000** ***| 79 #>>>|00000* ****| 80 #>>>|00000 *****| 81 #>>>|0000 0*****| 82 #>>>|000 00*****| 83 #>>>|00 000*****| 84 print "Abacus showing 1337:" 85 print_abacus(1337) 86 #>>>|00000***** | 87 #>>>|00000***** | 88 #>>>|00000***** | 89 #>>>|00000***** | 90 #>>>|00000***** | 91 #>>>|00000***** | 92 #>>>|00000**** *| 93 #>>>|00000** ***| 94 #>>>|00000** ***| 95 #>>>|000 00*****|
结果