def friendly_number(number, base=1000, decimals=0, suffix='', powers=['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']): """ Format a number as friendly text, using common suffixes. """ #if number==0:return '0' n=abs(number) sign = '-' if n!=0 and n/number<0 else '' b=base dformat = len(str(base-1)) #number of decimal digits in each base digit print() print(n,b,'format',dformat) d=[] form = '>0'+str(dformat)+',d' print ('form',form) while n: #generate base digits as a list d[] d.append(format(n%b,form)) #print (n%b,n/b) n//=b #divide and return round-down integer print(len(powers),d) if number==0: d=[format(0,form)] power=len(d)-1 print('power',power) response = '' #response1 should always be d[-1] unless not enough powers drange =2 if len(powers)>= power+1 else power+1-len(powers)+2 print (len(powers),power,drange) for j in range(1, drange): response = response + str(d[-j]) print('response1',response) response = response +'.' for j in range(drange,len(d)+1):response = response + str(d[-j]) if decimals !=0 else response print ('response2',response) value = format(float(sign+response),'.'+str(decimals)+'f') print ('response3',response,'value',value) response = value + powers[min(power,len(powers)-1)]+suffix print ('response4',response) return response #These "asserts" using only for self-checking and not necessary for auto-testing if __name__ == '__main__': assert friendly_number(255000000000, powers=["","k","M"]) == '255000M', 'fail'#delete from final assert friendly_number(-150, base=100,powers=["","d","D"]) == '-1d', 'fail'#delete from final assert friendly_number(0, decimals=3,suffix="th") == '0.000th', 'fail'#delete from final assert friendly_number(4294967297, base=2, powers=["p0","p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13","p14","p15","p16","p17","p18","p19","p20","p21","p22","p23","p24","p25","p26","p27","p28","p29","p30","p31"]) == '2p31', 'fail'#delete from final assert friendly_number(102) == '102', '102' assert friendly_number(10240) == '10k', '10k' assert friendly_number(12341234, decimals=1) == '12.3M', '12.3M' assert friendly_number(12461, decimals=1) == '12.5k', '12.5k' assert friendly_number(1024000000, base=1024, suffix='iB') == '976MiB', '976MiB'