【问题标题】:error list indices must be integers or slices, not str in flask错误列表索引必须是整数或切片,而不是烧瓶中的 str
【发布时间】:2021-07-09 13:59:52
【问题描述】:

当我想检查一个随机问题的答案时,flask 调试器会显示该错误list indices must be integers or slices, not str

我的代码

from flask import Flask, render_template, flash, request, redirect, url_for
import random

app = Flask(__name__)
data = [{'q':'question text 1', 'ans':'a1', 'idsh':101}, {'q':'question text 2', 'ans':'a2', 'idsh':102}, {'q':'question text 3', 'ans':'a3', 'idsh':103}, {'q':'question text 4', 'ans':'a4', 'idsh':104}, ]

@app.route("/")
def home():
    return render_template('index.html', data = random.choice(data))


@app.route('/anss')
def answerd():
    if request.args.get('ans') == data['ans']:
        return "yes"
    else:
        return "no"

if __name__ == '__main__':
    app.run()

【问题讨论】:

    标签: list dictionary flask random


    【解决方案1】:
    data = [{'q':'question text 1', 'ans':'a1', 'idsh':101}, ...]
    

    创建一个列表。列表只能通过其索引访问。您已经创建了一个包含字典的列表。所以,data[0] 将指向{'q':'question text 1', 'ans':'a1', 'idsh':101}。你可以通过data[0]['ans']得到答案。

    路由answerd() 不知道它应该验证哪个问题的答案。

    您可以遍历列表中的所有字典并检查是否data[i]['idsh'] == request.args.get('idsh') 或者您需要以不同方式存储数据,例如像这样(假设idsh 是唯一的问题ID):

    data = {101: 'a1', ...}

    然后你可以像这样检查正确的答案:

    if request.args.get('ans') == data[request.args.get('idsh')]:
    

    请注意,在像这样使用它们之前,您应该检查参数是否有效。

    【讨论】:

    • 如你所见,这是一个网页游戏,它选择随机数来显示来自data 的随机问题,我在你的帮助下解决了这个问题,但现在我无法为另一个函数定义值喜欢answerd。你能再帮我一次吗:)
    • @Hamedmvd 我在回答中犯了一个错误并更正了它。 data = {101: 'a1', ...} 仅存储您身份的答案。如果要存储整个dicts,则需要与ans-key进行比较,否则可以如上图处理。如果您还有其他问题,请随时发布新问题。我会定期查看flask-tag。
    猜你喜欢
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2015-12-09
    • 2021-09-01
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多