这是实现字典的正确方法吗?

2024-09-28 03:22:32 发布

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

       f=open('food.dat','w+')
       rates=0
       rate=0
       print"Menu is:"
       print"""   1.Starters
       2.Main Courses
       3.Snacks
       4.Drinks
       5.Desserts"""
       hotel_food1={1:'Starters',
       2:'Main Courses',
       3:'Snacks',
       4:'Drinks',
       5:'Desserts'}
       while True:
           food=input("Enter the food type:")
           if(hotel_food1.has_key(food)==1):
                     print"Menu is:"
                     print"""1.Salmon Devilled Eggs
                     2.Baked Parika Cheese
                     3.Ricotta and Parmesan Fritters
                     4.Traditional Welsh Cawl
                     5.Summer Ratatouille Salad"""
                     hotel_starter={1:'Salmon Devilled Eggs',
                      2:'Baked Parika Cheese',
                      3:'Ricotta and Parmesan Fritters',
                      4:'Traditional Welsh Cawl',
                      5:'Summer Ratatouille Salad'}
                     fd=input("ENter the food type")
                     if(hotel_starter.has_key(fd)==1):
                                               rate=rate+234
                     elif(hotel_starter.has_key(fd)==2):
                                          rate=rate+345
                     elif(hotel_starter.has_key(fd)==3):
                                       rate=rate+200
                     elif(hotel_starter.has_key(fd)==4):
                                       rate=rate+110
                     elif(hotel_starter.has_key(fd)==5):
                                        rate=rate+334
                     ch=raw_input("Do you want to continue? yes/no??")
                     if(ch=='no'):
                              break
       rates=rates+rate

       f.write(str(rates))


       f.seek(0,0)
       x=f.read()
       print x

       f.close()

您好,在上面的程序中,当我将食物输入为1,fd输入为1时,我必须得到值234印刷品。但是当我运行这个程序时,我得到的值是0。压痕有问题吗?字典的使用是否正确??请帮帮我!谢谢您!你知道吗


Tags: keyinputifratefoodishotelmenu
1条回答
网友
1楼 · 发布于 2024-09-28 03:22:32

has_key返回布尔值,即==1,因此只要用户输入字典中存在的键,第一个测试将始终计算true,因为has_key(fd)==true和True == 1。所以你需要修正你的逻辑。你知道吗

不过,我认为您的做法是错误的,因为当您可以通过嵌套字典来更恰当地处理这个问题时,它很快就变成了if/elif/else语句的意大利面代码。这也有助于提高可读性。你知道吗

您可以查看正确初始化和嵌套词典,并将速率作为dict的一部分。这只是一个示例:

hotel_starters = {1:{'item':'Salmon Devilled Eggs', 'rate':234},
                 2:{'item':'Baked Parika Cheese', 'rate':345},
                 3:{'item':'Ricotta and Parmesan Fritters', 'rate':'456'}
                 }
hotel_main_courses = {1:{'item':'Filet Mignon', 'rate':678},
                 2:{'item':'Vegetarian Lasagna', 'rate':567},
                 3:{'item':'Halibut', 'rate':'890'}
                 }
hotel_menu = {1:hotel_starters,
             2: hotel_main_courses}  

使用这种数据结构,您可以轻松地按键查询:

hotel_menu[1] # returns the entire 'hotel_starters' dictionary

hotel_menu[1][1]  # returns the dictionary for hotel_starters[1]

hotel_menu[1][1]['rate'] # returns the rate associated with that item, etc.

此外,要打印菜单:

for k, v in hotel_menu['starters'].items():
    print k, v['item'], v['rate']                   

所以在一个例子中,你可以做:

# initialize your menu dictionaries
hotel_starters = {1:{'item':'Salmon Devilled Eggs', 'rate':234},
                 2:{'item':'Baked Parika Cheese', 'rate':345},
                 3:{'item':'Ricotta and Parmesan Fritters', 'rate':'456'}
                 }
hotel_main_courses = {1:{'item':'Filet Mignon', 'rate':678},
                 2:{'item':'Vegetarian Lasagna', 'rate':567},
                 3:{'item':'Halibut', 'rate':'890'}
                 }
hotel_menu = {1:hotel_starters,
             2: hotel_main_courses}  


rates=0
menu = input('1 for starters, 2 for main courses:')
if menu in hotel_menu:
    print 'menu is:\n'
    for k, v in hotel_menu[menu].items():
        print k, v['item'], v['rate'] 
    food = input('enter your food item:\n')
    if food in hotel_menu[menu]:
        rates += hotel_menu[menu][food]['rate'] 

相关问题 更多 >

    热门问题