После использования 2 циклов в списке первый элемент автоматически удаляется из него в Python

#python #list #loops

Вопрос:

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

 ev_od_list = []
even = []
odd = []

number = int(input("Enter an integer(entering 0 would end the process): "))

while number != 0:
    number = int(input("Enter an integer(entering 0 would end the process): "))
    ev_od_list.append(number)

for i in ev_od_list:
    if i % 2 == 0:
        even.append(i)

even.remove(0)
print("The number of even numbers you entered is:", len(even))

for j in ev_od_list:
    if j % 2 != 0:
        odd.append(j)       

print(ev_od_list)
print("The number of odd numbers you entered is:", len(odd))
 

И выход…

 Enter an integer(entering 0 would end the process): 1
Enter an integer(entering 0 would end the process): 2
Enter an integer(entering 0 would end the process): 3
Enter an integer(entering 0 would end the process): 4
Enter an integer(entering 0 would end the process): 5
Enter an integer(entering 0 would end the process): 6
Enter an integer(entering 0 would end the process): 7
Enter an integer(entering 0 would end the process): 8
Enter an integer(entering 0 would end the process): 9
Enter an integer(entering 0 would end the process): 10
Enter an integer(entering 0 would end the process): 0
The number of even numbers you entered is: 5
[2, 3, 4, 5, 6, 7, 8, 9, 10, 0]
The number of odd numbers you entered is: 4
 

Во второй последней строке вы можете заметить, что 1 был автоматически удален из списка. Итак, почему это происходит?

Ответ №1:

 number = int(input("Enter an integer(entering 0 would end the process): "))

while number != 0:
    number = int(input("Enter an integer(entering 0 would end the process): "))
    ev_od_list.append(number)
 

Вы не добавляете 1-й ввод. 1-й вход заменяется 2-м входом.
итак, в while цикле сначала добавьте, а затем задайте следующий ввод.

 number = int(input("Enter an integer(entering 0 would end the process): "))

while number != 0:
    ev_od_list.append(number)
    number = int(input("Enter an integer(entering 0 would end the process): "))
    
 

Ответ №2:

Вы можете попробовать это решение :

 ev_od_list = []
even = []
odd = []
number = None

while number != 0:
    number = int(input("Enter an integer(entering 0 would end the process): "))
    ev_od_list.append(number)

for i in ev_od_list:
    if i % 2 == 0:
        even.append(i)

even.remove(0)
print("The number of even numbers you entered is:", len(even))

for j in ev_od_list:
    if j % 2 != 0:
        odd.append(j)

print(ev_od_list)
print("The number of odd numbers you entered is:", len(odd))
 

Комментарии:

1. Я чувствовал, что C/ C лучше, когда вы можете сначала определить, что собираетесь использовать, а затем делать все, что захотите. Но в Python я не могу их использовать. Ладно, я так не думал. Огромное спасибо.

Ответ №3:

Причина в том, что у вас есть первый звонок input() , который перезаписывается другим звонком input() , и вы добавляете номер после второго input() звонка. Вот рабочий код с большой оптимизацией:

 even = []
odd = []

number = int(input("Enter an integer(entering 0 would end the process): "))

while number != 0:
    if number != 0:
        if number % 2 == 0:
            even.append(number)
        else:
            odd.append(number)
        number = int(input("Enter an integer(entering 0 would end the process): "))

print("The number of even numbers you entered is:", len(even))
print("The number of odd numbers you entered is:", len(odd))
 

Комментарии:

1. Да, конечно. Но я не знаю, как отметить ваш ответ в качестве ответа.

2. Обратитесь к этому: meta.stackexchange.com/a/5235

Ответ №4:

Вы получаете первый номер и переопределяете на нем второй, чтобы он был потерян. Вы можете получить число внутри цикла и определить число с произвольным значением вне цикла.

Кроме того, я думаю, что вы пытались удалить ноль, вы можете сделать это с помощью del ev_od_list[-1] команды, которая удаляет последний элемент ev_od_list , который всегда равен нулю.

 ev_od_list = []
even = []
odd = []
number = 1
# number = int(input("Enter an integer(entering 0 would end the process): "))

while number != 0:
    number = int(input("Enter an integer(entering 0 would end the process): "))
    ev_od_list.append(number)

del ev_od_list[-1]

for i in ev_od_list:
    if i % 2 == 0:
        even.append(i)


print("The number of even numbers you entered is:", len(even))

for j in ev_od_list:
    if j % 2 != 0:
        odd.append(j)       

print(ev_od_list)
print(even)
print("The number of odd numbers you entered is:", len(odd))
 

Комментарии:

1. Это также можно сделать, но необязательно, чтобы пользователь вводил 1, так что это может не помочь.