Этот цикл пока не запустится? - PullRequest
0 голосов
/ 08 ноября 2019

Я делал некоторые базовые тренировочные упражнения для python, и до сих пор он был довольно плавным, и поэтому я столкнулся с проблемой, когда второй цикл while не будет работать. До сих пор я переопределял отступ, определял целую секунду и пытался поместить параметры в цикл, где выполнено = True, а сделано == True :, done = False (позже в коде было то, что у меня было ранее, но я удалилэто нужно, чтобы заставить его работать.)

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

import random
Olist = []
while True:
counter = 0
counter2 = 0
print("\nWelcome to exercise 05")
InH1 = str(input("\nDo you wish to continue? (y/n):"))
if InH1 == 'y':
    list1 = random.sample(range(30), 11)
    list2 = random.sample(range(30), 9)
    print("\n<><>Two random lists have been generated.<><>")
    print(list1)
    print(list2)
    max_index = len(list2)-1
    print("\n<><>Max index has been generated.<><>")
    InD = str(input("\nStart the func? (y/n):"))
    if InD == 'n':
        break
    if InD == 'y':
        while True:
            if counter2 == 11:
                print(Olist)
                InL = str(input("\nEnter any key to return to the start of the program,\
                                  or,\n enter 'q' to break the program."))
                if InL == 'q':
                    break
            if list1[counter2] == list2[counter]:
                Olist.append(list2[counter])
                counter + 1
            elif counter == 10:
                counter = 0
            else:
                counter + 1
if InH1 == 'n':
    break

Ответы [ 3 ]

0 голосов
/ 08 ноября 2019
if list1[counter2] == list2[counter]:
                Olist.append(list2[counter])
                counter + 1
            elif counter == 10:
                counter = 0
            else:
                counter + 1

Я думаю, что ваши counter + 1 заявления вызывают у вас серьезные проблемы. На самом деле внимательно посмотрите там ... Разве вы не имеете в виду counter = counter + 1?

0 голосов
/ 08 ноября 2019

Ciao,

несколько деталей:

  • после присвоения counter2 = 0 нет действия для *1007*, поэтому вы никогда не войдете в ветку if counter2 == 11 [недоступно] и - если не нужно где-то еще - вы можете полностью удалить эту часть
  • , как сказал Том, вы должны задать приращение счетчика как counter = counter + 1 или с краткой формой counter += 1
  • , которую вынеобходимо также контролировать, что counter не преодолеет max_index, или вы попытаетесь извлечь несуществующий элемент в массиве, генерирующий "IndexError: list index out of range" из строки if list1[counter2] == list2[counter], прежде чем counter можно будет сбросить с помощью следующегоelif branch
  • вам нужно создать условие для остановки второго цикла, иначе вы не дойдете до конца программы: вот почему я изменил ее на while counter < max_index:: та же строка позволит вамдля безопасного удаления ветки elif из предыдущей точки тоже
  • Я оставил первый цикл постоянно работающим, чтобы начать бесконечно долго

Этот код должен подойти для вашей цели:

import random
Olist = []

while True:
    counter = 0
    counter2 = 0
    print("\nWelcome to exercise 05")
    InH1 = str(input("\nDo you wish to continue? (y/n):"))

    if InH1 == 'y':
        list1 = random.sample(range(30), 11)
        list2 = random.sample(range(30), 9)
        print("\n<><>Two random lists have been generated.<><>")
        print(list1)
        print(list2)
        max_index = len(list2)-1
        print("\n<><>Max index has been generated.<><>")
        print(max_index)
        InD = str(input("\nStart the func? (y/n):"))
        if InD == 'n':
            break
        if InD == 'y':
            print(list1[counter2])
            print(list2[counter])
            while counter < max_index:
                if counter2 == 11:
                    print(Olist)
                    InL = str(input("\nEnter any key to return to the start of the program,\
                                  or,\n enter 'q' to break the program."))
                    if InL == 'q':
                        break

                if list1[counter2] == list2[counter]:
                    Olist.append(list2[counter])
                    counter += 1
                else:
                    counter += 1

    if InH1 == 'n':
        break

Надеюсь, это поможет,Antonino

0 голосов
/ 08 ноября 2019

Вы писали:

while True:
counter = 0
counter2 = 0

counter = 0 - это ВНЕ цикла while

Вы хотели следующее?

while True:
   counter = 0
   counter2 = 0
...