Python 如何重复一个问题,直到在一系列问题中输入有效信息?

Python 如何重复一个问题,直到在一系列问题中输入有效信息?,python,Python,我想问问题,如果我几乎回答完所有的问题,我在一个字符串中输入一个整数,它会重复问题,而不是像它那样从头开始重复 我试着把每个输入都放在一个循环中,并为无效的输入生成一个else,但这是低效的,而且不起作用 def create_entry(): c = connection.cursor() tables = ["Cpus", "Cores", "Manufactures", "Sockets"] print(tables) while True:

我想问问题,如果我几乎回答完所有的问题,我在一个字符串中输入一个整数,它会重复问题,而不是像它那样从头开始重复

我试着把每个输入都放在一个循环中,并为无效的输入生成一个else,但这是低效的,而且不起作用

def create_entry():
    c = connection.cursor()
    tables = ["Cpus", "Cores", "Manufactures", "Sockets"]
    print(tables)
    while True:
        tables_display = input("What Table Do Want To Make An Entry Too? ")
        append_table_cpu = input("What Is The Name Of Your Cpu You Are Adding? ")
        append_table_cost = input("How Much Does The Cpu You Are Adding Cost? ")
        append_table_speed = input("How Fast Is The Cpu That You Are Adding?, Write Like This 2.00GHz")
        append_table_cores = input("How Many Cores Does Your Cpu Have? ")
        append_table_threads = input("How Many Threads Does The Cpu You Are Adding Have? ")
        append_table_socket = input("What Type Of Socket Does Your Cpu Use? ")
    tuple_insert = (tables_display, append_table_cpu, append_table_cost, append_table_speed, append_table_cores, append_table_threads, append_table_socket)
    sql_query = ("INSERT INTO Cpus (Name,Cost,Speed_GHz,Cores,Threads,Socket) VALUES (?,?,?,?,?,?,?)")
    c.execute(sql_query,tuple_insert)
    results = c.fetchall()
    for i in results:
        print("Id:  Manufactures: ".format(i[0],i[1]))


while True: #Puts Everything In A Loop
    try:        
        option_1 = int(input("What Would You Like To Do To The Cpu Database, 1) Make An Entry, 2) Read The Data Or 3) Delete Data. Type 1, 2, ,3 "))
        if option_1 == 1:
            create_entry()   

    except: 
        print("Please Type A Valid Reply")
    continue    

我希望能够在数据库的字符串列中键入一个整数,或者像不存在的表名那样键入一个无效的答复,然后它会重复我从一开始就遇到的问题。请保留基本答案。

您可以使用正则表达式验证输入。在一段时间内询问,如果输入与正则表达式匹配,则将输入添加到
答案中
并继续询问;如果没有,则显示消息并再次询问(继续循环)。下面是一个示例(代码摘录):


另外,最后一个循环将永远询问,不要忘记添加一个选项来停止询问并中断while循环。

恕我直言,我不确定您是否完全理解while循环(第一个
while True:
循环可能需要一个
中断
条件)。@DanteMarshall什么不起作用?你能说得更具体些吗?
import re
tables = ["Cpus", "Cores", "Manufactures", "Sockets"]
questions = [
  ("What Table Do You Want To Make An Entry To? ", "({})".format("|".join(tables))),
  ("What Is The Name Of Your Cpu You Are Adding? ", ".*"),
  ("How Much Does The Cpu You Are Adding Cost? ", "\d+"),
  ("How Fast Is The Cpu That You Are Adding? (e.g. 2.00GHz) ", "\d+\.?\d*[GMT]?Hz"),
  ("How Many Cores Does Your Cpu Have? ", "\d+"),
  ("How Many Threads Does The Cpu You Are Adding Have? ", "\d+"),
  ("What Type Of Socket Does Your Cpu Use? ", "(DIP|PLCC|Socket\s?[1-8])")
]
answers = []
for question, regex in questions:
  while True:
    answer = input(question)
    if re.fullmatch(regex, answer):
      answers.append(answer)
      break
    print("Invalid value")
sql_query = ("INSERT INTO Cpus (Name,Cost,Speed_GHz,Cores,Threads,Socket) VALUES (?,?,?,?,?,?,?)")
c.execute(sql_query, answers)