2016-12-12 2 views
0

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

CSV-файл, который я использую, выглядит так:

24937597 Basic Hatchet 20 
49673494 Hardened Axe 100 
73165248 Steel Axe  500 
26492186 Utility Truck 2000 
54963726 Small Trailer 600 
17667593 Shabby Sawmill 200 
76249648 SawMax 01  5000 
34865729 Basic Hammer 70 
46827616 50mm Nails  0.10 
46827623 20mm Nails  0.05 

Мой код выглядит следующим образом:

import csv 
import time 

retry='yes' 
while retry=='yes': 

    receipt=[] 
    total=0 
    numofitems=0 

    with open ('Stock File.csv','r') as stock: 
     reader=csv.reader(stock, delimiter=',') 

     print('Welcome to Wood R Us. Today we are selling:') 
     print(' ') 
     print('GTIN-8 code Product name Price') 
     for row in reader: 
      print(row[0]+' '+row[1]+' '+row[2]) 
     print(' ') 

     choice='product' 
     while choice=='product': 
      inputvalid='yes' 
      barcode=input('Enter the GTIN-8 code of the product you wish to purchase: ') 
      quantity=int(input('Enter the quantity you wish to purchase: ')) 
      for row in reader: 
       if barcode in row: 
        cost=int(row[2]) 
        price=quantity*cost 
        total=total+price 
        receipt.append(barcode+row[1]+str(quantity)+row[2]+str(price)) 
        numofitems=numofitems+1 

      print('Do you want to buy another product or print the receipt?') 
      choice=input('product/receipt ') 

     if choice=='receipt': 
      inputvalid='yes' 
      for i in range(0, numofitems): 
       print(str(receipt[i])) 
       time.wait(0.5) 
      print(' ') 
      print('Total cost of order  '+str(total)) 

     else: 
      inputvalid='no' 

     if inputvalid=='no': 
      print('Invalid input') 

     if inputvalid=='yes': 
      print(' ') 
      print('Do you want to make another purchase?') 
      retry=input('yes/no ') 
     while retry!='yes': 
      while retry!='no': 
       print(' ') 
       print('Invalid input') 
       print('Do you want to make another purchase?') 
       retry=input('yes/no ') 
      retry='yes' 
     retry='no' 
if retry=='no': 
    print('Goodbye! See you again soon!') 

Кто-нибудь знает, как это исправить?

+3

Почему вы используете строковые значения при наличии встроенных булевых значений? –

+0

Почему вы пытаетесь повторить цикл 'reader'? – user2357112

+0

какой массив? 'получение = []'? используйте 'print()' для проверки значений в переменных в разных местах кода. Возможно, вы удалите все значения, используя 'получение = []' в неправильном порядке. – furas

ответ

0

Позвоните stock.seek(0) по строке 26: for row in reader: перед чтением строк csv.

Объекты csv.reader() ведут себя как метод file.read() python, так как считыватель файлов необходимо сбрасывать до начала файла перед чтением содержимого файла. Перед проверкой введенных пользователем в строке while choice=='product':, вы уже прочитали файл csv один раз в строке 17:

for row in reader: 
    ... 

и csv.reader() объект все еще указывает на конец содержимого csv файла, и больше нет строки для чтения читателя, поэтому код никогда не входит в следующий цикл for row in reader:.

Чтобы исправить это, вставить stock.seek(0) заявление перед повторным чтением csv содержимого, в if barcode in row:, сбросит csv.reader() в начале файла, и вы должны увидеть элементы заполнить ваш массив.

+0

Работает. Спасибо за вашу помощь – TheOneWhoLikesToKnow

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