Къде свършва прекъсването на For Loop

Имам код, който приема текстов файл и го анализира, за да получи честотата на всяка дума и да я съхрани в речник.

# Load a corpus and build a language model
def load_model(filename):
"""Loads a corpus file and builds a language model consisting of word:frequency.
Converts all words to lowercase, strips punctuation, and ignores any non-alphabetic characters."""

    dictionary = {}
    f = open(filename)
    for line in f:
        words = line.split(' ') # Split each word and iterate through.
        for string in words:

            for c in string: # Check each character value for punctuation or numeric type.

                if c in Punct:
                    string = string.replace(c,"")
                if c.isdigit()
                    print String + ' is not formattable.\n'
                    break

            string = string.lower()
            if string in dictionary:
                dictionary[string] = dictionary[string] + 1
            else:
                dictionary[string] = 1
    f.close()
    return dictionary

Въпросът ми е, че имам нужда от прекъсване, за да прекратя проверката на целия низ, а не само да прекратя проверката на символи.

Прекъсването завършва ли цикъла, в който се намира, или завършва първия цикъл: ("за ред в f")

И продължаването просто ще прекрати този конкретен цикъл.

Искам го така, че да завърши проверката на целия низ и да премине към следващия низ с думи.


person alvarezcl    schedule 22.04.2014    source източник
comment
Вероятно също не трябва да използвам низ като име на променлива.   -  person alvarezcl    schedule 22.04.2014
comment
не се колебайте да редактирате собствения си въпрос   -  person niklasfi    schedule 22.04.2014
comment
Break завършва най-вътрешния цикъл.   -  person Kyle Strand    schedule 22.04.2014
comment
Защо първо не експериментирате и не видите какво ще се случи, преди да попитате   -  person ρss    schedule 22.04.2014
comment
Какъв резултат получавате с текущия код?   -  person laurencevs    schedule 22.04.2014


Отговори (3)


От документацията:

Операторът break, подобно на C, излиза от най-малкия обграждащ for или while цикъл.

Според този въпрос, Python не поддържа конструирайте като break 2, както прави PHP.

person Bart Friederichs    schedule 22.04.2014

break ще излезе от най-вътрешния цикъл, в който се намира.

Можете да излезете от външен цикъл, като използвате предложеното от @farmerjoe.

Но не виждам защо искате да го направите. break, който имате там, изглежда добре такъв, какъвто е: той ще спре да обработва символите на текущия низ и ще премине към проверка на следващия низ.

Има някои грешки в кода ви. Поправих ги за вас и някои стилови проблеми:

def load_model(filename):
    dictionary = {}
    with open(filename) as f:
        for line in f:
            words = line.split(' ')  # Split each word and iterate through.
            for word in words:
                for c in word:  # Check each character value for punctuation or numeric type.
                    if c in Punct:
                        word = word.replace(c, "")
                    if c.isdigit():
                        print word + ' is not formattable.\n'
                        break

                word = word.lower()
                if word in dictionary:
                    dictionary[word] += 1
                else:
                    dictionary[word] = 1
    return dictionary
person janos    schedule 22.04.2014

break завършва най-вътрешния/непосредствен цикъл, в който е включен, т.е. този, в който е директно в обхвата.

for x in X:
    for y in Y:
        break

Цикълът x ще работи до завършване, цикълът y ще се прекъсне.

Можете да предизвикате прекъсване на външния цикъл, като може би зададете променлива като флаг:

break_outer = False
for x in X:
    for y in Y:
        if condition:
            break_outer = True
            break
    if break_outer:
        break

Пример:

for x in range(3):
    for y in range(2):
        if x == 2:
            break
        print "x =",x,"y =",y

изход:

>>> x = 0 y = 0
>>> x = 0 y = 1
>>> x = 2 y = 0
>>> x = 2 y = 1

И за да прекъснете външен цикъл, ще прехвърлите променлива нагоре:

break_outer = False
for x in range(3):
    for y in range(2):
        if x == 2:
            break_outer = True
            break
        print "x =",x,"y =",y
    if break_outer:
        break

изход:

>>> x = 0 y = 0
>>> x = 0 y = 1

continue пропуска остатъка от кода, оставащ в цикъла, и продължава към следващата итерация в цикъла for:

for i in range(3):
    if i == 1:
        continue
    print i

изход:

>>> 0
>>> 2

Изглежда обаче, че кодът ви прави това, което искате, breaking и преминаване към следващата дума...имаше ли нещо друго в кода, което даваше нежелан резултат?

person Farmer Joe    schedule 22.04.2014