如何编写判断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
相关产品推荐
相关产品推荐

