#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.