多个args

2024-06-14 04:38:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有序列号的文本文档,我想创建一个程序,在其中运行一个函数,告诉您某个序列号在文本文档中出现了多少次。我希望参数是无限的意义上,我可以要求3个不同的序列号或只有1

list of serial numbers:
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4t
pmos_4f
nmos_4t
nmos_4f

current code:
def find_serial(*serial):

    f = open('C:/Users/joann/Desktop/pmos.txt', 'r')
    for z in range(len(serial)):


        x = 0
        lines = f.readlines()
        for i in lines:
            if (serial[z-1] in i):
                x += 1
        print(x)


    f.close()

当我运行它时,我得到第一个值出现的次数,但它将其余值显示为0

>>> find_serial('pmos_4e', 'nmos_4e', 'pmos_4t', 'pmos_4f')
6
0
0
0

Tags: of函数in程序for参数serial文本文档
2条回答

您只看到第一个值,因为您只持有一个计数器并单独递增它

实现目标的最佳方法是简单地使用collections.counter:

from collections import Counter
with open('C:/Users/joann/Desktop/pmos.txt', 'r') as f:
    content = f.read()
count = Counter(content.split())

然后你可以简单地做:

count['pmos_4e']

去拿你要找的号码

最后的代码应该是这样的:

def find_serial(*serials):
     with open('C:/Users/joann/Desktop/pmos.txt', 'r') as f:
         content = f.read()
     count = Counter(content.split())
     for serial in serials:
         print(count[serial])

(如您所见,不需要两个循环…)

解决方案更新

filename = "serials.txt"

def find_serial(*serial):

    serial_1, serial_2, serial_3, serial_4 = serial
    serials = [serial_1, serial_2, serial_3, serial_4]
    f = open('serials.txt', 'r')
    contents = f.read().split()

    for i in serials:
        x = 0
        for j in contents:
            if i == j:
                x +=1
        print(f"{i} count: {x}")

find_serial('pmos_4e', 'nmos_4e', 'pmos_4t', 'pmos_4f')

同样的解决方案,但我注意到您想同时将所有参数传递给函数,所以我重写了它,这样您就可以按原来的方式执行find_serial函数了

原始解决方案

filename = "serials.txt"

def find_serial(serial):
    f = open('serials.txt', 'r')
    contents = f.read().split()   
    x = 0
    for i in contents:
        if i == serial:
            x +=1
    print(f"{serial} count: {x}")

serials = ['pmos_4e', 'nmos_4e', 'pmos_4t', 'pmos_4f']
for i in serials:
    find_serial(i)

使用f.read().split()将为我们提供一个文本中每个单词的列表,由于所有这些序列都是一个单词,因此这是一个很好的机会来使用它。然后我们可以用for i in contents来比较i和我们的serial并增加x计数

输出

(xenial)vash@localhost:~/python$ python3.7 helpin.py 
pmos_4e count: 6
nmos_4e count: 6
pmos_4t count: 6
pmos_4f count: 6

相关问题 更多 >