Как составить список и обосновать числа?

#python

#python

Вопрос:

Я хочу получить некоторую помощь с этим заданием. Из приведенного ниже списка я должен найти числа больше 0, числа записываются в файл с выравниванием по правому краю через 10 пробелов, при этом для дробной части значения допускается 2 пробела, и, наконец, записать их в файл.

Вот что у меня есть на данный момент:

 def formatted_file(file_name, nums_list):
    '''
    Test:
    >>> formatted_file('out1.txt', [1, 23.999, -9, 327.1])
    >>> show_file('out1.txt')
          1.00
         24.00
        327.10
    <BLANKLINE>
    >>> formatted_file('out1.txt',[-1, -98.6])
    >>> show_file('out1.txt')
    <BLANKLINE>
    >>> formatted_file('out1.txt',[])
    >>> show_file('out1.txt')
    <BLANKLINE>
    '''
    with open('out1.txt', 'w') as my_file:
        for x in nums_list:
            if x > 0:
                a = list()
                a.append(x)
            if len(a) > 0:
                my_file.write(f'{i:10.2f}n')





def show_file(file_name):
    with open(file_name, 'r') as result_file:
        print(result_file.read())

if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose = True)
  

Когда я запускаю эту функцию, файл, который я получаю, является пустым. Вчера вечером я запустил его в pycharm, но когда я запустил его в режиме ОЖИДАНИЯ, он не сработал. И теперь он выдает кучу ошибок и в pycharm.


Спасибо обоим за ваши предложения. К сожалению, ни один из методов не записывает выходные данные в файл: (

Однако тест проходит в режиме ОЖИДАНИЯ.

Комментарии:

1. как выглядит файл?

2. Fie пуст, так как я пытаюсь записать в него выходные данные списка чисел.

3. the numbers are written to the file right justified in 10 spaces, with 2 spaces allowed for the fractional portion of the value, and finally write them into a file. сбивает с толку — я не тот, кто проголосовал против

4. Нет проблем, нет, я прокомментировал другому человеку, который считает это забавным. Я не комментировал это для вас. Извините за путаницу, на самом деле файла нет. Show_file(‘out1.txt ‘) — это команда, которую мне нужно выполнить после кода, чтобы убедиться, что я получу результат, показанный ниже этой команды.

5. Что i здесь my_file.write(f'{i:10.2f}n') ? Мне кажется, что это не определено? Вы, вероятно, хотите записать a в файл? Или я что-то упускаю?

Ответ №1:

Если вы используете string.format , вы должны поместить значение в функцию format . Я также не понимаю, для чего здесь используется len(a) или, в частности, a . Это ваша функция с моей модификацией, которая прошла первый тест (я думаю, что два других были только для отладки)

 def formatted_file(file_name, nums_list):
    '''
    Test:
    >>> formatted_file('out2.txt', [1, 23.999, -9, 327.1])
    >>> show_file('out2.txt')
          1.00
         24.00
        327.10
    <BLANKLINE>
    '''
    with open(file_name, 'w') as my_file:
        for x in nums_list:
            if x > 0:
                my_file.write('{:10.2f}n'.format(x))


def show_file(file_name):
    with open(file_name, 'r') as result_file:
        print(result_file.read())

if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose = True)
  

 Trying:
    formatted_file('out2.txt', [1, 23.999, -9, 327.1])
Expecting nothing
ok
Trying:
    show_file('out2.txt')
Expecting:
        1.00
        24.00
        327.10
    <BLANKLINE>
ok
2 items had no tests:
    __main__
    __main__.show_file
1 items passed all tests:
2 tests in __main__.formatted_file
2 tests in 3 items.
2 passed and 0 failed.
Test passed.
  

Комментарии:

1. Его f строки в порядке ( f-строки )?

2. @Timus Да, верно, извините за это. Только неправильная переменная. Обозначение «.format()» всегда было для меня более запоминающимся, поэтому я изменил его. Я знаю, не очень Pythonic.

3. Для меня все с точностью до наоборот, я так рад f -strings :))

4. Спасибо обоим за ваши предложения. К сожалению, ни один из методов не записывает выходные данные в файл: (Хотя тест проходит в режиме ОЖИДАНИЯ.

5. @CasperNe; есть ли у вас разрешение на запись в папке, которую вы пишете? Есть ошибки? Я внес небольшую модификацию всего минуту назад и добавил «имя_файла» в аргументы open statment.