需要帮助打印字典和;添加用户提示以获取嵌套列表值[Python]

需要帮助打印字典和;添加用户提示以获取嵌套列表值[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],["/",

我目前正在使用一个名为generate_qns_from_list()的函数。这个函数应该包含一个列表。此函数应将列表转换为字典列表。每本字典都有两个键——“qns”和“ans”。“qns”键的值将是从输入列表中的列表中获取的整数字符串。整数用输入列表中的字符“+”、“-”、“x”、“/”分隔,如下所示:

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