一个程序,它读取一个投票文本文件并打印结果而不是打印正确的数字

2024-09-24 14:32:59 发布

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

这是我的代码,我需要它来读一行文字,它只是由y的a和n的y表示是n表示否a表示弃权,我正在努力增加赞成票的数量。文本文件如下所示:

Aberdeenshire  
yyynnnnynynyannnynynanynaanyna  
Midlothian  
nnnnynyynyanyaanynyanynnnanyna  
Berwickshire  
nnnnnnnnnnnnnnnnnnnnynnnnnynnnnny  

这是我的密码:

def main():
    file = open("votes.txt")
    lines = file.readlines()

    votes = 0
    count = 0
    count_all = 0
    for m in range(1,len(lines),2):
        line = lines[m]
        for v in line:
            if v == 'a':
                votes += 1
            elif v == 'y':
                count_all += 1
                count += 1
                votes += 1
            else:
                count_all += 1

        print("percentage:" + (str(count/count_all)))

    print("Overall there were ", (count/count_all),"  yes votes")

main()

Tags: 代码infor数量maincountlineall
2条回答

多多少少的Python一行,它不会给你每个人/城市的票tho:

from collections import Counter

l = """Aberdeenshire  
yyynnnnynynyannnynynanynaanyna  
Midlothian  
nnnnynyynyanyaanynyanynnnanyna  
Berwickshire  
nnnnnnnnnnnnnnnnnnnnynnnnnynnnnny"""

Counter([char for line in l.split('\n')[1::2] for char in line.strip()])

退货:

Counter({'a': 11, 'n': 60, 'y': 22})

首先,您应该注意,您的file.readlines()实际上在每一行的末尾提供了\n,在您的代码中,这两个值都将在else块中处理,因此no:

>>> with open("votes.txt","r") as f:
...     print(f.readlines())
... 
['Aberdeenshire\n',
'yyynnnnynynyannnynynanynaanyna\n',
'Midlothian\n',
'nnnnynyynyanyaanynyanynnnanyna\n',
'Berwickshire\n',
'nnnnnnnnnnnnnnnnnnnnynnnnnynnnnny\n']

所以这也许可以解释为什么你找不到好的数字

现在,为了提高代码的效率,我们可以研究str^{}方法,也可以用split而不是readlines除去那些\n

with open("votes.txt","r") as f:
    full = f.read()
    lines = full.split("\n")
    votes = 0
    a = 0
    y = 0
    n = 0
    for m in range(1,len(lines),2):
        line = lines[m]
        votes += len(line) # I'm counting n's as well here
        a += line.count("a")
        y += line.count("y")
        n += line.count("n")
    print("Overall, there were " + str(100 * y / (y + n)) + "% yes votes.")

希望有帮助

相关问题 更多 >