2013-09-14 8 views
1

Я новый для программирования и питона. Мне нужна помощь с кодированием в геометрической прогрессии Thats должен вычислить прогрессию 1,2,4,8,16 ... Вот что я до сих пор:Написание кода на языке python для вычисления геометрической прогрессии

def work_calc (days_worked, n): 
     temp=int(1) 
     if days_worked<2: 
      print (1) 
     else: 
      while temp <= days_worked: 
        pay1 = (temp**2) 
        pay = int(0) 
        pay += pay1 
        temp +=1 
        print ('your pay for ',temp-1,'is', pay1) 

main() 

Сейчас он дает мне этот выход: 1, 4, 9, 16, 25 мне нужно: 1,2,4,8,16,32...

-им написания кода, который в основном должен сделать это:

Example: 
Enter a number: 5 
your value 1 is: 1 
your value 2 is : 2 
your value 3 is : 4 
your value 4 is : 8 
your value 5 is : 16 
your total is: 31 

спасибо заранее за вашу помощь и руководство! PS: Im как тупая блондинка иногда (в основном), когда речь идет о программировании, так что спасибо за ваше терпение ..

+1

Вам нужны полномочия двух, а не геометрических прогрессий –

ответ

2

Как я уже говорил, похоже, что вам нужно полномочие 2:

def work_calc (days_worked, n): 
    for temp in range(days_worked): 
     print ('your pay for ', temp + 1, 'is', 2 ** temp) 

если вы хотите напечатать строки (не кортежи, как вы делаете сейчас):

def work_calc (days_worked): 
    for temp in range(days_worked): 
     print 'your pay for {} is {}'.format(temp + 1, 2 ** temp) 

>>> work_calc(5) 
your pay for 1 is 1 
your pay for 2 is 2 
your pay for 3 is 4 
your pay for 4 is 8 
your pay for 5 is 16 

Просто к сведению - ваш код вычисления квадратов temp, а не силы 2, которая почему не работает

+1

Примечание: печать является функцией в python-3.x, поэтому не может печатать кортежи, так как вопрос помечен как python-2.7, так и python-3.x. Второй пример - синтаксическая ошибка в python-3.x. В то время как первый будет работать как в том, так и в другом случае, я буду использовать 'from __future__ import print_function'.Также диапазон изменения поведения в 3, и будет использовать xrange в 2.7. – AChampion

0

Это вопрос домашней работы? (недостаточно комментариев для комментариев)

В последовательности 1,2,4,8,16,32 каждый термин является двойным предыдущим термином.

Итак, вы можете сохранить запись предыдущего термина и удвоить его, чтобы получить следующий.

Как уже упоминалось, это то же самое, что и вычисление 2^n (а не, как я уже говорил, n^2), где n - число членов.

print ('your pay for 1 is' 1) 
prevpay = 1 
while temp <= days_worked: 
    pay1 = prevpay*2 
    pay = int(0) 
    pay += pay1 
    temp +=1 
    prevpay = pay1 
    print ('your pay for ',temp-1,'is', pay1) 
+1

Удвоение каждый раз дает полномочия 2, 2^n не n^2 – AChampion

+0

Прошу прощения, вы правы. Ответ отредактирован соответствующим образом. – ToxicTeacakes

2

Я понимаю, что это, вероятно, избыточно для того, что вы хотите делать, и вы получили большой совет в других ответах в том, как решить вашу проблему, но ввести некоторые другие особенности питона здесь некоторые другие подходы: Список постижение:

def work_calc(days): 
    powers_of_two = [2**x for x in range(days)] 
    for i, n in enumerate(powers_of_two): 
     print('your pay for {} is {}'.format(i+1,n)) 
    print('your total is {}'.format(sum(powers_of_two))) 

Это компактное и аккуратное, но будет держать весь список 2^п в памяти, при малом п это не проблема, но для большого может быть дорогими. Выражения генератора очень похожи на списки, но откладывают вычисления до повторения.

def work_calc(days): 
    powers_of_two = (2**x for x in range(days)) 
    total = 0 
    for i, n in enumerate(powers_of_two): 
     total += n 
     print('your pay for {} is {}'.format(i+1,n)) 
    print('your total is {}'.format(total)) 

Если бы переместить в общей сложности прокатном расчета и он по-прежнему рассчитывает 2 ** п каждый раз, функция генератора избежит расчет мощности:

import itertools 

def powers_of_two(): 
    n = 1 
    while True: 
     yield n 
     n *= 2 

def work_calc(days): 
    total = 0 
    for i, n in enumerate(itertools.islice(powers_of_two(), days)): 
     total += n 
     print('your pay for {} is {}'.format(i+1,n)) 
    print('your total is {}'.format(total)) 

Как я уже сказал излишеством, но мы надеемся, вводит некоторые другие функции python.

+0

Спасибо вам, ребята, вы большая помощь в принятии мне продолжать работать/учиться этот материал: незначительные проблемы форматирования: Im возникают проблемы борьбы с этим вроде значения: 97 $ 7.922816251426434e + 26 98 $ 1.5845632502852868e + 27 99 $ 3.1691265005705736e + 27 100 $ 6.338253001141147e + 27 Я хочу, чтобы распечатать нормально (?) только с 2 десятичных пространств .. им уверен, что его простое форматирование вещь, но это, кажется мне бежать. Угадайте, что дети чувствуют себя, когда учатся ходить! – user2405840

+0

Это действительно отдельный вопрос. Существует два подхода к форматированию: старый «% .2f»% 1.23456' и новый '' {: .2f} '. Format (1.23456) '. Имейте в виду, что только потому, что они отображаются в научной нотации, это не означает, что они являются floats '' {: d} '. Format (<очень длинное целое число>) 'должны вынуждать его целочисленный формат – AChampion

Смежные вопросы