我正在尝试创建一个像商店一样工作的程序,但出于某种原因,当我想要它时,它不会将任何内容放入数组中。
我使用的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!')
有谁知道如何解决这个问题?
答案 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:
重置为文件的开头,您应该看到项目填满你的阵列。