Изо всех сил пытаюсь понять этот цикл while

#python

#python

Вопрос:

 num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69, 113, 166]

count_odd = 0
list_sum = 0
i = 0
len_num_list = len(num_list)

while (count_odd < 5) and (i < len_num_list): 
    if num_list[i] % 2 != 0:
        list_sum  = num_list[i]
        count_odd  = 1
    i  = 1

print ("The numbers of odd numbers added are: {}".format(count_odd))
print ("The sum of the odd numbers added is: {}".format(list_sum))
  

Отказ от ответственности: Я полный новичок, и я обнаружил, что больше всего борюсь с циклами while. Циклы For имеют смысл для меня.
Цель этого кода — получить первые 5 нечетных чисел в списке и найти их сумму.
Я изо всех сил пытаюсь понять назначение i переменной и почему они использовали num_list[i] % 2 != 0 (если i установлено в 0 глобально перед циклом), чтобы найти нечетное число. Я предполагаю, что это имитирует цикл for, поэтому он может выполнять итерации по списку, но я не уверен, как это работает. и блок кода под этим

 list_sum  = num_list[i]
count_odd  = 1
i  = 1 
  

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

Ответ №1:

Ваш цикл while продолжает выполняться до тех пор, пока count_odd переменная (количество нечетных чисел, вычисленных на данный момент) меньше 5 и i (общее количество чисел, вычисленных на данный момент) меньше длины списка чисел для оценки.

Каждый раз, когда выполняется код, если число с текущим индексом ( i ) нечетное (не имеет остатка после деления на 0), то сумма нечетных чисел ( list_sum ) увеличивается на значение этого числа. Также количество вычисленных нечетных чисел ( count_odd ) увеличивается на 1, чтобы показать, что вычисляется другое нечетное число. Но независимо от того, нечетное это число или нет, индекс текущего числа ( i ) увеличивается на 1, чтобы показать, что следующее число может быть вычислено.

Ответ №2:

Код предельно прост:

Условие в wile означает, что пока он не нашел число 5, и пока в первом списке есть число, это должно сработать.

Чем условие:

 if num_list[i] % 2 != 0:
  

Переменная используется для чтения каждого элемента списка, в то время как сама переменная увеличивается.

Затем num % 2 возвращает остаток от деления num / 2. Если это не 0, то наверняка будет 1, поэтому число нечетное.

Переменная увеличивается сама по себе, потому что она должна прочитать следующее число в списке. Если это вам не подходит, попробуйте узнать что-нибудь о списке, кортежах и так далее

Надеюсь, будет полезно

Ответ №3:

 #it is the first initializing, essentially starting with 0
i = 0
len_num_list = len(num_list)

# you can reframe the while to:
# as long as you do not have 5 odd numbers AND you are not through the whole list, continue
while (count_odd < 5) and (i < len_num_list):
    # num_list[i] means that you take the element with index i from the list
    # since i is initialized with 0, at the first loop you take the first element (in python index starts at 0 not 1)
    # SomeNumber % 2 means that if you divide the number by 2, what are the decimals.
    # Only odd numbers will have decimals after division with 2, e.g. 4/2 = 2.0 but 3/2 = 1.5 so the rest would be 5
    # and 5 is != 0
    if num_list[i] % 2 != 0:
        # number  = other_number is essentially short for: number = number   other_number
        # essentially you have e.g. numb = 100 and want to add 10, you can either do:
        # numb = numb   10 OR numb  = 10
        list_sum  = num_list[i]
        count_odd  = 1
    # since we are now through the first number of the list, which had index 0
    # we now add 1 to the index and the while loop continues until the criterias stated after the "while" keyword are met.
    i  = 1
  

Ответ №4:

Вы можете преобразовать его в цикл ‘for’, разделяющий проверки условий. Индексирование num_list не требуется, его можно повторить.

 for n in num_list: 
     if n%2==0: 
         continue 
     if count_odd==5: 
         break 
     list_sum = n 
     count_odd = 1
  

Ответ №5:

Переменная i — это переменная, которая запускает цикл while. В исходном коде i= 0, и использование (num_list[i] % 2 != 0) заключается в поиске нечетного числа. Потому что любое число, кратное 2, является четным числом.Поэтому в коде указано, что при делении числа на 2 оно не должно быть равно нулю. Итак, это нечетное число.

Объяснение кода.

 num_list[0]=422
422/2 is equal to zero.so it is not a odd number.
Then the i value is incriminating by 1
So i=i 1
i=0 1
i=1
now the value of i=1
num_list[1]=136
136/2=0 it is a even number.
Now i will again incriminating by 1
i=1 1
i=2
num_list[2]=524
524 is again even.
Then i again incriminating by 1
i=2 1
i=3
num_list[3]=85
85/2 is not zero
then list_sum=0 85
now list_sum=85
And i keeps on incriminating by 1 till 5 odd numbers is achieved.
  

Вот тот же код с циклом for

 num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69, 113, 166]

countodd=0
sum=0
l=len(num_list)
for i in range(l):
    if countodd<5 and  num_list[i] % 2 != 0:
        sum =num_list[i]
        countodd =1
print("The numbers of odd numbers are",countodd)
print("The sum of the odd numbers is",sum)
  

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

1. @S0V22 ты так приветствуешь. И, пожалуйста, проголосуйте за мой ответ.