需要帮助打印字典和;添加用户提示以获取嵌套列表值[Python]
我目前正在使用一个名为generate_qns_from_list()的函数。这个函数应该包含一个列表。此函数应将列表转换为字典列表。每本字典都有两个键——“qns”和“ans”。“qns”键的值将是从输入列表中的列表中获取的整数字符串。整数用输入列表中的字符“+”、“-”、“x”、“/”分隔,如下所示:需要帮助打印字典和;添加用户提示以获取嵌套列表值[Python],python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,我目前正在使用一个名为generate_qns_from_list()的函数。这个函数应该包含一个列表。此函数应将列表转换为字典列表。每本字典都有两个键——“qns”和“ans”。“qns”键的值将是从输入列表中的列表中获取的整数字符串。整数用输入列表中的字符“+”、“-”、“x”、“/”分隔,如下所示: input_list = [["+",1,3,3], ["-",2,5,-1], ["x",3,2],["/",
input_list = [["+",1,3,3], ["-",2,5,-1],
["x",3,2],["/",12,3,2],["x",0,23],["+",1,2,3,4]]
generate_qns_from_list(input_list)
# output
[{"qns": "1 + 3 + 3", "ans": 7},
{"qns": "2 - 5 - -1", "ans": -2},
{"qns": "3 x 2", "ans": 6},
{"qns": "12 / 3 / 2", "ans": 2},
{"qns": "0 x 23", "ans": 0},
{"qns": "1 + 2 + 3 + 4", "ans": 10}]
这是我的代码:
import math
def generate_qns_from_list(lst):
qns_list = []
for sub_list in lst:
operator, *numbers = sub_list
d = {}
qns = str(operator).join(map(str, sub_list))
d["qns"] = f"{qns}"
ans = math.prod(sub_list)
d["ans"] = ans
qns_list.append(d)
return qns_list
我一直得到这样的输出:
[{'qns': '++1+3+3', 'ans': '+++++++++'},
{'qns': '--2-5--1', 'ans': ''},
{'qns': 'xx3x2', 'ans': 'xxxxxx'},
{'qns': '//12/3/2',
'ans': '////////////////////////////////////////////////////////////////////////'},
{'qns': 'xx0x23', 'ans': ''},
{'qns': '++1+2+3+4', 'ans': '++++++++++++++++++++++++'}]
问题是,我试图拆分列表以从输入列表中获取字符“+”和整数,从而形成一个公式
有几种方法可以做到这一点。您可以使用:
或者您可以使用:
你可以试试这个
input_list = [["+",1,3,3], ["-",2,5,-1],
["x",3,2],["/",12,3,2],["x",0,23],["+",1,2,3,4]]
def generate_qns_from_list(l=input_list):
for i in l:
operation = i.pop(0)
if operation == "x":
operation_to_do = "*"
else:
operation_to_do = operation
query = f" {operation_to_do} ".join(map(str, i))
print({"qns": query ,"ans": eval(query)})
这并不适用于所有查询,但这是一个开始,应该可以:
def generate_qns_from_list(inp_list):
placeholder = []
for i in range(len(inp_list)):
numbers = list(map(str, inp_list[i][1:])) # a list of the numbers (as strings)
placeholder.append({"qns": (" " + inp_list[i][0] + " ").join(numbers)}) # make the questions
placeholder[i]["ans"] = eval(inp_list[i][0].join(numbers).replace("x", "*")) # make the answers
return placeholder
你能解释一下“如何添加用户输入功能以获得输入列表的数字”的意思吗?我试图获得页面中显示的输出。问题是,我试图拆分列表以从输入列表中获取字符“+”和整数,从而形成一个公式。请注意,通常情况下,我会建议使用,但这是可以的。如果您知道您正在做什么,并且有足够的检查,那么如果您只使用代码,则使用
eval
,可能是可以的,但是如果input\u list
来自其他地方(例如,用户在网站上输入),那么总有办法绕过您编写的检查(请参阅Ned Batchelder的链接文章)。
input_list = [["+",1,3,3], ["-",2,5,-1],
["x",3,2],["/",12,3,2],["x",0,23],["+",1,2,3,4]]
def generate_qns_from_list(l=input_list):
for i in l:
operation = i.pop(0)
if operation == "x":
operation_to_do = "*"
else:
operation_to_do = operation
query = f" {operation_to_do} ".join(map(str, i))
print({"qns": query ,"ans": eval(query)})
{'qns': '1 + 3 + 3', 'ans': 7}
{'qns': '2 - 5 - -1', 'ans': -2}
{'qns': '3 * 2', 'ans': 6}
{'qns': '12 / 3 / 2', 'ans': 2.0}
{'qns': '0 * 23', 'ans': 0}
{'qns': '1 + 2 + 3 + 4', 'ans': 10}
def generate_qns_from_list(inp_list):
placeholder = []
for i in range(len(inp_list)):
numbers = list(map(str, inp_list[i][1:])) # a list of the numbers (as strings)
placeholder.append({"qns": (" " + inp_list[i][0] + " ").join(numbers)}) # make the questions
placeholder[i]["ans"] = eval(inp_list[i][0].join(numbers).replace("x", "*")) # make the answers
return placeholder