多个args
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个args相关的知识,希望对你有一定的参考价值。
我有一个带序列号的文本文档,我想创建一个程序,您可以在其中运行一个函数,告诉您文本文档中出现了多少次某个序列号。我希望参数是无限的,因为我可以要求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
答案
Solution_Update
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
另一答案
您只看到第一个值,因为您只持有一个计数器并单独递增。
实现你的意图的最好方法是简单地使用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])
(如你所见,不需要两个循环...)
以上是关于多个args的主要内容,如果未能解决你的问题,请参考以下文章