2017-04-01 38 views
0

我在Python中制作电影预订系统,并且无法保存已修改的数组,因此它显示座位已被占用,我正在使用它来创建数组。我想重新使用已经被修改的数组

def seats(): 
    rows = "ABCDE" 
    columns = range(0, 10) 
    x = [{ltr + str(y): 'Empty' for ltr in rows} for y in columns] 
    pprint(x) 
    res = str(raw_input("Pick a seat ")) 
    if res[1] == '0': 
     if x[0][res] == 'Taken': 
      print ('Seat taken') 
    else: 
     x[0][res] = 'Taken' 

请注意,我不是那么有经验,所以任何提示,以使代码更清洁也将被评价。客户应该能够购买多个座位,我已经整理出来了,但是如果我返回到菜单,然后返回到座位,所有'带座位'座位都会再次显示为'空'。

+0

你带*名单工作*。我不确定你问的是什么问题,但是我怀疑是因为你的函数只有局部变量,并且没有返回任何东西,所以你看不到任何东西效果。 –

+2

在**座位**功能之外初始化** x **,并将其作为参数传入 –

+1

另外,在我看来,您只能使用第一行,不是? –

回答

0

也许你想把它放在一个类中,并将x定义为属性。我改变了很多,不太确定这是否是你想要的。例如,我将x更名为self.seats,并将其结构更改为仅dict而不是listdict,因为这对我来说似乎更容易。

#!/usr/bin/env python3 
class Cinema(object): 

    def __init__(self, rows, columns): 
     self.rows = rows 
     self.columns = columns 
     # True: seat is free, seat is availbale 
     self.seats = {"{row}{col}".format(row=row, col=col): True for row in rows for col in columns} 

    def ask_for_seat(self): 
     print("The following seats are still available:") 
     self.print_free_seats() 
     seat = input("Pick a seat: ") 
     if seat in self.seats: 
      if self.seats[seat]: 
       print("Thank you. We are reserving seat {} for you.".format(seat)) 
       self.seats[seat] = False 
       return seat 
      else: 
       print("Seat {} is already reserved. Please choose another one.".format(seat)) 
       return self.ask_for_seat() 
     else: 
      print("Sorry, this cinema does not have a seat {}. Please choose another one.".format(seat)) 
      return self.ask_for_seat() 

    def print_free_seats(self): 
     for row in self.rows: 
      for col in self.columns: 
       seat = "{row}{col}".format(row=row, col=col) 
       if self.seats[seat]: 
        print(seat, end=" ") 
       else: 
        print(" "*len(seat), end=" ") 
      print() 


if __name__=='__main__': 
    c = Cinema("ABCDE", range(0, 10)) 
    while True: 
     c.ask_for_seat() 

请注意,这是Python 3的代码,并且不使用Python 2.工作