【问题标题】:Python - after a certain if loop repeat a certain part of the codePython - 在某个 if 循环之后重复代码的某个部分
【发布时间】:2013-11-06 07:24:24
【问题描述】:

我正在为一个 CFD 可视化程序编写一个脚本,该程序有一个与 python 的接口。 我创建了一个通用对话框,用户可以在其中输入一些值。现在我想在输入为假时重复该对话框(这只是意味着一个变量大于另一个):

items = []
items.append(['text',ITEM_TEXT,"Automatically save the evaluation in data file(s)\n",""])
items.append(['text',ITEM_TEXT,"Determine the range of timesteps that you want to save:",""])
items.append(['step_begin',ITEM_INT,"Start timestep:","Start timestep",first_step,first_step,timesteps])
items.append(['step_end',ITEM_INT,"End timestep:","End timestep",timesteps,first_step,timesteps])
a = CeiQtGenericDialog(items,None,"Save evaluation","Ok","Cancel")
ret = a.doit()

if (ret > 0):
    for i in a.getValues():
        if (i=='step_begin'):
            begin = a.getValue(i)
        if (i=='step_end'):
            end = a.getValue(i)

    if (begin > end):
        items2 = []
        items2.append(['text',ITEM_TEXT,"Start timestep must be smaller than end timestep!!",""])
        a = CeiQtGenericDialog(items2,None,"Error","Ok","Cancel")
        ret = a.doit()

        if (ret > 0):
            ????

a.getValues() 之前存储了通用对话框的值。如果我想跳回之前的通用对话框,现在最后。换句话说,我想从某一行开始重复代码,这样用户就可以在之前的通用对话框中重复输入“step_begin”和“step_end”,这怎么可能?

编辑/ 如果用户在通用对话框中单击“确定”,则 ret 得到值 1 如果用户单击“取消”,则 ret 得到值 0

【问题讨论】:

  • 请正确缩进您的代码。
  • 对不起,我是 python 新手......但我认为标识是正确的,至少 python 运行代码直到最后一个 if 语句
  • 您不想一直要求用户输入直到值有效吗?
  • 我认为a.getValue 是用户输入的地方。
  • 不抱歉,这可能解释得不好! a.getValues() 之前获取通用对话框的值并将它们提供给我的下一个函数、循环或其他任何东西

标签: python for-loop repeat


【解决方案1】:

我会使用如下的while循环:

begin = 0
end = -1
ret = 1
while (begin > end and ret > 0):
    items = []
    items.append(['text',ITEM_TEXT,"Automatically save the evaluation in data file(s)\n",""])
    items.append(['text',ITEM_TEXT,"Determine the range of timesteps that you want to save:",""])
    items.append(['step_begin',ITEM_INT,"Start timestep:","Start timestep",first_step,first_step,timesteps])
    items.append(['step_end',ITEM_INT,"End timestep:","End timestep",timesteps,first_step,timesteps])
    a = CeiQtGenericDialog(items,None,"Save evaluation","Ok","Cancel")
    ret = a.doit()

    if (ret > 0):
        for i in a.getValues():
            if (i=='step_begin'):
                begin = a.getValue(i)
            if (i=='step_end'):
                end = a.getValue(i)

        if (begin > end):
            items2 = []
            items2.append(['text',ITEM_TEXT,"Start timestep must be smaller than end timestep!!",""])
            a = CeiQtGenericDialog(items2,None,"Error","Ok","Cancel")
            ret = a.doit()

【讨论】:

    【解决方案2】:

    我认为你应该在没有得到预期结果的情况下重复整个这部分

    while True:
        a = CeiQtGenericDialog(items,None,"Save evaluation","Ok","Cancel")
        ret = a.doit()
    
        if (ret < 0): 
            break # if cancel dialog will not proceed data analysis
        for i in a.getValues():
            if (i=='step_begin'):
                begin = a.getValue(i)
            if (i=='step_end'):
                end = a.getValue(i)
    
        if (begin < end):
            break # if everything is ok move out 
        items2 = []
        items2.append(['text',ITEM_TEXT,"Start timestep must be smaller than end timestep!!",""])
        a = CeiQtGenericDialog(items2,None,"Error","Ok","Cancel")
        ret = a.doit()
            if ret < 0:
               break # if cancel dialog will not proceed data analysis
    

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 2017-09-21
      • 2019-10-20
      • 2016-11-29
      • 1970-01-01
      • 2023-03-07
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多