Каждому пользователю выделено пространство, и каждый объект имеет определенный размер.
Я пытаясь заполнить список на основе редкости объекта и отображать только те элементы, размер которых равен или меньше отведенного пользователю пространства.
Однако, как только пользователь выбрал объект, и список обновляется только теми объектами, которые находятся в пределах оставшегося диапазона размеров, код для отображения списка больше не работает, и появляется следующая ошибка:
AttributeError: ' объект str' не имеет атрибута item
Код: Выделить всё
user_stage1_objects = []
selected_objects_size = 0
timeframe1 = {
"Option1": {
"Common": [{"Item Name": "A1", "Size": 3}, {"Item Name": "A2", "Size": 4}],
"Uncommon": [{"Item Name": "B1", "Size": 2}, {"Item Name": "B2", "Size": 1}]
},
"Option2": {
"Common": [{"Item Name": "C1", "Size": 3}, {"Item Name": "C2", "Size": 1}],
"Uncommon": [{"Item Name": "D1", "Size": 2}, {"Item Name": "D2", "Size": 4}]
}
}
timeframe2 = {
"Option1": {
"Common": [{"Item Name": "A1", "Size": 3}, {"Item Name": "A3", "Size": 2}],
"Uncommon": [{"Item Name": "B1", "Size": 2}, {"Item Name": "B2", "Size": 1}]
},
"Option2": {
"Common": [{"Item Name": "C2", "Size": 1}, {"Item Name": "C3", "Size": 3}],
"Uncommon": [{"Item Name": "D1", "Size": 2}, {"Item Name": "D2", "Size": 4}]
}
}
def stage1_selection():
global max_amount_limit, selected_objects_size, available_objects_list, user_stage1_objects
objects_chosen = None
user_stage1_objects = []
available_objects_list = []
timeframe_choice = input("""
Select Timeframe1 or Timeframe2
1 - Timeframe1
2 - Timeframe2
> """)
if timeframe_choice == "1":
chosen_timeframe = timeframe1
elif timeframe_choice == "2":
chosen_timeframe = timeframe2
else:
print("Not a valid choice, try again")
while objects_chosen is None:
if (max_amount_limit - selected_objects_size) > 3:
if chosen_timeframe == timeframe1:
available_objects_list = timeframe1["Option1"]["Common"]
elif chosen_timeframe == timeframe2:
available_objects_list = timeframe2["Option2"]["Common"]
elif (max_amount_limit - selected_objects_size) < 4:
available_objects_list = []
if chosen_timeframe == timeframe1:
available_objects_list = {
options: {
rarity: [
item for item in items
if item["Size"] < 4
]
for rarity, items in options.items()
if rarity == "Common"
}
for option, options in timeframe1.items()
if option == "Option1"
}
elif chosen_timeframe == timeframe2:
available_objects_list = {
options: {
rarity: [
item for item in items
if item["Size"] < 4
]
for rarity, items in options.items()
if rarity == "Common"
}
for option, options in timeframe2.items()
if option == "Option1"
}
elif (max_amount_limit - selected_objects_size) < 3:
available_objects_list = []
if chosen_timeframe == timeframe1:
available_objects_list = {
options: {
rarity: [
item for item in items
if item["Size"] < 3
]
for rarity, items in options.items()
if rarity == "Common"
}
for option, options in timeframe1.items()
if option == "Option1"
}
elif chosen_timeframe == timeframe2:
available_objects_list = {
options: {
rarity: [
item for item in items
if item["Size"] < 3
]
for rarity, items in options.items()
if rarity == "Common"
}
for option, options in timeframe2.items()
if option == "Option1"
}
object_availability = available_objects_list
object_itr = 0
for i in object_availability:
print(object_itr, end=' - ')
for key, val in i.items():
print(key, ": ", val, end='\n ')
print()
object_itr = object_itr+1
chosen_object_index = input("> ")
chosen_object_index = int(chosen_object_index)
user_stage1_objects.append(object_availability[chosen_object_index]["Item Name"])
selected_objects_size = selected_objects_size + object_availability[chosen_object_index]["Size"]
if max_amount_limit == selected_objects_size:
objects_chosen = "Done"
else:
continue_object_selection = input("""
You have """+str(int(max_amount_limit - selected_objects_size))+""" amounts left.
Do you want to select more objects from Option1, or move on to Option2?
1 - Continue with Option1
2 - Move on to Option2
>""")
if continue_object_selection == "1":
objects_chosen is None
elif continue_object_selection == "2":
objects_chosen - "Done"
else:
print("Not a valid choice, try again")
def fill_chosen_objects():
global max_amount_limit, selected_objects_size, available_objects_list, user_stage1_objects
max_amount_limit = 5
selecting_objects = input("""
Would you like to see available choices from Option1?
1 - Yes
2 - No
> """)
if selecting_objects == "1":
stage1_selection()
elif selecting_objects == "2":
objects_chosen = "Done"
return user_stage1_objects
fill_chosen_objects()
По сути, пользователь никогда не должен видеть объекты размером больше, чем тот, который у него остался после учета max_amount_limit — накопленных элементов, которые он уже выбрал.
Я вижу список объектов с первого раза, но он вылетает, когда я пытаюсь просмотреть список и выбрать второй объект.
The AttributeError: 'str ' у объекта нет атрибута 'items', в этой строке появляется ошибка
Код: Выделить всё
for key, val in i.items():
Подробнее здесь: https://stackoverflow.com/questions/781 ... d-on-value