我有一个包含各种项目的字典列表,例如“版本 ID”和“找到的扇区”。我正在尝试编写一个程序来根据用户在从字典列表中的嵌套项目集中选取值时所做的选择来显示字典。
理想情况下,我希望用户能够选择版本、扇区和时间,然后程序应填充与所选条件匹配的项目列表,然后随机选择并显示其中一个项目给用户。
import random from randint
selected_version = "Version 1"
selected_sector = "Sector One"
selected_time = "Daylight"
selected_item = None
item_one = {
"Version ID": ["v.1"],
"Name": "Item One",
"Sector Found": {"Sector 1": {"Daylight": 100}}
def item_locator(version, sector, time):
available_items = []
time_items = []
time_items.append(item_one)
if version == "Version 1":
if sector == "Sector One":
if time == "Daylight":
for i in time_items:
for k, v in i:
if k == "Daylight":
available_items.extend([i] * v)
item_choice = randint(0, 99)
selected_item = available_items.index(item_choice)
return selected_item
item_locator(selected_version, selected_sector, selector_time)
print(selected_item)
这些功能似乎单独工作得很好,但是当尝试运行整个程序时,除了items_by_version
之外,列表似乎保持为空,我尝试过的任何操作都没有改变这一点。我可以就我可能缺少的内容获得一些建议吗?我尝试过在整个过程的各个阶段打印列表,但是在
items_by_version
之后,它们最终都变成了空列表。我收到“ValueError: 16(或
item_choice
的随机值)不在列表中”。
item_locator
函数的作用域和 return 语句。我强烈建议在这里阅读有关范围的内容 →
https://www.w3schools.com/python/python_scope.asp
您正在函数selected_item
中返回
item_locator
变量,但没有将其分配给任何内容。如果您有一个返回某些内容的函数,则需要将某些内容分配给某些内容。
selected_item = item_locator(selected_version, selected_sector, selector_time)
并且还稍微改变一下功能:
def item_locator(version, sector, time):
available_items = []
time_items = []
time_items.append(item_one)
if version == "Version 1":
if sector == "Sector One":
if time == "Daylight":
for i in time_items:
for k, v in i:
if k == "Daylight":
available_items.extend([i] * v)
item_choice = randint(0, 99)
return available_items.index(item_choice)
注意:这只是阅读你的代码,我没有测试过。