AlfonsoPEREZ

Dichotomous Key

Oct 30th, 2020 (edited)
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.44 KB | None | 0 0
  1. import csv
  2.  
  3. class dichotomousKey(object):
  4.     def __init__(self, steps = []):
  5.         self.steps = steps
  6.  
  7.     def load(self, file_name):
  8.         with open(file_name + '.txt') as csv_file:
  9.             csv_reader = csv.reader(csv_file, delimiter='|')
  10.             line_count = 0
  11.             for row in csv_reader:
  12.                 if line_count == 0:
  13.                     self.unpack(row)
  14.                     line_count += 1
  15.                 else:
  16.                     self.unpack(row)
  17.                     line_count += 1
  18.  
  19.     def unpack(self, row):
  20.         if len(row) == 4:
  21.             level, argument, goto, organism = row
  22.             return self.steps.append(Step(level, argument, goto, organism))
  23.         if len(row) == 3:
  24.  
  25.             level, argument, goto = row
  26.             return self.steps.append(Step(level, argument, goto))
  27.  
  28.     def execute(self, level):
  29.         print(self.steps[level].level + 'a : ' + self.steps[level].argument)
  30.         print(self.steps[level + 1].level + 'b : ' + self.steps[level + 1].argument)
  31.         choice = str(input("<a/b> "))
  32.         print()
  33.         if choice.lower() == 'a':
  34.             if self.steps[level].has_organism():
  35.                 print("Your organism is: %s" % (self.steps[level].organism))
  36.             else:
  37.                 self.execute(self.steps[level].get_list_index(self.steps[level].goto))
  38.         elif choice.lower() == 'b':
  39.             if self.steps[level + 1].has_organism():
  40.                 print("Your organism is: %s" % (self.steps[level + 1].organism))
  41.             else:
  42.                 self.execute(self.steps[level + 1].get_list_index(self.steps[level + 1].goto))
  43.         else:
  44.             print("Error, Invalid Input!")
  45.  
  46. class Step(object):
  47.     def __init__(self, level=None, argument=None, goto=None, organism=None):
  48.         self.level = level
  49.         self.argument = argument
  50.         self.goto = goto
  51.         self.organism = organism
  52.  
  53.     def has_organism(self):
  54.         if self.organism:
  55.             return True
  56.  
  57.     def get_list_index(self, goto):
  58.         return (int(goto) * 2) - 2
  59.  
  60. def main():
  61.     d_key = dichotomousKey()
  62.     d_key.load('dichotomous')
  63.     d_key.execute(0)
  64.     input()
  65.  
  66. main()
  67.  
  68. #SAMPLE TEXT FILE
  69. '''
  70. Vertebrate Dichotomous Key
  71.  
  72. 1|It has fur.|0|Mammals
  73. 1|It has no fur.|2
  74.  
  75. 2|It has feathers.|0|Birds
  76. 2|It has no feathers.|3
  77.  
  78. 3|It has dry skin.|0|Reptiles
  79. 3|It has moist skin|4
  80.  
  81. 4|It has scales|0|Fish
  82. 4|It has no scales|0|Amphibians
  83. '''
  84.  
Add Comment
Please, Sign In to add comment