为什么代码没有将任何内容放入数组中?

2024-04-20 01:45:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个程序,这将工作像一个商店,但由于某种原因,它没有把任何东西放入数组时,我想它。你知道吗

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

有人知道怎么解决这个问题吗?你知道吗


Tags: csvtonoyouinputifproductyes
1条回答
网友
1楼 · 发布于 2024-04-20 01:45:05

在第26行调用stock.seek(0)for row in reader:,然后再次读取csv的行。你知道吗

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

for row in reader:
    ...

而且csv.reader()对象仍然指向csv文件内容的末尾,并且没有更多的行供读取器读取,因此代码永远不会进入下一个for row in reader:循环。你知道吗

要修复它,请在再次读取csv内容之前插入一个stock.seek(0)语句,在if barcode in row:处,将csv.reader()重置为文件的开头,您应该会看到项目填充了数组。你知道吗

相关问题 更多 >