【问题标题】:How can i print the lines like this example?我怎样才能像这个例子一样打印这些行?
【发布时间】:2021-02-02 14:17:49
【问题描述】:

我有这段代码的数据结果

import os
with open('c.txt', 'r', encoding='utf-8') as f1, open('c.txt', 'r', encoding='utf-8') as f2, open('r.txt', 'w', encoding='utf-8') as outfile:

    for i, line in enumerate(f1):
        xi, yi = (float(n) for n in line.split())
        f2.seek(0)
        for j, line in enumerate(f2):
            if i < j:
                xj, yj = (float(n) for n in line.split())
                print( ((xi-xj)**2-(yi-yj)**2), file=outfile)
                
        print(((xi)**2-(yi)**2), file=outfile) 

这段代码应该给我计算,但每次计算时都需要打印 x 和 y 的位置

1 2 0.5
1 3 0.55
1 4 2.02

等等。我试图编写代码,但无法合并我想要的概念。我想我需要编写这段代码来获取值的位置并打印出来

 for pos in range(len(f1)):
        cor = t[pos]
        f.write(str(pos) + ' ' + str(cor[0]) + ' ' + values + '\n')

但无法合并它

c.txt 样例

9.2    2.02
-2.3   1.5

【问题讨论】:

  • 这能回答你的问题吗? Print multiple arguments in Python
  • 不,我需要的逻辑不同。谢谢
  • 你能分享来自c.txt的样本数据吗?
  • 当前输出是多少?
  • @yudhiesh 我无法将我需要的概念与我的代码合并

标签: python


【解决方案1】:

让我们看看答案是否有助于您理解我在 cmets 部分中试图解释的内容。

  • 第一步:打开一个文件读,一个文件写
  • 第 2 步:读取文件 1 中的所有值并创建列表列表。 每个列表将有两个值 x 和 y
  • 第 3 步:使用枚举获取 xi 的值遍历列表 和 yi,其中 i 是被选中的行
  • 第 4 步:遍历列表(使用 [i+1:] 的剩余项目)使用 枚举
  • 第 5 步:进行计算并将数据打印到文件中

注意,每次枚举的时候,count都是从0开始的,所以需要i加1,j加1。所以当你打印 i 时,你使用 +1,当你打印 j 时,你使用 +2

with open("abc.txt", "r") as f_in, open("out.txt", "w") as f_out:
    abc_list = [[float(n) for n in line.split()] for line in f_in]
    print (f' i\t j\txi\tyi\txj\tyj\t(xi-xj)**2-(yi-yj)**2')    
    for i,(xi,yi) in enumerate(abc_list):
        for j,(xj,yj) in enumerate(abc_list[i+1:]):
            print (f'{i+1:2}\t{i+j+2:2}\t{xi:.2}\t{yi:.2}\t{xj:.2}\t{yj:.2}\t{(xi-xj)**2-(yi-yj)**2:.2f}')
            f_out.write(f'{i+1:2}\t{i+j+2:2}\t{xi:.2}\t{yi:.2}\t{xj:.2}\t{yj:.2}\t{(xi-xj)**2-(yi-yj)**2:.2f}\n')

您的输入文件数据:

9.2    2.02
-2.3   1.5
3.2    4.5
1.3    2.4

您的输出文件数据:

 1   2  9.2     2.0    -2.3  1.5    131.98
 1   3  9.2     2.0    3.2   4.5    29.85
 1   4  9.2     2.0    1.3   2.4    62.27
 2   3  -2.3    1.5    3.2   4.5    21.25
 2   4  -2.3    1.5    1.3   2.4    12.15
 3   4  3.2     4.5    1.3   2.4    -0.80

打印出来的数据是:

 i   j  xi      yi    xj    yj    (xi-xj)**2-(yi-yj)**2
 1   2  9.2     2.0   -2.3  1.5   131.98
 1   3  9.2     2.0   3.2   4.5   29.85
 1   4  9.2     2.0   1.3   2.4   62.27
 2   3  -2.3    1.5   3.2   4.5   21.25
 2   4  -2.3    1.5   1.3   2.4   12.15
 3   4  3.2     4.5   1.3   2.4   -0.80

改用这个:

    for j,(xj,yj) in enumerate(abc_list[i+1:]):
        i_val = i+1
        j_val = i+j+2
        result = (xi-xj)**2-(yi-yj)**2
        
        print (f'{i_val:2}\t{j_val:2}\t{xi:.2}\t{yi:.2}\t{xj:.2}\t{yj:.2}\t{result:.2f}')
        f_out.write(f'{i_val:2}\t{j_val:2}\t{xi:.2}\t{yi:.2}\t{xj:.2}\t{yj:.2}\t{result:.2f}\n')

【讨论】:

  • 谢谢,但如果我需要更改方程式,因为我有另一个类似的问题,另一个文件是 math.sqrt((xi-xj)**2-(yi-yj)**2 ) 我厌倦了使用你的代码,但得到了 SyntaxError: f-string expression part cannot include a backslash i write like f_out.write(f'{i+1:2}\t{i+j+2:2}\ t{math.sqrt((xi-xj)**2-(yi-yj)**2:.2f}\n')
  • 不要在 f'string 中进行所有计算,而是尝试在上面的一行中进行计算并使用 fstring 中的变量
  • 我修好了..我错过了一个括号
  • 感谢您的帮助 .. 终于完成了 .. 希望您能帮我解决更多问题 :-) 如果您愿意,我可以收到您的电子邮件吗?
  • 在 Stack Overflow 上发布您的问题,我将能够提供帮助。或者,您可以通过chat.stackoverflow.com/users/13873980/joe-ferndz与我聊天
猜你喜欢
  • 2022-11-27
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 2016-08-28
相关资源
最近更新 更多