import pyfiglet
import csv
ascii_banner = pyfiglet.figlet_format("Menu Program .")
print(ascii_banner)
start = str(input("1. Process an order. 2. View previous orders. 3. Edit Menu \nOption: "))
if start == "1":
print("Welcome")
with open('menu.csv') as f:
reader = csv.reader(f)
for row in reader:
print(row)
fid = str(input("What is the food ID?"))
if fid == row[1]:
print(row[2])
if fid != row[1]:
print("That is not an id.")
我的csv文件:
foodname,fid,price
All day large,1,Five Pounds Fifty
All day small,2,Three Pounds Fifty
Hot Dog,3,Three Pounds
Burger,4,Four Pounds
Cheese Burger,5,Four Pound Twenty Five
Chicken goujons,6,Three Pounds Fifty
Fries,7,One Pound Seventy Five
Salad,8,Two Pound Twenty
Milkshake,9,Two Pound Twenty
Soft Drinks,10,One Pound Thirty
Still water,11,90 Pence
Sparkling water,12,90 Pence
当我运行它的时候,如果输入是12,但是任何其他的数字“不是一个id”我觉得很奇怪,程序就会工作。 有人知道这是为什么吗?我怎样才能解决它
让我们将
print(row)
放在while
循环之后fid
变量之前。它打印什么?它打印出:这是因为在
while
循环中,您只逐个打印了row
的内容,但没有保存它们,所以只使用了最后一个那你猜对了。这就是为什么它只有在输入
12
时才起作用解决这个问题的最简单方法是将
reader
转换为list
,并将其放入row
变量中。您可以这样轻松地完成:现在,如果您
print(row)
,您将得到一个2D list
:这意味着您的
fid
现在在row[1-12][1]
上,每menu
项和row[1-12][2]
等的价格(1-12
因为0
是您的列名foodname、fid和price)要首先从输入中打印价格,请从输入中获取
fid
:正如您编写的那样,返回一个
str
并且我们想要int
,所以让我们这样做:现在谈谈主要逻辑:
首先,我们检查}。如果条件满足,则我们在
fid > 0
,因为您的列名在这里,然后检查fid
是否在范围内,以避免index out of range
{fid
位置打印row
,并在您的csv
中打印其位于2
位置的价格所以在最后你的代码应该是这样的
为了很好地打印项目,我将添加
print('\n'.join(map(' | '.join, row)))
而不是print(row)
,但我将把它留给您请看一下CSV File Reading and Writing in Python,以后先用Python docs解决你的问题,如果你真的不能解决你的问题,把它贴在这里
相关问题 更多 >
编程相关推荐