【问题标题】:Is this the correct way to implement dictionary?这是实现字典的正确方法吗?
【发布时间】:2015-11-11 19:17:28
【问题描述】:
       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。缩进有问题吗?字典是否正确执行?请帮忙!谢谢!

【问题讨论】:

  • 使用哪个版本的python?您确定输入将int 传递给fd
  • 我使用的是 python 2.7 版本。
  • 我得到的打印值为 234:i.imgur.com/7uMSdCh.png
  • 你能告诉我缩进,因为它不适用于我的。
  • 我已经复制了您的代码完全,正如您提供的那样,并通过控制台/命令提示符运行它。没有缩进错误。

标签: python file if-statement dictionary output


【解决方案1】:

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

不过,我认为您的做法是错误的,因为当您可以通过嵌套字典更适当地处理此问题时,它会迅速演变为 if/elif/else 语句的意大利面条式代码。这也有助于提高可读性。

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

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'] 

【讨论】:

    猜你喜欢
    • 2012-11-11
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多