Python daily two questions series

Python daily two questions series (December 30)

In each question, I will use n methods to solve it, to help you broaden your thinking and practice the program

No.1:
There are four numbers: 1, 2, 3 and 4. How many three digits that are different from each other and have no repetition? How many are each?

Program analysis: the numbers that can be filled in hundreds, tens and ones are all 1, 2, 3 and 4. Make up all permutations before removing the ones that do not meet the conditions.

Program source code:

for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if( i != k ) and (i != j) and (j != k):  #If not, enter
                print (i,j,k)

Simplify code: remove redundant judgment

for i in range(1, 5):
    for j in range(1, 5):
        if (j==i) :
            continue;
        for k in range(1, 5):
            if (k==i or k==j):
                continue;
            print(i,j,k);

Another way to write code: use list

list = [1,2,3,4]
for i in list:
    list1 = list.copy()
    list1.remove(i)
    for j in list1:
        list2 = list1.copy()
        list2.remove(j)
        for k in list2:
            print(i, j, k)

Another way to write code: using bit operation

#From 00 01 10 to 11 10 01
for num in range(6,58):
    a = num >> 4 & 3
    b = num >> 2 & 3
    c = num & 3
    if( (a^b) and (b^c) and (c^a) ):
        print(a+1,b+1,c+1)

Further simplify the writing method: use list derivation, take away ← in a sentence, that's how it is

[(x,y,z) for x in range(1,5) for y in range(1,5) for z in range(1,5) if(x!=y)and(x!=z)and(y!=z)]

NO.2
The bonus paid by the enterprise is based on the profit commission. When the profit is less than or equal to RMB 100000, the bonus can be increased by 10%; when the profit is higher than RMB 100000, the part lower than RMB 100000 will be increased by 10%; when the profit is higher than RMB 100000, the bonus can be increased by 7.5%; when the profit is between RMB 200000 and RMB 400000, the bonus can be increased by 5%; when the profit is between RMB 400000 and RMB 600000, the bonus can be increased by 3%; when the profit is between RMB 600000 and RMB 1000000, the bonus can be increased by 3%; when the profit is between RMB 600000 and RMB 1000000, the bonus can be increased by 7.5%; when the profit is between RMB 200000 and RMB 400000 Score: 1.5%; if it is higher than 1 million yuan, the part exceeding 1 million yuan will be charged as 1%. Input the profit I of the month from the keyboard, and calculate the total amount of bonus to be paid?

Topic analysis: the profit of this topic has multiple ranges. Naturally, the first idea is to take it away with a nested loop

def  get_reward(i):
    rewards = 0
    if i <= 10:
        rewards = i * 0.1
    elif (i > 10) and (i <= 20):
        rewards = (i - 10) * 0.075 + get_reward(10)
    elif (i > 20) and (i <= 40):
        rewards = (i - 20) * 0.05 + get_reward(20)
    elif (i > 40) and (i <= 60):
        rewards = (i - 40) * 0.03 + get_reward(40)
    elif (I > 60) and (I <= 100):
        rewards = (i - 60) * 0.015 + get_reward(60)
    else:
        rewards = get_reward(100) + (i - 100) * 0.01

    return rewards

But do you think nested loops are a little troublesome
Let's take a closer look at the conditions:
When i ≤ 10w, the commission rate can be directly multiplied by the profit. When i > 10w, the excess is multiplied by the commission rate

i = int(input('Net profit:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(0,6):
    if i>arr[idx]:
        r+=(i-arr[idx])*rat[idx]
        print((i-arr[idx])*rat[idx])
        i=arr[idx]
print(r)

We can also use the two-dimensional list to complete a more concise writing method:

Bonus = 0;
BonusRateList = [[100,0.010],[60,0.015],[40,0.030],[20,0.050],[10,0.075],[0,0.100]];

Profit =  120000;
Profit /= 10000;

for i in range(0, len(BonusRateList)) :
    if (Profit > BonusRateList[i][0]) :
        Bonus += ((Profit - BonusRateList[i][0]) * BonusRateList[i][1]);
        Profit = BonusRateList[i][0];

print (Bonus * 10000);

Tags: Python less

Posted on Tue, 05 May 2020 13:11:49 -0700 by elecktricity