pythonnoob3444
pythonnoob3444

Reputation: 1

How to remove a certain string before printing?

answer = input('Enter a number: ')
x = 10**(len(answer) - 1)
print(answer, end = ' = ')
for i in answer: 
    if '0' in i:
        x = x//10
        continue
    else:
        print('(' + i + ' * ' + str(x) + ')' , end = '')
        x = x//10
        print(' + ', end = '')

so i have this problem, when i enter any number, everything is great but at the end there is an extra ' + ' that i do not want. Now normally this wouldnt be an issue with lists and .remove function, however i am not allowed to use these for this problem. I cannot come up with any sort of solution that does not involve functions

I tried matching the length but it didnt work because of '0'

Upvotes: 0

Views: 207

Answers (6)

pythonista
pythonista

Reputation: 1

I tested this code and it worked fine

if x and int(answer)%10 != 0:

Enter a number: 25
25 = (2 * 10) + (5 * 1)

Enter a number: 1000
1000 = (1 * 1000)

Enter a number: 117
117 = (1 * 100) + (1 * 10) + (7 * 1)

Upvotes: 0

pythonnoob3444
pythonnoob3444

Reputation: 1

answer = input('Enter a number: ')

#finds length of answer
length = 0
for n in answer:
    length += 1
loop_counter = 0
##


zero_counter = 0
multiple_of_ten = 10

#finds if answer is multiple of 10 and if so by what magnitude
while True:   
    if int(answer) % multiple_of_ten == 0:
        #counts the zeroes aka multiple of 10
        zero_counter += 1
        multiple_of_ten = multiple_of_ten*10
    else:
        break

#finds the multiple of 10 needed for print output
x = 10**(length - 1)

print(answer, end = ' = ')
for i in answer:
    # if its a 0 it will skip
    if '0' in i:
        x = x//10
        #still divises x by 10 for the next loop
        pass
    else:
        print('(' + i + ' * ' + str(x) + ')' , end = '')
        x = x//10
        
        #if position in loop and zeroes remaining plus one is equal to
        #the length of the integer provided, it means all the reamining
        #digits are 0
        if loop_counter + zero_counter + 1 == length:
            break
        else:
        #adds ' + ' between strings
            print(' + ', end = '')

    # keeps track of position in loop
    loop_counter += 1
    

ended up implementing a counter to see how many zeroes there are, and a counter to see where we are in the for loop and stop the loop when its the same as amount of zeroes remaining

Upvotes: 0

Hai Vu
Hai Vu

Reputation: 40698

This kind of problem is best solved using the str.join() method.

answer = input("Enter a number: ")
x = 10**(len(answer) - 1)

terms = []
for i in answer: 
    if i == "0":
        x = x//10
        continue
    else:
        terms.append(f"({i} * {x})")
        x = x//10

print(f"{answer} =", " + ".join(terms))

Sample interaction:

Enter a number: 1025
1025 = (1 * 1000) + (2 * 10) + (5 * 1)

Notes

  • We build up the terms by appending them into the list terms

  • At the end of the for loop, given 1025 as the input, the terms looks like this

    ['(1 * 1000)', '(2 * 10)', '(5 * 1)']

Update

Here is a patch of your original solution:

answer = input('Enter a number: ')
x = 10**(len(answer) - 1)
print(answer, end = ' = ')
for i in answer: 
    if '0' in i:
        x = x//10
        continue
    else:
        print('(' + i + ' * ' + str(x) + ')' , end = '')
        x = x//10
        if x == 0:
            print()
        else:
            print(' + ', end = '')

The difference is in the last 4 lines where x (poor name, by the way), reaches 0, we know that we should not add any more plus signs.

Upvotes: 0

TestTest
TestTest

Reputation: 1

Well Valery's answer is the best just add one more condition in case the answer was a 10 multiple

if x and int(answer)%10 != 0:

Upvotes: 0

Valery
Valery

Reputation: 11

you can insert an extra condition in the else block:

else:
    print('(' + i + ' * ' + str(x) + ')' , end = '')
    x = x//10
    if x:
        print(' + ', end = '')

this will help not to insert the last plus when it is not needed

Upvotes: 1

The error is that there is an extra '+' at the end of the output. This can be fixed by adding an 'if' statement to the end of the code that checks if the last character in the output is a '+' and, if so, removes it.

Upvotes: 0

Related Questions