2017-12-21 109 views
8

Tôi đã tìm kiếm câu trả lời nhưng vì nó có một chút không thể tìm thấy câu trả lời. Một câu hỏi đơn giản cho các chuyên gia (tôi hy vọng).Python - Sử dụng một biến như là một phần của chuỗi tạo thành

Tôi muốn có thể sử dụng biến số int thay vì số (5) được sử dụng trong mã bên dưới. Tôi hy vọng có một cách khác hoặc tôi sẽ phải đặt mã của tôi trong vòng nếu khối mà tôi đang cố gắng tránh nếu có thể (tôi không muốn nó đi qua một điều kiện mọi lúc trong vòng lặp của tôi).

my_array[1, 0] = '{0:.5f}'.format(a) 

Có cách nào cho tôi để viết mã dưới đây sử dụng một biến như:

x = 5 
my_array[1, 0] = '{0:.xf}'.format(a) 

Bất kỳ trợ giúp sẽ được đánh giá cao!

+0

đầu ra mong muốn của bạn là gì? – Ajax1234

+0

đầu ra là khó khăn và hoạt động mà không có một vấn đề. Tôi có mã chạy mà không có vấn đề gì. Câu hỏi đặt ra là sử dụng biến trong {} dấu ngoặc vuông. Lý do là khi một điều kiện certian khớp với nhau, tôi phải đặt nhiều dòng khác nhau trong câu lệnh if/elif. Và tôi muốn tránh điều đó. Tôi muốn gán một biến trên mã này và không phải thay đổi các dòng ở đây. Tôi biết nó có vẻ hơi đáng ngờ. Tôi chỉ cố gắng tránh những điều không cần thiết nếu các câu lệnh trong các vòng lặp đi qua hàng trăm lần. –

+0

ví dụ tôi thấy nhưng chưa học được mã đăng nhập% .. như% x ... Tôi nghi ngờ đó là cách nó hoạt động nhưng có thể có một cách như nó cho phép tôi sử dụng biến trong các dấu ngoặc trước đây. format() –

Trả lời

15

Tất nhiên có là:

x = 5 
a = '{1:.{0}f}'.format(x, 1.12345111) 
print(a) # -> 1.12345 

Nếu bạn không muốn để xác định vị trí (0 & 1), bạn chỉ cần nghịch đầu vào của bạn:

a = '{:.{}f}'.format(1.12345111, x) 
#     ^the float that is to be formatted goes first 

Đó là vì đối số đầu tiên đầu tiên đến format() chuyển đến đầu tiên (ngoài cùng) khung của chuỗi.

Kết quả là, các sau thất bại:

a = '{:.{}f}'.format(x, 1.12345111) 

từ {:1.12345111f} không hợp lệ.


ví dụ khác về định dạng bạn có thể thấy thú vị:

a = '{:.{}{}}'.format(1.12345111, x, 'f') # -> 1.12345 

a = '{:.{}{}}'.format(1.12345111, x, '%') # -> 112.34511% 

a = '{:.{}}'.format(1.12345111, '{}{}'.format(x, 'f')) # -> 112.34511% 

Cuối cùng, như @m_____z chỉ ra trong câu trả lời tuyệt vời của mình và nếu bạn đang sử dụng Python3.6 hoặc cao hơn, bạn có thể làm tất cả điều này rất dễ dàng bằng cách sử dụng f-strings.

number = 1.12345111 
x = 5 
a = f'{number:.{x}f}' 
print(a) # -> 1.12345 

Lưu ý f trước dấu ngoặc kép.

+0

Mã bạn đã làm việc giống như một sự quyến rũ! Tôi muốn cảm ơn bạn và các thành viên khác ở đây vì những phản hồi nhanh chóng và hữu ích của bạn. Chỉ cần làm rõ, {0} là viết tắt của biến x .. nó là vị trí của nó. phần đó tôi hiểu. Điều gì về đầu 1:? Điều đó có ý nghĩa gì đối với mã này? phải mất hai đối số (x, 1.12345111) trong hàm định dạng? –

+0

Cả hai '0' và' 1' là các chỉ mục trong tuple được truyền tới '.format()'. Vì vậy, trong trường hợp này, '0' * trỏ tới *' x' và '1' * đến *' 1.12345111'. Hãy suy nghĩ về nó như đang làm '(x, 1.12345111) [0]'. –

+0

Tôi mất một lúc để hiểu phần cuối cùng. Bây giờ tôi đã nhận nó. Cảm ơn một lần nữa !!! –

7

Giả sử bạn đang sử dụng Python 3.6, bạn chỉ có thể làm như sau:

x = 5 
my_array[1, 0] = f'{a:.{x}f}' 
+0

Một chút trả lời trễ (xin lỗi), dù sao .. Tôi muốn thử phương pháp thay thế. Ví dụ của bạn là một cách tốt và mới để làm điều đó. Nó hoạt động rất tốt. Cảm ơn bạn! –

3

Hai cách này có thể được thực hiện. Hoặc bằng cách sử dụng str.format() hoặc bằng cách sử dụng%

đâu a là số bạn đang cố gắng để in và x là số chữ số thập phân, chúng tôi có thể làm:

str.định dạng:

'{:.{dec_places}f}'.format(a, dec_places=x) 

%:

'%.*f' % (x, a) 
0
x=5 
f='{0:.'+str(x)+'f}' 
my_array[1, 0] = f.format(a) 
Các vấn đề liên quan