Nested For Loops Пропустить целую строку во время итерации? питон - PullRequest
0 голосов
/ 06 марта 2019

Поскольку это домашнее задание и для его целостности, я буду использовать макет кода в качестве примера.Модель, которую я привел в качестве примера, использует операторы switch, поэтому я попытался имитировать результат, используя if / else if / else.

for (int i = 0, i < 26; i++)
char ch = word[i]
 type = testChar(ch); 

            switch (type) 
            {
            case 0:
                std::cout << "digit" << std::endl;
                break;

            case 1:
               std::cout << "letter" << std::endl;
               break;


            case 3:
               std::cout << "None" << std::endl;
               break;
            }

homework.txt содержит

!while true!
line1
line2

main содержит

def main():
    with open('homework.txt','r') as file:
    data = file.read()
    sentencesbank = data.splitlines()
    for sentences in sentencesbank:
          for letter in sentences:
              type = test(letter) #a test that just returns if the letter is a digit(0) or letter(1)
              if (type == 0):
                     print("digit")
                     break
              elif(type ==1):
                    print("letter")
                    break
              else:
                   print("none")
                   break

- это общее представление о том, как работает мой код.Ожидаемый результат был бы

none
letter
letter
letter
letter
letter
none
letter
letter
letter
letter
none

letter
letter
letter
letter
digit
none

letter
letter
letter
letter
digit
none

Но вместо этого на самом деле произошло бы следующее: 1013 *

none
letter
letter

Он читает первый символ первой строки, а затем пропускает оставшуюся часть этой строки.,

Случайно кто-нибудь может мне помочь с этим?

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

break в каждом из ваших операторов if выходит из цикла for letter in sentences:. Удалить их.

1 голос
/ 06 марта 2019

Оператор break останавливает любую итерацию, идущую на внешний уровень рядом с текущим вложенным уровнем.Поскольку ваш код имеет последовательность if, elif и else, все из них с оператором break, описанное вами поведение является ожидаемым.

Дело в том, что в C ++, когдаодин случай оценивается как истинный, все последующие случаи также оцениваются как истинный.Из-за этого нужен перерыв.Как уже отмечали другие в комментариях, просто удалите разрывы, и ваш код будет работать правильно.

...