2016-09-20 3 views
3

Я использую Python 3.5, и я хотел бы использовать команду break внутри функции, но я не знаю, как это сделать. Я хотел бы использовать что-то вроде этого:Python Break Inside Function

def stopIfZero(a): 
    if int(a) == 0: 
     break 
    else: 
     print('Continue') 

while True: 
    stopIfZero(input('Number: ')) 

Я знаю, что я мог бы просто использовать этот код:

while True: 
    a = int(input('Number: ')) 
    if a == 0: 
     break 
    else: 
     print('Continue') 

И если вы не заботитесь о print('Continue') части, вы можете даже сделать этот однострочный: while a != 0: a = int(input('Number: ')) (если уже было присвоено что-то, кроме 0) Однако я хотел бы использовать функцию, потому что в других случаях это могло бы помочь.

Спасибо за любую помощь.

+0

Ваша функция stopIfZero пытается сделать больше, чем нужно. Попытайтесь сосредоточить функцию на одной и только одной задаче. – ray

ответ

6

Обычно это делается путем возвращения какое-то значение, которое позволяет вам решить, хотите ли вы, чтобы остановить время цикла (то есть ли какое-либо условие является истинным или ложным):

def stopIfZero(a): 
    if int(a) == 0: 
     return True 
    else: 
     print('Continue') 
     return False 

while True: 
    if stopIfZero(input('Number: ')): 
     break 
+0

Я знал, что вы можете это сделать, но было интересно, что вы можете сделать это по-другому. Я надеялся на то, что вы могли бы это сделать, это воняет, что вы не можете. Спасибо за ваш ответ, это то, о чем я просил, даже если это не то, что нужно. – nedla2004

+0

Кроме того, это то же самое для команды 'continue'? – nedla2004

+0

@ nedla2004 То, что применяется к 'break', также относится к' continue'. – ray

4

Функция не может break от имени вызывающего абонента. break должен быть синтаксически внутри цикла.

0

Вы хотите использовать return, а не break.

break Используется для остановки цикла.

Оператор break, как и на C, выходит из самого маленького замкнутого цикла или для цикла while.

return используется для выхода из функции и возврата значения. Вы также можете вернуть None.

0

Ключевое слово break предназначено для использования как в примере цикла, так и в пределах области цикла.

Update ваша функция для возврата True или False только вместо:

def is_zero(value): 
    if value == 0: 
     return True 
    return False 

Тогда в цикле, просто использовать, как это:

while True: 
    try: 
     value = int(input("Enter a value (0 to exit): ")) 
    except ValueError: 
     # user entered a non-numeric value (e.g. a letter) 
     # try asking again immediately instead of crashing :) 
     print('Use numbers only, please') 
     continue 

    if is_zero(value): 
     break 

    print('Good entry. Continuing...') 

Ваша stopIfZero функция также несколько перегружен (т.е. имеет более чем только 1 ответственность), потому что он делает больше, чем просто проверить, является ли значение нулевым или нет. Например, это:

  1. преобразует аргументы в int,
  2. печатает сообщение и
  3. не пригодна для повторного использования в других частях программы

Возьмите эти причины в чтобы улучшить ваш код.