Python – 我读取文件后如何给出一个string值

我对这个社区和这个计算机语言很陌生。 最近我正在做一些练习,一个问题困扰了我好几天。 这里是一个问题:在Python中读取文件test.txt(index:“CDEF”,“ABC”,“FIJK”),并重新alignment到“ABC”,“CDEF”,“FIJK”,并给出每个字符(例如“ABC”= 1 + 2 + 3 = 6),最后打印索引值(例如A + B + C = 6,所以“ABC”的值是6,“CDEF”的值是18 * 2 = 36(2表示列表的第二位)“FIJK”是36 * 3 = 108)打印出150(6 + 36 + 108 )

我现在没有代码。 我正在考虑如果我用字典键来做。 但有没有什么好办法做到这一点,或者如果今天的文件不是上面的索引。 我应该循环吗?

首先,我们假设您有一个名为sample.txt的文件,其中包含以下内容:

 CDEF ABC FIJK 

脚本

这里是脚本来完成(我认为)你在之后:

 with open('so.txt', 'r') as file: lines = [x.replace('\n', '') for x in file.readlines()] print "lines: ", lines lines.sort() print "lines sorted: ", lines sums = [sum([ord(letter.lower()) - 96 for letter in line]) for line in lines] print "sums: ", sums products = [x * (sums.index(x) + 1) for x in sums] print "products: ", products total = sum(products) print "total: ", total 

OUTPUT

以上代码的输出:

 lines: ['CDEF', 'ABC', 'FIJK'] lines sorted: ['ABC', 'CDEF', 'FIJK'] sums: [6, 18, 36] products: [6, 36, 108] total: 150 

说明

(1)打开so.txt作为只读文件,并将其存储为变量: file

 with open('so.txt', 'r') as file: 

(2)取出file每一行,并删除任何换行符并将其变成列表。

  lines = [x.replace('\n', '') for x in file.readlines()] 

(3)对列表进行排序。

  lines.sort() 

(4)这是一个有点棘手,因为它正在做一些事情。

  sums = [sum([ord(letter.lower()) - 96 for letter in line]) for line in lines] 

所以,我们分成两个部分:

  sums = [<do_something_here with line> for line in lines] 

该代码被称为列表理解 。 它正在用lines列表的每个元素创建一个新列表,并做一些事情。 这大致相当于:

  sums = [] for line in lines: sums.append(<do_something_here with line>) 

因此,有了line变量(这将是一个字符串),我们可以把它当作一个列表,并在另一个列表理解中迭代它:

  [ord(letter.lower()) - 96 for letter in line] 

对于字符串中的每个letter ,它将其转换为小写字母,使其成为一个ASCII序数,然后减去96以使它以a == 1开始。 你可以在这里看到所有ASCII码的列表。

最后,有一个列表,现在字符串转换为数字,我们应用sum()到该列表。

我们现在有:

 [6, 18, 36] 

(5)我们把这个清单拿出来,提供另一个清单的理解。 这一次,我们的目标是把每个数字,乘以它的index 。 你可以通过调用list.index(element)来得到一个元素的索引。 如下:

  products = [x * (sums.index(x) + 1) for x in sums] 

(6)最后,我们所要做的就是再次使用sum()方法求和最后一个列表。

  total = sum(products) 

我希望我回答你以后的问题。

你可以使用嵌套的理解:

 >>> lst = ["ABC", "CDEF", "FIJK"] >>> sum((idx + 1) * sum(ord(letter) - 64 for letter in item) for idx, item in enumerate(lst)) 150 

如果你想用一个累加器使用正则循环:

 total_sum = 0 for idx, item in enumerate(lst): total_sum += (idx + 1) * sum(ord(letter) - 64 for letter in item) print(total_sum) 

ord("A")给你一个字符的ascii值。 "A"65 。 这就是为什么我在例子中减去64 。 因此, (ord(letter) - 64 for letter in item) "ABC"中的每个字符,例如(ord(letter) - 64 for letter in item) ,然后将它们相加。 然后这个值被累加到total_sum ,在for循环的第一次迭代之后它将包含6