2016-05-31 2 views
1

У меня есть этот код ниже. Когда/Если программа поступает в оператор if: if stocklevel < 1:, мне нужно перейти прямо к функции repeat.Как пропустить функции?

def checkstocklevel(code): 
with open('stockcontrol.csv',newline='') as f: 
    for line in f: 
     if code in line: 
      data = line.split(",") 
      stocklevel = int(data[1]) 
      if stocklevel < 1: 
       print("Sorry, this product is out of stock") 
       f = open("receipts","a") 
       f.write(code) 
       f.write(" Product Out Of Stock\n") 
       f.close() 
       repeat(username) 
      elif stocklevel <= 5: 
       print("New Order Required - Remaining Stock:",data[1],) 
      elif stocklevel <= 10: 
       print("Low Stock - Remaining Stock:",data[1],) 
      else: 
       print("Normal Stock -",data[1],) 
      return stocklevel 

Если добавить repeat(username) к нижней части коды выше, я прихожу к функции repeat, но в конечном итоге обратно на quantityFunction (стадия после вышеописанной функции)

Это основной код посылая мне места;

while repeatchoice == True: 
    code = getproductcode() 
    product = checkfile(code) 
    stocklevel = checkstocklevel(code) 
    quantity = quantityFunction(product) 
    checkquantity = isquantityokay(quantity, stocklevel) 
    quantity = int(quantity) 
    update = updatestocklevel(quantity, stocklevel, code) 
    cost = price(product) 
    productcost = calculateproductcost(cost, quantity) 
    rline = receiptline(product, quantity, productcost) 
    addtoreceipt = append(rline) 
    addtototal = appendprice(productcost) 
    repeatchoice = repeat(username) 

Есть ли способ, я могу пропустить все от quantityFunction к addtototal, когда я достигаю if заявление?

+0

К какой функции относится первый код и какое возвращаемое значение оно дает вашему основному циклу? Очень неясный атм. – Torxed

+0

Я не уверен, в чем проблема ... Не можете ли вы просто поставить оператор 'if' в цикле' while' и проверить на уровне запасов> 1? – 3kt

+0

Я бы сказал, что либо сделайте 'repeatChice' глобальным, либо обновите его в своих функциях или лучше обработайте возвращаемые значения, так как на данный момент только одна функция влияет на основной цикл. – Torxed

ответ

1

Вы можете позволить своему checkstockLevel функции (который я угадывание первый фрагмент кода от) возвращает логическое значение (возможно, в дополнение к тому, что уже возвращается), а затем работать с этим. Так что-то вроде этого:

def checkstocklevel(socklevel): 
    #maybe do something (I don't know if there is more code in your function) 
    if stocklevel < 1: 
     print("Sorry, this product is out of stock") 
     f = open("receipts","a") 
     f.write(code) 
     f.write(" Product Out Of Stock\n") 
     f.close() 
     return False,stocklevel 
    #... 
    return True,stocklevel 

, а затем в основной код сделать:

while repeatchoice == True: 
    code = getproductcode() 
    product = checkfile(code) 
    result,stocklevel = checkstocklevel(code) 
    if result: 
     quantity = quantityFunction(product) 
     checkquantity = isquantityokay(quantity, stocklevel) 
     quantity = int(quantity) 
     update = updatestocklevel(quantity, stocklevel, code) 
     cost = price(product) 
     productcost = calculateproductcost(cost, quantity) 
     rline = receiptline(product, quantity, productcost) 
     addtoreceipt = append(rline) 
     addtototal = appendprice(productcost) 
    repeatchoice = repeat(username) 

Edit: Теперь, когда вы добавили действительную функцию она должна была бы выглядеть следующим образом:

def checkstocklevel(code): 
    with open('stockcontrol.csv',newline='') as f: 
     for line in f: 
      if code in line: 
       data = line.split(",") 
       stocklevel = int(data[1]) 
       if stocklevel < 1: 
        print("Sorry, this product is out of stock") 
        f = open("receipts","a") 
        f.write(code) 
        f.write(" Product Out Of Stock\n") 
        f.close() 
        return False,stocklevel 
       elif stocklevel <= 5: 
        print("New Order Required - Remaining Stock:",data[1],) 
       elif stocklevel <= 10: 
        print("Low Stock - Remaining Stock:",data[1],) 
       else: 
        print("Normal Stock -",data[1],) 
       return True,stocklevel 
+0

Это работает, спасибо за помощь –

+0

Привет @Keiwan, мне нужно сделать аналогичную вещь в другой функции, которую я сейчас имею. Мне нужно будет пропустить такие функции, как в этом вопросе. Поскольку у меня уже есть «результат» в моем коде, смогу ли я использовать тот же метод? Является ли результат глобальным, или я могу использовать что-то вроде result2? –

+0

Если цикл while не находится внутри функции, тогда да, 'result' будет глобальным. Вы можете переназначить его или использовать 'result2', как вам нравится. – Keiwan

1

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

while repeatchoice == True: 
    code = getproductcode() 
    product = checkfile(code) 
    stocklevel = checkstocklevel(code) 
    if stocklevel < 1: 
     quantity = quantityFunction(product) 
     checkquantity = isquantityokay(quantity, stocklevel) 
     quantity = int(quantity) 
     update = updatestocklevel(quantity, stocklevel, code) 
     cost = price(product) 
     productcost = calculateproductcost(cost, quantity) 
     rline = receiptline(product, quantity, productcost) 
     addtoreceipt = append(rline) 
     addtototal = appendprice(productcost) 
    repeatchoice = repeat(username) 

И удалить вызов «повторить» в функции stocklevel.

Это некрасиво, и было бы трудно добавить больше условий, так что вы можете начать поиск в рефакторинга это использовать классы/объектно-ориентированное программирование

+0

'if stock levelvel <1' Я хочу пропустить весь код, который вы поставили под ним, а не пропустить его –

+0

Затем просто переверните его на уровень запаса> = 1 – CamJohnson26

+0

А как насчет других операторов if? Что мне делать с этим? –

Смежные вопросы