多个参数

时间:2018-09-03 17:43:46

标签: python arguments

我有一个带有序列号的文本文档,并且我想创建一个程序,在其中运行一个函数,该函数可以告诉您某个特定序列号在文本文档中出现了多少次。我希望参数可以是无限的,因为我可以要求输入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

2 个答案:

答案 0 :(得分:1)

解决方案更新

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函数!

Solution_Original

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

答案 1 :(得分:0)

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

实现目标的最佳方法是简单地使用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])

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