从python

时间:2018-03-09 05:35:40

标签: python function

TLDR:我想在底部打印c,但为了做到这一点,我必须逮捕和布雷斯特漂浮。我不能这样做

我已经创建了一个函数来读取文件并将第一行与其余行分开我有两个文件我正用于此aaa.txt和bbb.txt 然后我尝试操纵数据。我尝试平衡每个字符串的每个元素,我意识到我需要浮动它。我跟随了一些人的建议,但我仍然无法繁殖东西

有什么方法可以让布雷斯特或逮捕成阵列并将它们重命名为a_array。所以我可以输入a_array ** 2 = h print(h)?

但我真的很努力让它发挥作用。请复制和粘贴东西,看看它是否有效,因为我已经花了几个小时拿人们的建议,没有任何作用。早上5点我在这里死了:(

aaa.txt在

之下
test a line 1

3,6,8,99,-4,0.6,8

0,9,7,5,7,9,5

2,2,2,2,2,2,5

7,5,1,2,12,8,0.9

bbb.txt在

之下
test b line 1

1,2,3,4,5,6,7,8

55,0,90,09,1,2,3,

8,9,7,6,8,7,6

3,43,5,8,2,4,1

def mi_func(P):
    f=open(P, 'r')
    first = f.readline()
    restlines= f.readlines()
    f.close()
    return first, restlines

afirst,arest = mi_func('aaa.txt')
bfirst,brest = mi_func('bbb.txt')

#this ensures there are no standalone new line characters like ['\n', '5,6'..]
arest = [x for x in arest if x != '\n'] 
brest = [x for x in arest if x != '\n']

for i in range(len(arest)):
    arest[i] = [float(x)**2 for x in arest[i].strip().split(',') if x != '\n']


for i in range(len(brest)):
    brest[i] = [float(x) for x in brest[i].strip().split(',') if x != '\n']

print(arest)

c=(arest**2)+(brest**2)
print(c)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-16-629073a6846e> in <module>()
     22 print(arest)
     23 
---> 24 c=(arest**2)+(brest**2)
     25 print(c)

TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

2 个答案:

答案 0 :(得分:1)

问题是你试图平方并添加列表,而你应该对列表的各个浮点元素执行数学运算。这是您的解决方案:

将代码的最后部分修改为:

c = arest[:] # this just clones arest into c
for i in range(len(arest)):
    for j in range(len(arest[i])):
        c[i][j] = (arest[i][j]**2)+(brest[i][j]**2)
print(c)

c现在应该有两个数组正方形的总和!

编辑1: 如果您现在要对C进行平方或对其执行其他数学运算,

(i)要么

for i in range(len(c)):
    for j in range(len(c[i])):
        c[i][j] = c[i][j]**2

(ii)或者您可以在

中首次初始化时进行
c[i][j] = ((arest[i][j]**2)+(brest[i][j]**2))**2

答案 1 :(得分:0)

你正在做的是读取同一个文件两次,所以restlines读取整个文件并传递第一行,这是一个字符串,它失败了。 有更好的方法来做你正在做的事情,但遵循你的上下文,这应该解决问题  改变这一行

restlines= f.readlines()[1:]