-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathModeFarming.py
155 lines (132 loc) · 4.31 KB
/
ModeFarming.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
"""
Code for self-help group management of coffee farmers.
By Rodgers Andati.
"""
class Farmer:
""" A class to hold a farmer's details """
def __init__(self, name, farmerID, nextFarmer=None):
self.name = name
self.farmerID = farmerID
self.nextFarmer = nextFarmer
def __str__(self):
return "Name: "+ self.name+", No: "+ str(self.farmerID)
class FarmersCollection:
""" Collection class for all farmers in the village """
numOfFarmers = 0
def __init__(self, numOfBags=2, daysInterval=1):
self.numOfBags = numOfBags
self.daysInterval = daysInterval
self.firstFarmer = None
self.lastFarmer = None
self.nextReceiver = None
def addFarmer(self,name):
"""Addition of a new farmer"""
FarmersCollection.numOfFarmers += 1
farmer = Farmer(name, FarmersCollection.numOfFarmers)
if self.firstFarmer != None:
self.lastFarmer.nextFarmer = farmer
self.lastFarmer = farmer
else:
#First farmer being added
self.firstFarmer = farmer
self.lastFarmer = farmer
self.nextReceiver = farmer
def removeFarmer(self,name):
"""Removal of an existing farmer"""
farmer = self.firstFarmer
#Check if first farmer
if farmer.name == name:
self.firstFarmer = self.firstFarmer.nextFarmer
#check if was next receiver
if farmer == self.nextReceiver:
self.nextReceiver = farmer.nextFarmer
del farmer
#Change numbering of farmers to reflect new order
tempFarmer = self.firstFarmer
while tempFarmer != None :
tempFarmer.farmerID -= 1
tempFarmer = tempFarmer.nextFarmer
else:
previous = farmer
while farmer != None :
if(farmer.name == name):
previous.nextFarmer = farmer.nextFarmer
#check if was next receiver
if farmer == self.nextReceiver:
self.nextReceiver = farmer.nextFarmer
del farmer #garbage collection
FarmersCollection.numOfFarmers -= 1 #Decrement count of farmers
#Change numbering of farmers to reflect new order
tempFarmer = previous.nextFarmer
while tempFarmer != None :
tempFarmer.farmerID -= 1
tempFarmer = tempFarmer.nextFarmer
break
previous = farmer
farmer = farmer.nextFarmer
if farmer == None:
print "*** No such farmer\n"
def getNextReceiver(self):
"""Returns who is next to receive coffee of bags """
print "Next Receiver:- ", self.nextReceiver, "\n"
def received(self, name):
if self.nextReceiver.name == name:
if self.nextReceiver.nextFarmer != None: #Check if the last farmer
self.nextReceiver = self.nextReceiver.nextFarmer
else:
self.nextReceiver = self.firstFarmer
else:
print "*** You are violating the order! "+ self.nextReceiver.name + " is to receive next.\n"
def printFarmers(self):
""" Iteration over all the farmers and printing their number"""
print "List of farmers"
print "--------------------------"
farmer = self.firstFarmer
while farmer != None :
print farmer
farmer = farmer.nextFarmer
def getPreviousFarmer(self):
""" Returns the previous receiver """
farmer = self.firstFarmer
if farmer == self.nextReceiver:
print "Previous receiver :- ", self.lastFarmer, "\n"
else:
previous = farmer
while farmer != None :
if farmer == self.nextReceiver:
print "Previous receiver :- ", previous, "\n"
previous = farmer
farmer = farmer.nextFarmer
def nextReceiverInDays(self,days):
"""Returns whose turn it will be in X days from now"""
numdays = days % FarmersCollection.numOfFarmers
if numdays == 0: #the current next receiver is the one
print "Receiver in " + str(days) + " days is:- ", self.nextReceiver.nextFarmer, "\n"
else:
farmer = self.firstFarmer
for x in range(0, numdays):
if farmer.nextFarmer != None:
farmer = farmer.nextFarmer
else:
farmer = self.firstFarmer
print "Receiver in " + str(days) + " days is:- ", farmer, "\n"
#IMPLEMENTATION SECTION
farmers = FarmersCollection() #Instance of the collection
print "" #new line
#Add farmers, remove some
farmers.addFarmer("Joseph")
farmers.addFarmer("Rodgers")
farmers.addFarmer("Faith")
farmers.addFarmer("Vincent")
farmers.addFarmer("Mildred")
farmers.addFarmer("Janet")
farmers.addFarmer("Andrew")
farmers.removeFarmer("Joseph")
farmers.removeFarmer("Mildred")
farmers.received("Rodgers")
#Print farmers
farmers.printFarmers()
print "" #new line
farmers.getNextReceiver()
farmers.getPreviousFarmer()
farmers.nextReceiverInDays(8)