You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写判断PPI、PIP井位配置序列的if语句?

井位配置逻辑实现问题

我正在编写一段用于布置三种不同配置井位(生产井/黄色、注入井/蓝色)的代码:

  • 第一种配置(生产井后接注入井)逻辑:若number % 2 == 1(奇数)则为生产井,偶数则为注入井。

需要实现另外两种配置的判断逻辑:

  • 生产井生产井注入井(PPI)
  • 生产井注入井生产井(PIP)

附现有代码片段:

for j in range(0,7*int(well_spacing/10),int(well_spacing/10)):
    if well_config=='PIP':
        if (number % 2 == 1): # odd number top of 1A
            if (prod_loc=='top1a'):
                k= 2 # producers in layer 2
            else: # (number % 2 == 1) and prod_loc=='mid1a': # odd number mid of 1A
                k= 4 # producers in layer 4
        else:
            if (number % 2 != 1):  # even number
                if (inj_loc=='top1b'):
                    k= 8  # inj in layer 4
                else: # (number % 2 != 1) and inj_loc=='belowowc': even number belowowc
                    k= 18 # inj in layer 18
    elif  well_config=='PPI':
        if (number % 2 == 1):# odd number top of 1A
            if (prod_loc=='top1a'):
                k= 2 # producers in layer 2
            else:  # (number % 2 == 1) and prod_loc=='mid1a': # odd number mid of 1A  
                k= 4 # producers in layer 4
        else:
            if (number % 2 != 1): 
                if (inj_loc=='top1b'):
                    k= 8  # inj in layer 4
                else: # (number % 2 != 1) and inj_loc=='belowowc': even number belowowc
                    k= 18 # inj in layer 18
    elif  well_config=='PIP':
            if (number % 2 == 1): # odd number top of 1A
                if (prod_loc=='top1a'):   
                    k= 2 # producers in layer 2
                else: # (number % 2 == 1) and prod_loc=='mid1a': # odd number mid of 1A
                    k= 4 # producers in layer 4
            else:
                if (number % 2 != 1):
                    if (inj_loc=='top1b'):
                        k= 8  # inj in layer 4
                    else: # (number % 2 != 1) and inj_loc=='belowowc': even number belowowc
                        k= 18 # inj in layer 18                                
    number += 1
    i = int(well_spacing/10/2)
    well_locations.append((i,j,k,int(well_length/10))

解决方案

1. PPI(生产井-生产井-注入井)逻辑

以3为周期循环判断:

  • 当number % 3 == 1或number % 3 == 2时,判定为生产井
  • 当number % 3 == 0时,判定为注入井

对应代码调整:

elif well_config=='PPI':
    remainder = number % 3
    # 第1、2个是生产井,第3个是注入井,循环往复
    if remainder == 1 or remainder == 2:
        if prod_loc=='top1a':
            k= 2 # 生产井位于第2层
        else:
            k= 4 # 生产井位于第4层
    else:
        if inj_loc=='top1b':
            k= 8  # 注入井位于第4层
        else:
            k= 18 # 注入井位于第18层

2. PIP(生产井-注入井-生产井)逻辑

同样以3为周期循环判断:

  • 当number % 3 == 1或number % 3 == 0时,判定为生产井
  • 当number % 3 == 2时,判定为注入井

对应代码调整:

elif well_config=='PIP':
    remainder = number % 3
    # 第1、3个是生产井,第2个是注入井,循环往复
    if remainder == 1 or remainder == 0:
        if prod_loc=='top1a':
            k= 2 # 生产井位于第2层
        else:
            k= 4 # 生产井位于第4层
    else:
        if inj_loc=='top1b':
            k= 8  # 注入井位于第4层
        else:
            k= 18 # 注入井位于第18层

额外优化建议

  • 原代码重复出现两次well_config=='PIP'的判断分支,建议合并为一个,消除冗余
  • 原代码else分支内的if (number % 2 != 1)属于多余判断,进入else时已满足该条件,可直接删除

内容的提问来源于stack exchange,提问作者Munira Hadhrami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:12:51