如何将这段代码优化为几行?(Python 3.X版)

2024-09-30 22:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我被这段庞大的代码困住了,必须对它进行优化。问题是,我不能让它工作。你知道吗

if condition1 == 0:
    A_value1 = (1/6)
    A_value2 = (1/8)
if condition1 == 1:
    A_value1 = (1/2)
    A_value2 = (1/8)
if condition1 == 2:
    A_value1 = (5/6)
    A_value2 = (1/8)
if condition1 == 3:
    A_value1 = (1/6)
    A_value2 = (3/8)
if condition1 == 4:
    A_value1 = (1/2)
    A_value2 = (3/8)
if condition1 == 5:
    A_value1 = (5/6)
    A_value2 = (3/8)
if condition1 == 6:
    A_value1 = (1/6)
    A_value2 = (5/8)
if condition1 == 7:
    A_value1 = (1/2)
    A_value2 = (5/8)
if condition1 == 8:
    A_value1 = (5/6)
    A_value2 = (5/8)

if condition2 == 0:
    B_value1 = (1/6)
    B_value2 = (1/8)
if condition2 == 1:
    B_value1 = (1/2)
    B_value2 = (1/8)
if condition2 == 2:
    B_value1 = (5/6)
    B_value2 = (1/8)
if condition2 == 3:
    B_value1 = (1/6)
    B_value2 = (3/8)
if condition2 == 4:
    B_value1 = (1/2)
    B_value2 = (3/8)
if condition2 == 5:
    B_value1 = (5/6)
    B_value2 = (3/8)
if condition2 == 6:
    B_value1 = (1/6)
    B_value2 = (5/8)
if condition2 == 7:
    B_value1 = (1/2)
    B_value2 = (5/8)
if condition2 == 8:
    B_value1 = (5/6)
    B_value2 = (5/8)

if condition3 == 0:
    C_value1 = (1/6)
    C_value2 = (1/8)
if condition3 == 1:
    C_value1 = (1/2)
    C_value2 = (1/8)
if condition3 == 2:
    C_value1 = (5/6)
    C_value2 = (1/8)
if condition3 == 3:
    C_value1 = (1/6)
    C_value2 = (3/8)
if condition3 == 4:
    C_value1 = (1/2)
    C_value2 = (3/8)
if condition3 == 5:
    C_value1 = (5/6)
    C_value2 = (3/8)
if condition3 == 6:
    C_value1 = (1/6)
    C_value2 = (5/8)
if condition3 == 7:
    C_value1 = (1/2)
    C_value2 = (5/8)
if condition3 == 8:
    C_value1 = (5/6)
    C_value2 = (5/8)

A\值1、B\值1和C\值1在1/6、3/6和5/6之间交替。你知道吗

A\值2、B\值2和C\值2在1/8、3/8和5/8之间交替。你知道吗

我试过打圈、打靶场等,但我的努力都白费了。是否可以在单个循环/范围内完成(?)-段或必须将其拆分为条件1、条件2和条件3。有什么想法吗?你知道吗


Tags: 代码if条件value1value2condition2condition3condition1
3条回答

哇哦。是的,那太可怕了。对于一个简单的解决方案,如何使用赋值创建一个硬编码数组。每一部分似乎都一样。你知道吗

values = [[(1/6), (1/8)], [(1/2), (1/8)], [(5/6), (5/8)] ....]

那么c_value1就是values[condition3][0]c_value2就是values[condition3][1]等等

可以使用condition value攻击array,如index。你知道吗

只是个主意。你知道吗

您可以引入可能值的列表,并根据条件除以3的余数从值列表中获取A_value1等,以及根据条件除以3的整数结果获取A_value2

values1 = [1/6, 3/6, 5/6]
values2 = [1/8, 3/8, 5/8]
A_value1 = values1[condition1 % 3]
A_value2 = values2[condition1 // 3]
B_value1 = values1[condition2 % 3]
B_value2 = values2[condition2 // 3]
C_value1 = values1[condition3 % 3]
C_value2 = values2[condition3 // 3]

这些条件看起来像是任意的菜单选项,这是出了名的难以整理。但是,你可以做一些事情。由于这些值在不同条件下是一致的,因此可以将它们存储在字典中,并根据需要进行查找。将条件存储在list中,然后建立list个值。你知道吗

c = [condition1, condition2, condition3]
vals = []
lookup = {0:(1/6, 1/8), 1:(1/2, 1/8), 2:(5/6, 1/8), 3:(1/6, 3/8), 4:(1/2, 3/8),
          5:(5/6, 3/8), 6:(1/6, 5/8), 7:(1/2, 5/8), 8:(5/6, 5/8)

for i in range(3):
    vals.append(lookup[condition[i]])

然后将A_value1称为vals[0][0]C_value2称为vals[2][1],依此类推。你知道吗

相关问题 更多 >