Найти - Пользователи
Полная версия: Помощь с выводом комплексных чисел из текстового файла
Начало » Центр помощи » Помощь с выводом комплексных чисел из текстового файла
1
Nameless95
Здравствуйте! Нужна помощь с организацией построчного считывания комплексных чисел из тестового файла.
Идея программы такая: программа должна открыть текстовый файл с комплексными числами (чисел может быть и несколько сотен), выполнить построчное чтение этих чисел, следовательно преобразовать строки в сами числа и выполнить расчёты.
Расчёты с комплексными числами с вводом с клавиатуры работают, построчное чтение с дальнейшим выполнением программы удаётся с натуральными числами.
Помогите, пожалуйста, разобраться, как организовать вывод и преобразование именно комплексных чисел. Заранее спасибо за помощь!
J.R.
.
JOHN_16
Nameless95
считываете строку из файла, передаете ее встроенной функции complex() :
>>> s = '1+2j'
>>> c = complex(s)
>>> type(c)
<type 'complex'>
>>> c
(1+2j)
J.R.
за такое решение вам оценка 2.
Во первых применение eval для внешних входных данных даже не то что дурной той, а прямая угроза безопасности. Попадется вам строчка import os; os.remove() и будет весело.
Во вторых, читать нужно документацию.
complex([real])
Create a complex number with the value real + imag*j or convert a string or number to a complex number. If the first parameter is a string, it will be interpreted as a complex number and the function must be called without a second parameter.
py.user.next
>>> import re
>>> 
>>> def getk(s):
...     pat = r"""
...       (           # действительная часть
...         [-+]?     # может быть знак
...         \d+       # целая часть
...         (?:.\d+)? # может быть дробным
...       )
...       (           # мнимая часть
...         [-+]      # должен быть знак
...         \d+       # целая часть
...         (?:.\d+)? # может быть дробным
...       )
...       i           # мнимая единица
...     """
...     match = re.search(pat, s, re.X)
...     if match:
...         return tuple(map(float, match.groups()))
... 
>>> def norm(s):
...     return re.sub(r'\s+', '', s)
... 
>>> def str_to_cmplx(s):
...     return complex(*getk(norm(s)))
... 
>>> str_to_cmplx('-1 + 3 i')
(-1+3j)
>>> str_to_cmplx('-1.5 + 3.8 i')
(-1.5+3.8j)
>>>

Сначала строка чистится, затем преобразуется в коэффициенты, затем коэффициенты передаются в конструктор комплексного числа.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB