-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
60 lines (42 loc) · 1.47 KB
/
main.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
def settled(ledger):
for user in ledger:
if ledger[user] != 0:
return False
return True
def trySettle(ledger):
minima = min(ledger, key=ledger.get)
maxima = max(ledger, key=ledger.get)
minimaVal = ledger[minima]
maximaVal = ledger[maxima]
ledger[minima] = 0
ledger[maxima] = maximaVal + minimaVal # + instead of - since minimaVal is expected to be negative
print(f'{maxima} to pay Rs.{-minimaVal} to {minima}')
myLedger = {
}
while(True):
Command = input('Enter command: ')
if Command == 'Q':
break
if Command == 'A':
User = input('Enter username of person: ')
if User in myLedger:
print('User already exists in ledger!')
continue
myLedger.update({User: 0})
if Command == 'P':
if len(myLedger) == 0:
print('Please add a user first!')
continue
Payor = input('Enter name of person who is paying: ')
Amount = int(input('Enter amount paid: '))
existing = myLedger.get(Payor)
myLedger.update({Payor: existing - Amount})
split = Amount/len(myLedger) # TODO: implement unequal splits
for user in myLedger:
myLedger[user] = myLedger[user] + split
print(f'\nLedger before settling:\n{myLedger}')
print('\nHere is how to clear your splits!:')
while not settled(myLedger):
trySettle(myLedger)
print('\nLedger would like this after settling up:')
print(myLedger)