LR = int(raw_input())
RPL = []
c1 = []
c2 = []
L1a = [8, 9, 14, 13, 12]
L2a =[9, 12, 14, 10, 8]
OM = [9, 10]
L3a = [26]
L1b = [27, 32, 26]
L2b = [30, 27, 32, 28, 31]
L3b = [31, 30, 26]
def I():
for i in L1b:
for j in L2b:
for k in L3b:
n = i * j * k
c1.append(n)
for i in OM:
for j in L1a:
for k in L2a:
n = i * j * k
c2.append(n)
def II():
for i in c1:
for j in c2:
x = (i / j) * LR
RPL.append(x)
在我的程序中,我需要循环变量I,j,k从'I'函数打印到我的'II'函数中,以显示用于创建x的组合。我尝试了二维数组,但效果不佳。那么有没有什么简单的选择来解决这个问题呢?在
我认为下面的脚本实现了您要做的:
这将显示
^{pr2}$LR
的LR
的以下类型的结果:每个置换都存储为一个元组,其结果是乘法。然后在计算
RPL
值时使用该值。在您还可以按如下格式格式化
RPL
,以显示哪些排列产生了每个结果:以以下形式给出输出:
该脚本使用Python}的值,但作为一个元组,例如
itertools
模块。这提供了一个product
函数,其效果与具有多个嵌套的for
循环相同。每次迭代的结果给出i
、j
和{(27, 30, 31)
。在通过对每个条目应用相同的函数,
reduce
命令可用于乘以返回的列表中的所有数字。由于您不能编写reduce( * , p)
,所以可以使用Python的operator
模块为*
提供函数名版本,即operator.mul
。在它的结果被包装在
()
中,形成一个由两部分组成的元组,第一部分是乘法的结果,第二部分是产生它的置换。e、 g.(25110, (27, 30, 31))
。在c1
是一个包含所有这些值的列表。这叫做列表理解。它相当于一个for
循环,其中有c1.append()
。在一旦创建了}(我建议您尝试打印它们的值以查看它们的样子),然后脚本使用类似的方法来计算所有的RPL值。每次迭代给出
c1
和{p
,如下所示:这是一个包含两个条目}的元组。Python可以使用索引访问每个值。所以为了得到}。在
(25110, (27, 30, 31))
和{25110
,您可以使用p[0][0]
作为第一个元组,第一部分。或者p[0][1]
得到{解决方案脚本可以转换为不使用列表理解,如下所示:
如果你想要i,j和k,那就把它们储存起来,而不是它们的产品。使用
c1.append((i, j, k))
,而不是c1.append(n)
。在那么,在
II
中会是这样的:您应该考虑的是,您可以从
I
返回两个列表,而不是使用两个全局列表。被修改的全局变量通常是一件坏事。在不能在循环之外使用循环变量。从未。即使语言允许这一点-这是完全令人困惑的,也是错误代码结构的标志。在
关于你的问题-有很多方法可以做到。最少涉及的是在
I
的最后一次迭代中使用元组而不是数字(您有更好的名称吗?)。在顺便说一句,您提供的代码片段不包含一个具有好名称的变量,因此任何人都不清楚。如果你想成为这段代码的唯一用户-由你决定,但我会试着给他们起更合理的名字-无论如何,这是一个很好的实践。在
相关问题 更多 >
编程相关推荐