Как мне остановить цикл while, который добавляет числа в список при достижении определенного значения индекса?

#python #list #loops #while-loop #sequence

#python #Список #циклы #цикл while #последовательность

Вопрос:

Я создал цикл while, который должен останавливаться, когда количество элементов внутри него достигает переменной ‘count’, но я не слишком уверен в том, как это сделать. Вот полный код для контекста, но часть, с которой у меня возникли проблемы, находится в конце. Кроме того, когда пользователь вводит неверный ввод, код выдает ошибку, вероятно, это то, что я мог бы исправить самостоятельно после нескольких попыток, но я не совсем уверен, как. В любом случае, основными проблемами здесь являются циклы while. Заранее спасибо за помощь.

 count = int(input("How many numbers should the sequence have? "))
question = input("AP or GP? ")

# Asking the user for input on how many numbers the sequence will have
if question == "AP":
    APdiff = int(input("Insert the common difference for the AP: "))
    while type(APdiff) != int:
        print("Insert a valid input.")
        APdiff = int(input("Insert the common difference for the AP: "))
elif question == "GP":
    GPdiff = int(input("Insert the common ratio for the GP: "))
    while type(GPdiff) != int:
        print("Insert a valid input.")
        GPdiff = int(input("Insert the common ratio for the GP: "))
while question != "AP" and question != "GP":
    print("Please enter a valid input.")
    question = input("AP or GP? ")


def sequence_generator():


    #Setting up the sequences
    sequence = []
    number = 1

    #Defining the AP
    if question == "AP":
        while number in range(1, 99999999999999999999999999999999):
            sequence.append(number)
            number  = APdiff
            if sequence.index() == count:
                break
    #Defining the GP
    elif question == "GP":
        while number in range(1, 99999999999999999999999999999999):
            sequence.append(number)
            number *= GPdiff
            if sequence.index() == count:
                break
    return sequence



print(sequence_generator())
 

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

1. Этот код вообще не выполняется. Он не .index() сообщает вам, что ему нужен аргумент

2. о, извините за это, я думаю, что предпринял несколько других попыток и в итоге отправил неправильную версию кода. Все хорошо, хотя люди дали хорошие ответы

Ответ №1:

Вы могли бы использовать while len(sequence)<count . В итоге вы получите что-то вроде этого

 count = int(input("How many numbers should the sequence have? "))
question = input("AP or GP? ")

# Asking the user for input on how many numbers the sequence will have
if question == "AP":
    APdiff = int(input("Insert the common difference for the AP: "))
    while type(APdiff) != int:
        print("Insert a valid input.")
        APdiff = int(input("Insert the common difference for the AP: "))
elif question == "GP":
    GPdiff = int(input("Insert the common ratio for the GP: "))
    while type(GPdiff) != int:
        print("Insert a valid input.")
        GPdiff = int(input("Insert the common ratio for the GP: "))
while question != "AP" and question != "GP":
    print("Please enter a valid input.")
    question = input("AP or GP? ")


def sequence_generator():


    #Setting up the sequences
    sequence = []
    number = 1

    #Defining the AP
    if question == "AP":
        while len(sequence)<count:
            sequence.append(number)
            number  = APdiff
    #Defining the GP
    elif question == "GP":
        while len(sequence)<count:
            sequence.append(number)
            number *= GPdiff
    return sequence



print(sequence_generator())
 

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

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

Ответ №2:

Циклы While не будут прерываться до тех пор, пока не будет выполнено условное выражение. Например:

 x = 0
while (x < 5):
  print(x)
  x  = 1
print('All done')
 

выведет

 0
1
2
3
4
All done
 

Программа будет выполнять блок кода до тех пор, пока не будет выполнено условие, а затем прервет цикл и не будет печатать 5.

Чтобы выполнить действие при прерывании цикла while, просто поместите код после блока while .

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

1. Цикл while также прервется с break помощью оператора, как и предполагалось OP. Попробуйте сами, поставив break after i = 1 .