Thứ Sáu ngày 19 tháng 9 12:46:16 CEST 2008
- Tin nhắn trước: [Gia sư] Cách in các số phức tạp mà không bao quanh dấu ngoặc đơn
- Thông báo tiếp theo: [Gia sư] Cách in các số phức tạp mà không bao quanh dấu ngoặc đơn
- Tin nhắn được sắp xếp bởi: [Ngày] [Chủ đề] [Chủ đề] [Tác giả] [ date ] [ thread ] [ subject ] [ author ]
On Fri, Sep 19, 2008 at 4:26 AM, Stephen McInerney wrote: > > Why does the complex.__str__[] method on complex numbers add the enclosing > parentheses? > It's unwanted, and it also makes them look like a tuple [other than the > trailing comma]. > How can I get rid of it, other than the clunky: > > >>> print d > [0.80-0.58j] > >>> print repr[d][1:-1] > 0.80-0.58j > > How can I change complex.__str__[] ? > >>> def printComp[comp]: ... comp = str[comp] ... comp = comp.strip[']'] ... comp = comp.strip['['] ... print comp ... >>> printComp[d] 0.8-0.58j That's the best I could come up with... HTH, Wayne -------------- next part -------------- An HTML attachment was scrubbed... URL:
- Tin nhắn trước: [Gia sư] Cách in các số phức tạp mà không bao quanh dấu ngoặc đơn
- Thông báo tiếp theo: [Gia sư] Cách in các số phức tạp mà không bao quanh dấu ngoặc đơn
- Tin nhắn được sắp xếp bởi: [Ngày] [Chủ đề] [Chủ đề] [Tác giả] [ date ] [ thread ] [ subject ] [ author ]
Bạn có thể làm điều đó như được hiển thị bên dưới bằng phương pháp
>>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
2:>>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
Để làm cho nó xử lý cả các phần tưởng tượng tích cực và tiêu cực đúng cách, bạn sẽ cần một hoạt động định dạng phức tạp [thậm chí nhiều hơn]:
>>> n = 3.4-2.3j
>>> n
[3.4-2.3j]
>>> '[{0:.2f} {1} {2:.2f}i]'.format[n.real, '+-'[n.imag < 0], abs[n.imag]]
'[3.40 - 2.30i]'
Cập nhật - Cách dễ dàng hơn
Mặc dù bạn không thể sử dụng
>>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
3 làm loại trình bày cho các số phức bằng cách sử dụng toán tử định dạng chuỗi >>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
4:cannot use >>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
3 as a presentation type for complex numbers using the string formatting operator >>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
4:n1 = 3.4+2.3j
n2 = 3.4-2.3j
try:
print['test: %.2f' % n1]
except Exception as exc:
print['{}: {}'.format[type[exc].__name__, exc]]
Output:
TypeError: float argument required, not complex
Tuy nhiên, bạn có thể sử dụng nó với các số phức tạp thông qua phương thức
>>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
2. Điều này không được ghi lại rõ ràng, nhưng được ngụ ý bởi tài liệu về ngôn ngữ nhỏ định dạng mà chỉ nói:can however
use it with complex numbers via the >>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
2 method. This isn't explicitly documented, but is implied by the Format Specification Mini-Language documentation which just says:________ 16 & nbsp; & nbsp; điểm cố định. Hiển thị số dưới dạng số điểm cố định. Độ chính xác mặc định là
7.>>> n = 3.4+2.3j >>> n [3.4+2.3j] >>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n] '[3.40 + 2.30i]' >>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n] '[3.40 + 2.30i]'
. . Vì vậy, thật dễ dàng để bỏ qua. Theo thuật ngữ cụ thể, các công trình sau đây trong cả Python 2.7,14 và 3.4.6:
print['n1: {:.2f}'.format[n1]]
print['n2: {:.2f}'.format[n2]]
Output:
n1: 3.10+4.20j
n2: 3.10-4.20j
Điều này không cung cấp cho bạn hoàn toàn kiểm soát mã trong câu trả lời ban đầu của tôi, nhưng nó chắc chắn ngắn gọn hơn nhiều [và xử lý cả các bộ phận tưởng tượng tích cực và tiêu cực tự động].
Cập nhật 2 - F -String
Các chuỗi chữ được định dạng [còn gọi là F-Strings] đã được thêm vào Python 3.6, điều đó có nghĩa là nó cũng có thể được thực hiện như thế này trong phiên bản đó hoặc muộn hơn:
print[f'n1: {n1:.2f}'] # -> n1: 3.40+2.30j
print[f'n2: {n2:.3f}'] # -> n2: 3.400-2.300j
Trong Python 3.8.0, hỗ trợ cho một nhà xác định
>>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
8 đã được thêm vào các chuỗi F, cho phép bạn viết:print[f'{n1=:.2f}'] # -> n1=3.40+2.30j
print[f'{n2=:.3f}'] # -> n2=3.400-2.300j
Stephen McInerney đã viết:
& nbsp; Tại sao phương thức .__ str __ [] phức tạp trên các số phức tạp thêm dấu ngoặc đơn?
Why does the complex.__str__[] method on complex numbers add the enclosing parentheses?
Bởi vì nó được thiết kế theo cách đó và sau đó được thực hiện để theo thiết kế.
Hoặc bạn đang hỏi tại sao nó được thiết kế theo cách đó? Tôi đoán bạn phải hỏi nhà thiết kế.
Ít nhất nó có phần tương thích với các biểu diễn StR của các loại dữ liệu khác có chứa hơn 1 giá trị, ví dụ: thập phân, bộ, tuple, ...
Nó không mong muốn
Bởi một số; những người khác thích nó. Tôi nghĩ bạn có nghĩa là bạn không muốn nó.
, và nó cũng làm cho chúng trông giống như một tuple [ngoài dấu phẩy kéo dài].
ĐÚNG VẬY.
Làm thế nào tôi có thể thoát khỏi nó, ngoài những người vụng về:
Vui lòng xác định "Clunky". & nbsp; >>> In D [0,80-0.58J] >>> In repr [D] [1: -1] 0.80-0.58j
Tạo Subclas của riêng bạn
>>> print d
[0.80-0.58j]
>>> print repr[d][1:-1]
0.80-0.58j& nbsp; Làm thế nào tôi có thể thay đổi phức tạp .__ str __ []?
>>> Lớp C [phức tạp]: ... & nbsp; & nbsp; & nbsp; def __str __ [tự]: ... & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; trả về "%s-%sj"%[self.real, self.imag] ... & nbsp; & nbsp; & nbsp; def __init __ [self, r, i]: ... & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; phức tạp .__ init __ [tự, r, i] ... >>> c = c [1,2] >>> c [1+2j] >>> in c '1.0-2.0j';
... def __str__[self]:
... return "%s-%sj" % [self.real, self.imag]
... def __init__[self, r, i]:
... complex.__init__[self, r, i]
...
>>> c=C[1,2]
>>> c
[1+2j]
>>> print c
'1.0-2.0j';
Điều này có vẻ khó hiểu nhưng đây là cách để thay đổi hành vi của các đối tượng tích hợp.
-- Bob Gailer Chapel Hill NC 919-636-4239
>>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
0>>> n = 3.4+2.3j
>>> n
[3.4+2.3j]
>>> '[{0.real:.2f} + {0.imag:.2f}i]'.format[n]
'[3.40 + 2.30i]'
>>> '[{c.real:.2f} + {c.imag:.2f}i]'.format[c=n]
'[3.40 + 2.30i]'
1