Add Two Polynomials Python Program

Question:

In this code there are four test cases. 1st and 2nd and 4th test cases are camed successfully but 3rd test case was not getting expected output. Please help me I got 12x^4 + 9x^3 – 5x^2x – 1 as output in 3rd test case but expected output is 12x^4 + 9x^3 – 5x^2 – x – 1

For Add two polynomials program question and 4 test cases Inputs and Outputs see below url

https://drive.google.com/file/d/1dEzy0tHPt-dveknUMw8ml85IARaoLcsE/view?usp=sharing

The above link contains Add two polynomials Question, 4 test cases and Inputs and Outputs

def readPolynomialFromUser():
    number_polynomials = int(input())
    P=[0 for i in range(number_polynomials)]
    for i in range(0,number_polynomials):
        index_p,index_c = input().split(' ')
        P[int(index_p)] = int(index_c)
    return P


def computePolynomialSum(A,B):
    if(len(A)>=len(B)):
        polynomials_sum=[0 for i in range(len(A))]
        for i in range(0,len(A)):
            if(i>=len(B)):
                B.append(0)
            polynomials_sum[i]=A[i]+B[i]
        return polynomials_sum


    return -1




A=readPolynomialFromUser()
B=readPolynomialFromUser()
polynomials_sum=computePolynomialSum(A,B)
if(polynomials_sum==-1):
    polynomials_sum=computePolynomialSum(B,A)

if(sum(polynomials_sum)!=0):
    for i in range(len(polynomials_sum)-1,0,-1):
        if polynomials_sum[i] != 0:
            if i!=1:
                if polynomials_sum[i]>0:
                    if i==len(polynomials_sum)-1:
                        #if polynomials_sum[i]<0:
                        #    polynomials_sum[i]=-1*polynomials_sum[i]
                        #    print (f' - {polynomials_sum[i]}x^{i}',end='')
                        #else: #redundent
                        if polynomials_sum[i]==1:
                            print (f'x^{i}',end='')
                        else:
                            print (f'{polynomials_sum[i]}x^{i}',end='')
                    else:
                        print (f' + {polynomials_sum[i]}x^{i}',end='')
                else:
                    if polynomials_sum[i]!=-1:
                        #if polynomials_sum[i]<0: #redundent
                        polynomials_sum[i]=-1*polynomials_sum[i]
                        if i==len(polynomials_sum)-1: #add p0 = i condition
                            print (f'-{polynomials_sum[i]}x^{i}',end='')
                        else:
                            print (f' - {polynomials_sum[i]}x^{i}',end='')
                    else:
                            if i==len(polynomials_sum)-1: #add p0 = i condition
                                print (f'-x^{i}',end='')
                            else:
                                print (f' - x^{i}',end='')
            else:
                if polynomials_sum[i]>0:
                    if i==len(polynomials_sum)-1: #add p0 = i condition
                        if polynomials_sum[i]==1:
                            print (f'x',end='')
                        else:
                            print (f'{polynomials_sum[i]}x',end='')
                    else:
                        if polynomials_sum[i]==1:
                            print (f' + x',end='')
                        else:
                            print (f' + {polynomials_sum[i]}x',end='')
                else:
                    #if polynomials_sum[i]<0: # redundent
                    polynomials_sum[i]=-1*polynomials_sum[i]
                    if i==len(polynomials_sum)-1: #add p0 = i condition
                        if polynomials_sum[i]==-1:
                            print (f'-x',end='')
                        else:
                            print (f'-{polynomials_sum[i]}x',end='')
                    else:
                        if polynomials_sum[i]==-1:
                            print (f' - x',end='')
                        else:
                            print (f' - {polynomials_sum[i]}x',end='')

    if polynomials_sum[0]<0:
        polynomials_sum[0]=-1*polynomials_sum[0]
        if len(polynomials_sum)-1 == 0: #add p0 = i condition
            print (f'-{polynomials_sum[0]}',end='')
        else:
            print (f' - {polynomials_sum[0]}',end='')
    else:
        if len(polynomials_sum)-1 == 0: #add p0 = i condition
            print (f'{polynomials_sum[0]}',end='')
        else:
            print (f' + {polynomials_sum[0]}',end='')
else:
    print(str(polynomials_sum[0]))
Asked By: Hari nadh babu

||

Answers:

Your problem is occurred at:

if polynomials_sum[i]!=-1:
    if polynomials_sum[i]<0:
        polynomials_sum[i]=-1*polynomials_sum[i]
        print (f' - {polynomials_sum[i]}x',end='')
    else:
        print (f'{polynomials_sum[i]}x',end='')
    else:
        print (f'x',end='') #here is your bug

you should change the code to print (f' - x',end='')

In addition, your use a little too much tab, I suggest you to rearrange the code like:

# if all element is 0, print "0" and end program
if polynomials_sum.count(0) == len(polynomials_sum): 
    print(0,end='')
    exit()

for i in range(len(polynomials_sum)-1,-1,-1):

    coff = polynomials_sum[i] #shorten the parameter

    # if the coefficient is 0, end this iteration
    if coff == 0: 
        continue # use continue to go next iteration immediately

    # if the coefficient is not 0 and term is 0, print directly and end iteration
    if i == 0: 
        print(f' + {coff}',end='') if coff > 0 else print(f' - {abs(coff)}',end='')
        continue
    
    # if the coefficient is not 0 and term is first term, hide the + if coff > 0 and end iteration
    # if p0 != 1, print term 
    if i == len(polynomials_sum)-1 and i != 1: 
        # if coff not 1/-1, print the coff, else just print +/-
        if abs(coff) != 1:
            print(f'{coff}x^{i}',end='') if coff > 0 else print(f'-{abs(coff)}x^{i}',end='')
        else:
            print(f'x^{i}',end='') if coff > 0 else print(f'-x^{i}',end='')
        continue

    # if p0 == 1, ignore term 
    if i == len(polynomials_sum)-1 and i == 1: 
        # if coff not 1/-1, print the coff, else just print +/-
        if abs(coff) != 1:
            print(f'{coff}x',end='') if coff > 0 else print(f'-{abs(coff)}x',end='')
        else:
            print(f'x',end='') if coff > 0 else print(f'-x',end='')
        continue

    # if the coefficient is not 0 and term is x^1 term, hide the Pi and end iteration
    if i == 1: 
        # if coff not 1/-1, print the coff, else just print +/-
        if abs(coff) != 1:
            print(f' + {coff}x',end='') if coff > 0 else print(f' - {abs(coff)}x',end='')
        else:
            print(f' + x',end='') if coff > 0 else print(f' - x',end='')
        continue

    # if coff not 1/-1, print the coff, else just print +/-
    if abs(coff) != 1:
        print(f' + {coff}x^{i}',end='') if coff > 0 else print(f' - {abs(coff)}x^{i}',end='')
    else:
        print(f' + x^{i}',end='') if coff > 0 else print(f' - x^{i}',end='')
        
            

this is much clearly

new edit for 5th input:

because your are lack of judging the first term in coefficient < 0 condition, so the code should be:

if polynomials_sum[i]>0:
    if i==len(polynomials_sum)-1:
        #if polynomials_sum[i]<0:
        #    polynomials_sum[i]=-1*polynomials_sum[i]
        #    print (f' - {polynomials_sum[i]}x^{i}',end='')
        #else: #these code is redundent
        if polynomials_sum[i]==1:
            print (f'x^{i}',end='')
        else:
            print (f'{polynomials_sum[i]}x^{i}',end='')
    else:
        print (f' + {polynomials_sum[i]}x^{i}',end='')
else:
    if i==len(polynomials_sum)-1:
        if polynomials_sum[i]!=-1:
            #if polynomials_sum[i]<0:
            #    polynomials_sum[i]=-1*polynomials_sum[i]
            #else:
            #    print (f'{polynomials_sum[i]}x^{i}',end='') #redundent code
            print (f'-{-polynomials_sum[i]}x^{i}',end='')
        else:
            print (f'-x^{i}',end='')
    else:
        if polynomials_sum[i]!=-1:
            print (f' - {-polynomials_sum[i]}x^{i}',end='')
        else:
            print (f' - x^{i}',end='')
Answered By: konata39

Here is the right code:

def readPolynomialFromUser():
    number_polynomials = int(input())
    P = [0 for i in range(number_polynomials)]
    for i in range(0, number_polynomials):
        index_p, index_c = input().split(' ')
        P[int(index_p)] = int(index_c)
    return P


def computePolynomialSum(A, B):
    if (len(A) >= len(B)):
        polynomials_sum = [0 for i in range(len(A))]
        for i in range(0, len(A)):
            if (i >= len(B)):
                B.append(0)
            polynomials_sum[i] = A[i] + B[i]
        return polynomials_sum

    return -1


A = readPolynomialFromUser()
B = readPolynomialFromUser()
polynomials_sum = computePolynomialSum(A, B)
if (polynomials_sum == -1):
    polynomials_sum = computePolynomialSum(B, A)


if (sum(polynomials_sum) != 0):
    for i in range(len(polynomials_sum) - 1, -1, -1):
        if polynomials_sum[i] != 0:
            if polynomials_sum[i] > 0:
                if i == len(polynomials_sum) - 1:
                    if polynomials_sum[i] < 0:
                        polynomials_sum[i] = -1 * polynomials_sum[i]
                        print(f' - {polynomials_sum[i]}' + ['', [f'x^{i}', 'x'][i==1]][i != 0], end='')
                    else:
                        if polynomials_sum[i] == 1:
                            print(f'' + ['', [f'x^{i}', 'x'][i==1]][i != 0], end='')
                        else:
                            print(f'{polynomials_sum[i]}' + ['', [f'x^{i}', 'x'][i==1]][i != 0], end='')
                else:
                    print(f' + {polynomials_sum[i]}' + ['', [f'x^{i}', 'x'][i==1]][i != 0], end='')
            else:
                if polynomials_sum[i] != -1:
                    if polynomials_sum[i] < 0:
                        polynomials_sum[i] = -1 * polynomials_sum[i]
                        print(f' - {polynomials_sum[i]}' + ['', [f'x^{i}', 'x'][i==1]][i != 0], end='')
                    else:
                        print(f'{polynomials_sum[i]}' + ['', [f'x^{i}', 'x'][i==1]][i != 0], end='')
                else:
                    print(f' - ' + ['1', [f'x^{i}', 'x'][i==1]][i != 0], end='')
        else:
            if polynomials_sum[i] > 0:
                print(f' + {polynomials_sum[i]}x', end='')
            else:
                if polynomials_sum[i] != -1:
                    if polynomials_sum[i] < 0:
                        polynomials_sum[i] = -1 * polynomials_sum[i]
                        print(f' - {polynomials_sum[i]}x', end='')
                    else:
                        print(f'{polynomials_sum[i]}x', end='')
                else:
                    print(f'x', end='')

else:
    print(str(polynomials_sum[0]))

I have personally matched all the outputs and they are correct.

What was wrong earlier:

  • Did not consider the 0th polynomial term
  • For the last term of polynomial, x^0 was getting printed.
  • For the second last term of polynomial, x^1 was getting printed, which should be x.
Answered By: edusanketdk

From above code, satisfied some test cases ,but expected output is 12x^4 + 9x^3 + 5x^2 + 3
but my code output is 12x^4 + 9x^3 + 5x^20x + 3 . I need help sir

Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.