首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将这段代码优化为几行?(Python 3.X)

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

Stack Overflow用户
提问于 2015-11-22 21:53:04
回答 4查看 46关注 0票数 0

我被这个巨大的代码段困住了,必须对其进行优化。问题是,我不能让它工作。

代码语言:javascript
复制
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_value1、B_value1和C_value1在1/6、3/6和5/6之间交替。

A_value2、B_value2和C_value2在1/8、3/8和5/8之间交替。

我尝试过循环,范围等等,但是我的努力都是徒劳的。它可以在单个循环/范围(?)-segment中完成,还是必须拆分为condition1、condition2和condition3。有什么想法吗?

EN

回答 4

Stack Overflow用户

发布于 2015-11-22 22:07:41

这些条件看起来像是任意的菜单选项,众所周知,它们很难清理。但是,您可以做一些事情。由于这些值在所有条件中都是统一的,因此您可以将它们存储在字典中,并根据需要进行查找。将条件存储在list中,然后构建一个值的list

代码语言:javascript
复制
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],依此类推。

票数 1
EN

Stack Overflow用户

发布于 2015-11-22 22:12:58

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

代码语言:javascript
复制
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]
票数 1
EN

Stack Overflow用户

发布于 2015-11-22 22:09:49

哇。是的那太可怕了。对于一个简单的解决方案,你可以用你的赋值创建一个硬编码的数组。它们在每个部分中似乎都是相同的。

代码语言:javascript
复制
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

这只是个想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33855524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档