Para cualquiera que tenga curiosidad sobre cómo podría hacer esto sin bibliotecas, puede usar la división larga tal como lo aprendió en la escuela primaria. Primero tengo que definir algunas funciones auxiliares comunes, pero el trabajo real lo realiza long_division.
def take(sequence, n):
"take the first n elements of sequence"
for i, elem in enumerate(sequence):
if i == n: break
yield elem def concatenate(sequence, sep=""):
"convert elements of sequence to string and join by sep"
return sep.join(map(str, sequence)) def qr(num, denom):
"quotient, remainder"
return num // denom, num % denom def long_division(num, denom):
"generates integer portion followed by decimal digits of num/denom"
digit, num = qr(num, denom)
yield digit
while True:
num *= 10
digit, num = qr(num, denom)
yield digit def n_places(num, denom, n):
"return num/denom to n decimal places"
gen = long_division(num, denom)
integer = next(gen)
decimal = concatenate(take(gen, n))
return "{}.{}".format(integer, decimal) print(n_places(1, 7, 50))
# 0.14285714285714285714285714285714285714285714285714
def take(sequence, n):
"take the first n elements of sequence"
for i, elem in enumerate(sequence):
if i == n: break
yield elem def concatenate(sequence, sep=""):
"convert elements of sequence to string and join by sep"
return sep.join(map(str, sequence)) def qr(num, denom):
"quotient, remainder"
return num // denom, num % denom def long_division(num, denom):
"generates integer portion followed by decimal digits of num/denom"
digit, num = qr(num, denom)
yield digit
while True:
num *= 10
digit, num = qr(num, denom)
yield digit def n_places(num, denom, n):
"return num/denom to n decimal places"
gen = long_division(num, denom)
integer = next(gen)
decimal = concatenate(take(gen, n))
return "{}.{}".format(integer, decimal) print(n_places(1, 7, 50))
# 0.14285714285714285714285714285714285714285714285714
- ¿Cuántas veces es más rápida la búsqueda binaria que la búsqueda secuencial cuando se busca el elemento 592 en una lista de 1024 elementos?
- ¿Cómo debo aprender programación competitiva cuando soy malo en matemáticas?
- ¿Qué son los circuitos Garbling en términos simples? ¿O suponiendo solo conocimientos básicos de cómputo multiparte?
- ¿Cuál es el uso de las matemáticas en el mundo real en informática?
- Mi profesor de informática me dice que debería hacer solo una cosa por función. ¿Cuál es la práctica aceptada con respecto a cuánto deben hacer las funciones de trabajo?
def take(sequence, n):
"take the first n elements of sequence"
for i, elem in enumerate(sequence):
if i == n: break
yield elem def concatenate(sequence, sep=""):
"convert elements of sequence to string and join by sep"
return sep.join(map(str, sequence)) def qr(num, denom):
"quotient, remainder"
return num // denom, num % denom def long_division(num, denom):
"generates integer portion followed by decimal digits of num/denom"
digit, num = qr(num, denom)
yield digit
while True:
num *= 10
digit, num = qr(num, denom)
yield digit def n_places(num, denom, n):
"return num/denom to n decimal places"
gen = long_division(num, denom)
integer = next(gen)
decimal = concatenate(take(gen, n))
return "{}.{}".format(integer, decimal) print(n_places(1, 7, 50))
# 0.14285714285714285714285714285714285714285714285714
def take(sequence, n):
"take the first n elements of sequence"
for i, elem in enumerate(sequence):
if i == n: break
yield elem def concatenate(sequence, sep=""):
"convert elements of sequence to string and join by sep"
return sep.join(map(str, sequence)) def qr(num, denom):
"quotient, remainder"
return num // denom, num % denom def long_division(num, denom):
"generates integer portion followed by decimal digits of num/denom"
digit, num = qr(num, denom)
yield digit
while True:
num *= 10
digit, num = qr(num, denom)
yield digit def n_places(num, denom, n):
"return num/denom to n decimal places"
gen = long_division(num, denom)
integer = next(gen)
decimal = concatenate(take(gen, n))
return "{}.{}".format(integer, decimal) print(n_places(1, 7, 50))
# 0.14285714285714285714285714285714285714285714285714
def take(sequence, n):
"take the first n elements of sequence"
for i, elem in enumerate(sequence):
if i == n: break
yield elem def concatenate(sequence, sep=""):
"convert elements of sequence to string and join by sep"
return sep.join(map(str, sequence)) def qr(num, denom):
"quotient, remainder"
return num // denom, num % denom def long_division(num, denom):
"generates integer portion followed by decimal digits of num/denom"
digit, num = qr(num, denom)
yield digit
while True:
num *= 10
digit, num = qr(num, denom)
yield digit def n_places(num, denom, n):
"return num/denom to n decimal places"
gen = long_division(num, denom)
integer = next(gen)
decimal = concatenate(take(gen, n))
return "{}.{}".format(integer, decimal) print(n_places(1, 7, 50))
# 0.14285714285714285714285714285714285714285714285714
def take(sequence, n):
"take the first n elements of sequence"
for i, elem in enumerate(sequence):
if i == n: break
yield elem def concatenate(sequence, sep=""):
"convert elements of sequence to string and join by sep"
return sep.join(map(str, sequence)) def qr(num, denom):
"quotient, remainder"
return num // denom, num % denom def long_division(num, denom):
"generates integer portion followed by decimal digits of num/denom"
digit, num = qr(num, denom)
yield digit
while True:
num *= 10
digit, num = qr(num, denom)
yield digit def n_places(num, denom, n):
"return num/denom to n decimal places"
gen = long_division(num, denom)
integer = next(gen)
decimal = concatenate(take(gen, n))
return "{}.{}".format(integer, decimal) print(n_places(1, 7, 50))
# 0.14285714285714285714285714285714285714285714285714