为什么代码没有把任何东西放到数组中?

时间:2016-12-12 21:12:37

标签: python arrays csv append

我正在尝试创建一个像商店一样工作的程序,但出于某种原因,当我想要它时,它不会将任何内容放入数组中。

我使用的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!')

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在第26行:stock.seek(0)致电for row in reader:,再次阅读csv行。

csv.reader()个对象的行为类似于python的file.read()方法,因为在再次读取文件内容之前,需要将文件读取器重置为文件的开头。在第while choice=='product':行检查用户输入之前,您已在第csv行读过17个文件:

for row in reader:
    ...

并且csv.reader()对象仍然指向csv文件内容的末尾,并且没有更多行供读者阅读,因此代码永远不会进入下一个{{1循环。

要解决此问题,请在再次阅读for row in reader:内容之前插入stock.seek(0)声明,csv会将if barcode in row:重置为文件的开头,您应该看到项目填满你的阵列。