Решение
name = [
"Hetty", "Poppy", "Blue Skies", "Bay View", "Happy Days", "Summer Joy",
"Walkers Rest", "Bertie", "Green Forest Lodge", "Coppice Lodge"
]
cap = [4, 4, 4, 6, 6, 6, 8, 8, 10, 10]
peak = [400, 400, 500, 650, 695, 800, 950, 1050, 1200, 1500]
offpeak = [250, 250, 350, 500, 550, 600, 750, 850, 950, 1150]
onoff = False
cost = 0
print("Here are our avaliable lodges")
[print(f"-{elem}") for elem in name]
desired_room = input("Enter The Name Of The Room You Would Like To Book: " \
).title()
while desired_room.title() not in name:
print("Invalid Room Name Entered Try Again")
desired_room = input("Enter The Name Of The Room You Would Like To" +
" Book:").title()
for i in range(len(name)) :
if desired_room == name [i]:
print("Name: ", name[i])
print("Capacity: ", cap[i])
print("Off Peak Rate: 0" + str(offpeak[i]))
print("Peak Rate: 0" + str(peak[i]))
week = int(input("Enter The Week Your Stay Starts "))
Было бы проще работать с вашим кодом, если бы вы просто немного разбили то, что пытаетесь сделать. Если вы создаете цикл while
, который проверяет, что сначала существует desired_room
, то вы можете войти в следующий цикл, зная, что desired_room
является действительной записью.
Также, преобразовав входные данные в title
вместо lower
, вы можете проверить с помощью name
быстрее, поскольку вы знаете, что все записи имеют формат регистра.
Мысли
В том виде, в каком вы находитесь, вы сопоставляете все индексы для каждого списка, чтобы получить правильную информацию (name[0], cap[0], peak[0],... give us
информация Хетти). Это нормально, но то, что происходит, когда у вас 100 комнат и у вас нет 67-й записи, будет непросто пройтись по каждому списку и проверить индекс 67. Вместо этого вы можете использовать список словарей, чтобы хранить информацию о каждой комнате вместе. Просто пытаясь дать некоторые идеи, добавьте также некоторые идеи форматирования печати,
def print_info(something):
r_width = len(something['name'])
print("-"*15 + "-"*(r_width+1))
print("Name:".ljust(15), f"{something['name']}".rjust(r_width))
print("Capacity:".ljust(15), f"{something['cap']}".rjust(r_width))
print("Off Peak Rate:".ljust(15), f"{something['offpeak']}".rjust(r_width))
print("Peak Rate:".ljust(15), f"{something['peak']}".rjust(r_width))
print("-"*15 + "-"*(r_width+1))
rooms = [
{'name': 'Hetty', 'cap': 4, 'peak': 400, 'offpeak': 250},
{'name': 'Poppy', 'cap': 4, 'peak': 400, 'offpeak': 250},
{'name': 'Blue Skies', 'cap': 4, 'peak': 500, 'offpeak': 350},
{'name': 'Bay View', 'cap': 6, 'peak': 650, 'offpeak': 500},
{'name': 'Happy Days', 'cap': 6, 'peak': 695, 'offpeak': 550},
{'name': 'Summer Joy', 'cap': 6, 'peak': 800, 'offpeak': 600},
{'name': 'Walkers Rest', 'cap': 8, 'peak': 950, 'offpeak': 750},
{'name': 'Bertie', 'cap': 8, 'peak': 1050, 'offpeak': 850},
{'name': 'Green Forest Lodge', 'cap': 10, 'peak': 1200, 'offpeak': 950},
{'name': 'Coppice Lodge', 'cap': 10, 'peak': 1500, 'offpeak': 1050}
]
onoff = False
cost = 0
room_avail = []
for i in rooms:
room_avail.append(i['name'])
print("Here are our avaliable lodges")
for i in rooms:
print(f"-{i['name']}")
desired_room = input("Enter The Name Of The Room You Would Like To Book: " \
).title()
while desired_room not in room_avail:
print("Invalid Room Name Entered Try Again")
desired_room = input("Enter The Name Of The Room You Would Like To" +
" Book:").title()
for i in rooms:
if desired_room == i['name']:
print_info(i)
week = int(input("Enter The Week Your Stay Starts "))
выход
(xenial)vash@localhost:~/python$ python3.7 hotel.py
Here are our avaliable lodges
-Hetty
-Poppy
-Blue Skies
-Bay View
-Happy Days
-Summer Joy
-Walkers Rest
-Bertie
-Green Forest Lodge
-Coppice Lodge
Enter The Name Of The Room You Would Like To Book: coppice lodge
-----------------------------
Name: Coppice Lodge
Capacity: 10
Off Peak Rate: 1050
Peak Rate: 1500
-----------------------------
Enter The Week Your Stay Starts