Neel Kamath
Neel Kamath

Reputation: 1266

How do I prevent Python's append method replacing existing values?

I'm trying to have user inputted numbers ordered in ascending and descending order but the append method keeps replacing the previous value and hence I only get one number in the ordering.

print("This is a program to order numbers in ascending and descending order.")
while 1 == 1:
    until = int(input("\nEnter how many numbers you want ordered: "))
    print("")
    loop = 0
    while loop < until:
        numbers = []
        number = float(input("Enter number: "))
        numbers.append(number)
        loop += 1
    print("\nHere are the numbers in descending order:")
    while len(numbers) > 0:
        print(max(numbers))
        largest = max(numbers)
        numbers.remove(largest)

Upvotes: 0

Views: 4314

Answers (4)

glls
glls

Reputation: 2403

in your initial code, you state that you need the numbers in descending order, i havent provided a complete solution, but a general idea of where to head towards with what you currently have. Just need to add some more logic depending on what the user needs, descending or ascending order. I dont know why you had the numbers.remove(largest) so i commented it out

    numbers = []
    print("This is a program to order numbers in ascending and descending order.")
    numbers
    while True:

        until = int(input("\nEnter how many numbers you want ordered: "))
        print("")
        loop = 0
        while loop < until:

            number = float(input("Enter number: "))
            numbers.append(number)
            loop += 1
        print("\nHere are the numbers in descending order:")
        numbers.sort()
        print(numbers)
        largest = max(numbers)
        #numbers.remove(largest)

as stated in my original comment "declare your list numbers=[] above one level, have you tried that?"

Upvotes: 0

Vitaly Popov
Vitaly Popov

Reputation: 11

You numbers is local

print("This is a program to order numbers in ascending and descending order.")
while 1 == 1:
    numbers = []
    until = int(input("\nEnter how many numbers you want ordered: "))
    print("")
    loop = 0
    while loop < until:
        #numbers = []
        number = float(input("Enter number: "))
        print(number, numbers)
        numbers.append(number)
        loop += 1
    print("\nHere are the numbers in descending order:")
    while len(numbers) > 0:
        print(max(numbers))
        largest = max(numbers)
        numbers.remove(largest)

Upvotes: 1

Scott Stainton
Scott Stainton

Reputation: 394

In your code, you have the following line written inside a loop;

numbers = []

Every time you iterate through the loop, you will create a new variable numbers, hence it is overwritten on every iteration.

Try this;

print("This is a program to order numbers in ascending and descending order.")
while 1 == 1:
    until = int(input("\nEnter how many numbers you want ordered: "))
    print("")
    loop = 0
    numbers = []
    while loop < until:            
        number = float(input("Enter number: "))
        numbers.append(number)
        loop += 1
        print("\nHere are the numbers in descending order:")
    while len(numbers) > 0:
        print(max(numbers))
        largest = max(numbers)
        numbers.remove(largest)

Upvotes: 4

mfitzp
mfitzp

Reputation: 15545

The problem is caused by the line numbers = [] being inside your while loop. This resets numbers to an empty list on each iteration, before you append the next number.

To fix this, simply move this line outside the while loop as follows:

loop = 0
numbers = []
while loop < until:
    number = float(input("Enter number: "))
    numbers.append(number)
    loop += 1

Note that you also don't really need the loop variable in this instance. You can instead test the length of the numbers list directly, as follows:

numbers = []
while len(numbers) < until:
    number = float(input("Enter number: "))
    numbers.append(number)

Upvotes: 1

Related Questions