Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 检查用户是否已经投票,即使他们没有';T_Python 3.x_Sqlite_Voting_Voting System - Fatal编程技术网

Python 3.x 检查用户是否已经投票,即使他们没有';T

Python 3.x 检查用户是否已经投票,即使他们没有';T,python-3.x,sqlite,voting,voting-system,Python 3.x,Sqlite,Voting,Voting System,用户输入他们的userid,然后投票“是”或“否”,但代码返回true,即使用户没有投票,if语句也会执行 例如,执行userid=1和投票,userid=1和投票。第二次userid尝试投票时,它会说您已经投票了,但是如果您在第三次迭代中使用userid=2,它会说您已经投票了,这是不正确的 import sqlite3 conn = sqlite3.connect(":memory:") cur = conn.cursor() with conn: cur.execute("CR

用户输入他们的userid,然后投票“是”或“否”,但代码返回true,即使用户没有投票,if语句也会执行

例如,执行userid=1和投票,userid=1和投票。第二次userid尝试投票时,它会说您已经投票了,但是如果您在第三次迭代中使用userid=2,它会说您已经投票了,这是不正确的

import sqlite3

conn = sqlite3.connect(":memory:")
cur = conn.cursor()

with conn:
    cur.execute("CREATE TABLE users(votes, userid INTEGER)")

for i in range(3):
    userid = input("Enter your user id: ")
    votes = input("Vote yes or no: ")
    with conn:
        cur.execute("SELECT * FROM users WHERE votes = 'yes' OR 'no' AND userid = ?", (userid,))
        user_voted = cur.fetchall()

        if user_voted:
            print("You have already voted")

        else:
            cur.execute("INSERT into users(userid, votes) VALUES(?, ?)", (userid, votes))
            print(cur.fetchall())

with conn:
    cur.execute("SELECT * FROM users")
    print(cur.fetchall())
没有错误消息,只是产生了错误的结果

其中投票=‘是’或‘否’

如果您不想重复提到
投票
列, 然后将其表述为:

WHERE votes in ('yes', 'no')

正确格式化您的代码将使其更易于阅读…您应该查找
以及
的优先级。。。为什么你只是把字符串
“no”
放在那里?这总是会是错误的,因为当转换为一个数字时,它会变成
0
。重点是什么?我试着把它改成使用数字1和2(而不是是和否),得到了同样的结果。谢谢。所以我假设在使用WHERE语句时,我不应该放置=变量或变量。我应该使用in语句,然后将变量放在括号内