Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Friendly Number by Lachesis_132296
def power(number, base, powers): #zwraca liczbę po podzieleniu i potęgę
n = len(powers)
i = 0
while abs(number)//base != 0 and i < n-1: #i< n-1, czyli mamy jeszcze dostępne potęgi
if number%base != 0:
number /= base
else:
number//=base
i+=1
if i < n:
return (number, powers[i])
def rounding(number, decimals): #zwraca zaokrągloną liczbę w postaci stringa
if decimals == 0:
number = int(number) #zaokrągla w dół przez rzutowanie na int
number = str(number)
else:
number = round(number, decimals)
number = str(number)
k = number.find('.')
if len(number)-k < decimals and k != -1: #jeśli jest mniej cyfr po kropce niż być powinno
lack = len(number)-k
while (lack > 0): #uzupełnij brak zerami
number = number[:]+ '0'
lack -= 1
if k == -1 and decimals != 0: #jeśli nie znaleziono kropki, a mają być jakieś miejsca po przecinku
number = number + "." #to dodajemy kropkę
while (decimals > 0): #i brakujące zera
number = number + '0'
decimals -= 1
k = number.find('.')
if number[0] == '0' and k != -1: #jeśli pierwszym znakiem jest zero, np. 000.coś
number = number[k-1:] #to wytnij zbędne zera sprzed kropki, żeby zostało tylko jedno
return number
def add_suffix(number, suffix = ''): #przyjmuje stringa
number = number + suffix
return number
def friendly_number(number, base=1000, decimals=0, suffix='',
powers=['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']):
#1. Cut with a given base
n, p = power(number, base, powers)
#2. Round it and add zeros, if needed
n = rounding(n, decimals) #n is now string
#3. Add power
n = n + p
#4. Add suffix
n = add_suffix(n, suffix)
return n
#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
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'
Nov. 20, 2016