Итерация по списку для создания чека Stock - PullRequest
0 голосов
/ 25 ноября 2018

Итак, для начала я новичок в программировании в целом (примерно 3 месяца или около того), и хотя обучение через книги - это хорошо, я действительно стараюсь применять свои знания и учиться на опыте.

На моей работе сотрудники нашего склада часто неправильно выбирают заказы, поэтому я пытаюсь разработать что-то, что извлечет список заказов из файла .txt и сравнит его с выбранным товаром.Я чувствую, что это задача, которую я могу использовать, чтобы закрепить некоторые из моих текущих знаний, в то же время изучая новые вещи.

from tkinter.filedialog import askopenfilename
#This splits the order .txt file into a list
def picklist(ordernum):
    with open(ordernum, "r") as f:
        mylist = [line.strip() for line in f]

return mylist

def test(list):
    pickeditem = input("Please scan the first item")
    for i in range(len(list)):
        if list[i] == pickeditem:
            print("Correct item.")
        else:
            while list[i] != pickeditem:
                input("Wrong item! Please scan again:")
            if list[i] == pickeditem:
                print("Correct item.")

def order():
    print("Please pick the order you want to complete")
    order = askopenfilename() #gets order .txt from user
    pcklist = picklist(order)
    print("You pick list is: ",pcklist)
    test(pcklist)

order()

Таким образом, общая идея состоит в том, чтобы создать файл .txt со списком серийных кодов элементов, которыенужно потянуть, а затем получить это в Python в функции заказа, которую я создал.Затем я использую функцию выбора, чтобы разделить элементы, которые хранятся в файле .txt, в список, чтобы я мог заставить пользователя сканировать один элемент за раз, чтобы убедиться, что он правильный.

Здесь я пытаюсь вызвать то, что в настоящее время называется тестовой функцией.Я хочу, чтобы эта функция принимала каждый элемент в списке, и если он равен элементу, отсканированному для печати, то это правильный элемент.Это отлично работает, отлично подходит для первого пункта.

Проблема состоит в том, чтобы заставить его перебирать следующий элемент в списке.Таким образом, если элемент один равен 2155, а элемент 2155 отсканирован, он скажет правильный элемент.Проблема заключается в том, что он скажет: «Неправильный предмет! Пожалуйста, отсканируйте снова:», поскольку я предполагаю, что pythong теперь переместился на пункт 2 в списке.Но, если я затем введу код для 2, он скажет, что неправильный пункт!Пожалуйста, отсканируйте снова.

Я пытался использовать индексирование списков, чтобы не использовать avial - возможно, мне следовало бы сделать это в одной функции, а не разбивать ее, как я.

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

Я понимаю, что это, вероятно, не самый хитрый, самый питонский код, когда-либо, но на самом деле я после чего-то легкого для чтения, понимания и редактирования в будущем.

Пока мне просто нужно понять, что ямне нужно узнать / как мне нужно подумать об этой проблеме, чтобы я мог проверить, что каждый элемент в предоставленном файле .txt соответствует каждому элементу, отсканированному пользователем.

Заранее спасибо.

1 Ответ

0 голосов
/ 25 ноября 2018

Для каждого элемента в списке вы хотите отсканировать выбранный элемент и сравнить его;если сравнение не удается, вы хотите постоянно проверять выбранные элементы, пока они не совпадут.

Вы действительно близки - в наборе else сравнение с новым отсканированным элементом должно быть в цикле, отступ - неправильный;вам также нужно присвоить input возвращаемое значение pickeditem,

            while list[i] != pickeditem:
                pickeditem = input("Wrong item! Please scan again:")
                if list[i] == pickeditem:
                    print("Correct item.")

Затем в нижней части цикла for необходимо отсканировать следующий выбранный элемент, чтобы сравнить его со следующим элементомв списке.

def test(list):
    pickeditem = input("Please scan the first item")
    for i in range(len(list)):
        if list[i] == pickeditem:
            print("Correct item.")
        else:
            while list[i] != pickeditem:
                pickeditem = input("Wrong item! Please scan again:")
                if list[i] == pickeditem:
                    print("Correct item.")
        pickeditem = input("Please scan the next item")

Набор else может быть немного упрощен - оператор while делает сравнение для вас, поэтому вам не нужно проверять его снова с помощью оператора if:

def test(list):
    pickeditem = input("Please scan the first item")
    for i in range(len(list)):
        if list[i] == pickeditem:
            print("Correct item.")
        else:
            while list[i] != pickeditem:
                pickeditem = input("Wrong item! Please scan again:")
            print("Correct item.")
        pickeditem = input("Please scan the next item")

Вы должны всегда пытаться упростить логику, чтобы минимизировать вероятность возникновения проблем / ошибок, и это может сделать код легче для чтения.Оператор if/else на самом деле не нужен, поскольку выполняется сравнение с оператором while.

def test(list):
    pickeditem = input("Please scan the first item")
    for i in range(len(list)):
        while list[i] != pickeditem:
            pickeditem = input("Wrong item! Please scan again:")
        print("Correct item.")
        pickeditem = input("Please scan the next item")

Когда повторяется с циклом for , вам не нужноиспользовать индексы, вы можете перебирать элементы последовательности напрямую.Вы не должны использовать ключевые слова python, имена функций или классов для имен переменных, я изменил имя списка на a_list.

def test(a_list):
    pickeditem = input("Please scan the first item")
    for item in a_list:
        while item != pickeditem:
            pickeditem = input("Wrong item! Please scan again:")
        print("Correct item.")
        pickeditem = input("Please scan the next item")

Если вам нужно отслеживать индексы элементов во время итерации, используйтеenumerate.


Возможно, вас заинтересует ответ SO на: Запрос пользователя о вводе, пока он не даст действительный ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...