Checking if a bag has enough coins in program
1) There's too much duplication. You can define a map, such as:

#This defines a mapping from coin value to a tuple (coin weight, monetary sack value)
coin_types = { 1: (3.56, 1), 2: (7.12, 1), ... }


Then, it's easy to calculate weights and amounts as such:

#This defines a mapping from coin value to a tuple (amount of coins in sack, sack weight)
coins_in_sack_by_type = {k: (v[1] / k, v[1] / k * v[2]) for (k, v) in coin_types.items()}


2) Now, most of your code in the main loop can be collapsed into:

weight_difference = coins_in_sack_by_type[coin_type][1] - sack_weight
coins_changed = weight_difference / coin_types[coin_type][0]