Создать бесконечно возрастающую дробь
Надо посчитать возрастающую дробь: 1/2, 2/3, 3/4 и т.д.
def func(a,b):
list = []
for h, j in a, b:
t = float(a/b)
a+=1
b+=1
list.append(t)
Хочу применить эту функцию на два списка, один от диапазона 1-10, другой 2-11. Машина функцию такую написать даёт, но на применение пишет: too many values to unpack (expected 2) Я тоже expected 2: ведь по одной цифре на каждом шаге, или нет? Товарищи, как можно довести подсчёт до конца? или есть способ рациональнее? спасибо
Ответы (1 шт):
Вам надо использовать zip, а в цикле использовать h и j. Функция zip попарно объединяет элементы 2 и более списков в списки:
a1 = [1, 2, 3]
a2 = [4, 5, 6]
print(list(zip(a1, a2)))
Output:
[(1, 4), (2, 5), (3, 6)]
Ваша функция:
def func(a,b):
list = []
for h, j in zip(a, b):
t = float(h/j)
...
Это если отвечать на вопрос об ошибке.
Однако вашу задачу, наверное, следует решать как-то иначе. У вас числитель и знаменатель отличаются на 1, стоит этим воспользоваться. Будем задавать перменной n номер нашего элемента в последовательности 1/2, 2/3, 3/4. Например для дроби 3/4 n будет равно 3. Общая формула для дроби n/(n+1)
n = 3
f = n/(n+1)
Если вам допустим надо вычислить сумму этих дробей, то
n = 10
f_list = [i/(i+1) for i in range(n+1)]
print(sum(f_list))
Output:
7.980122655122655