2015-03-08 5 views
0

Я разработал код, который будет принимать «номер» в качестве ввода от пользователя.Проблема с Python с циклами

Номер будет использоваться, чтобы сделать ...

  1. numerator = (3*number) - 2
  2. и знаменатель, который будет denominator = (4*n) + 1.

Код также позволит пользователю выбрать, сколько раз они хотят, чтобы эта последовательность продолжалась, после чего сумма всех фракций будет суммироваться и отображаться.

Вот код у меня есть:

l=int(input("How many times do you repeat this sequence?: ")) 
n=int(input("Enter a base number: ")) 
n1=n 
n2=n 
total=0 
s = '' 
def calculate(l,n,n1,n2,total,s): 
    for j in range(l): 
     s += "{}/{} + ".format(3*n1-2, 4*n2+1) 
     n1=n+n1 
     n2=n+n2 
     total=(((n*3)-2)/((4*n)+1))+total 
    print(s) 
    print(total) 

calculate(l, n, n1, n2, total, s) 

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

How many times do you repeat this sequence?: 2 
Enter a base number: 1 
1/5 + 4/9 + 
0.4 

двух вопросов:

  1. С 4/9 - последняя фракция, есть способ избавиться от этого знака «+» в конце, потому что он j ust указывает на пустое место.
  2. Общее количество для двух фракций показывает 0.4 что неверно, общая сумма должна быть 1/5 + 4/9 = 0.2 + 0.44 = 0.64, я не уверен, где я сбился с пути при вводе формулы общей суммы выше.

Любые предложения и комментарии будут оценены!

+0

Я предлагаю использовать более значимые имена переменных, чтобы люди могли лучше следовать вашему коду. – squiguy

ответ

0
  1. Вместо concatening строки, как это, собрать все детали список и затем присоединиться элементы на знак плюс:

    s = [] 
    s.append('{}/{}'.format(1, 5)) 
    s.append('{}/{}'.format(4, 9)) 
    print(' + '.join(s)) # 1/5 + 4/9 
    
  2. Я не совсем уверен, что вы делаете, но если вы хотите, чтобы получить сумму фракций печатаемых, вы просто должны убедиться, что вы вычисляете эти отдельные дроби таким же образом. Поэтому вместо того, увеличивающиеся n1 и n2 первыми до вычисления суммы, вычислить сумму таким же образом, что вы сделали для выхода фракции и только потом изменить эти переменные:

    s.append("{}/{}".format(3 * n1 - 2, 4 * n2 + 1)) 
    total += (3 * n1 - 2)/(4 * n2 + 1) 
    n1 += n 
    n2 += n 
    
+0

Я пробовал код для вашего второго пункта, и он дал мне этот выход: 1/5 + 4/9 total = 0.9829059829059829, который теперь больше 0,64 – Giovanni

1

Дешевым способом удаления + было бы просто отрезать последний символ в строке: str[:-1].

Поскольку проблема 2 идет, похоже, вы хотите использовать n1 и n2 вместо n.

В настоящее время, вы получаете 1/5 (.2) + 1/5 (.2) = .4

+0

Я тоже что-то пробовал: n1 = n + n1 n2 = n + n2 total = (n1/n2) + total и получено: Сколько раз вы повторяете эту последовательность ?: 2 Введите базовый номер: 1 1/5 + 4/9 total = 2.0 – Giovanni

0

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

  1. , чтобы удалить '+' в конце концов, вы можете сделать что-то вроде ниже,

, если у = л (подразумевается последняя фракция) Dont включают + еще включают +

  1. При вычислении всего вы используете значение «n», которое всегда остается в качестве вашего входного значения total = (((n * 3) -2)/((4 * n) +1)) + всего Здесь используется n1 или n2 total = (((n 1 * 3) -2)/((4 * n2) +1)) + всего
Смежные вопросы