Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

for int x, is there a way to simplify(making it more clear and neat) z = max(min(x,50),100) in python? (first week of python)

is there a way to simplify the code for commission below?

money2 = int(input("how much to withdraw? "))
commission = max(min(round(money2*(10/100)),100),50)

print("the commission is {0}".format(commission))

the former code was used with if. python(or pylint maybe?) adviced me to use min and max. I think it was because this code is included in a function with if itself (the whole code is in the bottom)

money2 = int(input("how much to withdraw? "))
commission = round(money2*(10/100))

if commission > 100:
    commission = 100

elif commission < 50:
    commission = 50

print("the commission is {0}".format(commission))

the first code is short but not quite quick to read, and the second(or the former) is using too much lines.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

is there a way to simplify it? I just want the value of commission to always be at least 50, and 100 at max.

ps. below is the whole code i’m practicing on. My intention was to create a loop of deposit() and withdraw() untill the balance runs out, and if i input more than what i can withdraw, it will ask me again how much to withdraw (so a loop in a loop). My original question is in line 10. Perhaps you could give me other advice for simplifying other parts of this code too. Thanks

def deposit():
  money = int(input("how much to deposit? "))
  print("{0} has been depostied. total {1}"\
        .format(money, balance + money))
  return balance + money;

def withdraw():
    while True:
       money2 = int(input("how much to withdraw? "))
       commission = max(min(round(money2*(10/100)), 100),50)

       if money2 + commission > balance:
          print("not enough balance. total {0}".format(balance))

       elif money2 + commission <= balance:
          break
       
    print("{0} has been withdraw.".format(money2))
    print("{0} is the commission. total {1}".\
          format(commission, balance - commission - money2))
    return balance - commission - money2

balance = int(input("how much to start with? "))

while True:  
  balance = deposit()
  balance = withdraw()
  if balance == 0:
    break

>Solution :

It’s best to separate and main computation of the commission fee and the min/max range. Because having all in one line just makes it hard to read.
Also use some good variable names, and constants with names instead of magic values.

def clip(value: float, min_value: float, max_value: float) -> float:
    assert min_value < max_value
    return max(min(value, max_value), min_value)

# and later during the computation
MIN_COMMISSION_FEE = 50
MAX_COMMISSION_FEE = 100

raw_commission = money2 * (10 / 100)
commission = clip(raw_commission, MIN_COMMISSION_FEE, MAX_COMMISSION_FEE)

clip is a typical name for such an operation. E.g. Numpy has an operation with the same name and functionality: https://numpy.org/doc/stable/reference/generated/numpy.clip.html


And as a side note, don’t trust everything from pylint. It is very opinionated, and a lot of the default rules are somewhat questionable (at least for me).

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading