簡體   English   中英

如何更改此函數以使其返回文件中偶數位數的列表?

[英]How can I change this function so that it returns a list of the number of even digits in a file?

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] . 有人可以幫我嗎?

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文件和讀取它的代碼,這是我能做的最好的。

編寫新代碼時,最好從小處着手,然后一點一點地添加功能。 例如,首先編寫無需擔心節的代碼,然后更新以使用節。

但無論如何,這里有一些應該可以工作的修改后的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM