【问题标题】:How can I change this function so that it returns a list of the number of even digits in a file?如何更改此函数以使其返回文件中偶数位数的列表?
【发布时间】:2021-10-27 01:41:44
【问题描述】:
def evens(number_file: TextIO) -> List[int]:
    lst = []
    
    line = number_file.readline().strip()
    while line != '':
        evens = 0
        line = number_file.readline().strip()
        
        while line.isdigit():
            evens = evens + int(line)
            line = number_file.readline().strip()
        lst.append(evens)
        
    return last

在此示例中,文件“numbers.txt”如下所示:

开始

1

2

结束

开始

3

结束

开始

4

5

6

结束

每一行都是一个 int 或 'START' 或 'END' 我想创建一个函数来返回每个部分中的偶数数,因此当代码在此文件上调整时,它应该返回列表 [1, 0, 2]。有人可以帮我吗?

【问题讨论】:

  • 由于您使用的是 Python 类型提示,我假设这是 Python 3 而不是 Python 2。我建议您将标签从 python-2.7 更改为 python-3。

标签: python python-2.7


【解决方案1】:
import numpy as np

def main():
    line = [1,4,5,6,8,8,9,10]
    evens = np.array()
    for l in line:
        if (l % 2) == 0:
            np.append(evens, l)
    return evens

if __name__ == '__main__':
    main()

没有你的txt 文件和读取它的代码,这是我能做的最好的。

【讨论】:

  • 有什么方法可以通过导入列表和 TextIo 来实现吗?我不熟悉np
【解决方案2】:

编写新代码时,最好从小处着手,然后一点一点地添加功能。例如,首先编写无需担心节的代码,然后更新以使用节。

但无论如何,这里有一些修改后的代码应该可以工作:

def evens(number_file: TextIO) -> List[int]:
    lst = []
    
    line = number_file.readline().strip()
    while line != '':
        evens = 0

        # ignore all text lines
        while !line.isdigit():
            line = number_file.readline().strip()

        # process number lines
        while line.isdigit():
            if int(line) % 2 == 0:
                evens = evens + 1
            line = number_file.readline().strip()

        lst.append(evens)
        
    return lst

这是一个可能更简单的版本(Python 中的for 循环通常可以让您的生活更轻松,例如在处理文件的每一行时):

def evens(number_file: TextIO) -> List[int]:
    lst = []

    for row in number_file:
        line = row.strip()
        if line == 'START':
            # new section, start new count
            lst.append(0)
        elif line.isdigit() and int(line) % 2 == 0:
            # update current count (last item in lst)
            lst[-1] += 1

   return lst

【讨论】:

  • 非常感谢这个作品!抱歉,我是新手,我只是想知道 continue 函数是否只是延长了一行?
  • 自从你写了你的评论后,我已经更新了这个。您可以看到代码的修订版本,其中包含新部分以跳过文本行并正确计算偶数。然后是我的替代版本,它不再有continue。但要回答您的问题,循环中的continue 意味着“跳过循环的其余部分,返回顶部并进行下一次迭代(如果有)”。
猜你喜欢
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
相关资源
最近更新 更多