嵌套For循环在迭代时跳过整行?蟒蛇

时间:2019-03-05 22:42:26

标签: python switch-statement

由于这是一项家庭作业,并且出于完整性考虑,我将使用模拟代码作为示例。我作为示例给出的模型使用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

主要包含

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

但是实际上发生了什么事

none
letter
letter

它读取第一行的第一个字符,然后跳过该行的其余部分。

有机会有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您的每个break语句中的if正在脱离for letter in sentences:循环。删除它们。

答案 1 :(得分:1)

break语句将停止所有迭代,直到当前嵌套级别旁边的最外层。由于您的代码具有ifelifelse的序列,并带有break语句,因此您所描述的这种行为是预期的行为。

问题是在C ++中,当一种情况的评估结果为true时,以下所有情况也被评估为true。因此,需要休息。正如其他人已经在注释中指出的那样,只需删除中断即可,您的代码将正常工作。