मुझे अपने प्रश्न के लिए सटीक शब्द खोजने में कठिन समय हो रहा है क्योंकि मैं स्ट्रिंग्स को स्वरूपित करने के लिए नया हूं।

मान लें कि मेरे पास दो चर हैं:

customer = 'John Doe'
balance = 39.99

मैं एक पंक्ति मुद्रित करना चाहता हूं जो 25 वर्ण चौड़ा है, और दो मानों के बीच की जगह को एक विशिष्ट वर्ण (इस मामले में, अवधि) के साथ भरता है:

'John Doe .......... 39.99'

इसलिए जैसे ही मैं ग्राहकों के माध्यम से लूप करता हूं, मैं हमेशा 25 वर्णों वाली एक पंक्ति मुद्रित करना चाहता हूं, उनके नाम बाईं ओर, और उनका संतुलन दाईं ओर, और अवधियों को बीच की जगह को भरने के लिए समायोजित करने की अनुमति देता है।

मैं इसे कई चरणों में तोड़ सकता हूं और परिणाम प्राप्त कर सकता हूं ...

customer = 'Barry Allen'
balance = 99
spaces = 23 - len(customer + str(balance))
'{} {} {}'.format(customer, '.' * spaces, balance)

# of course, this assumes that len(customer + str(balance)) is less than 23 (which is easy to work around)

... लेकिन मैं उत्सुक हूं कि ऐसा करने का एक और "सुरुचिपूर्ण" तरीका है, जैसे स्ट्रिंग स्वरूपण के साथ।

क्या यह संभव भी है?

धन्यवाद!

3
MWhizzy 4 मार्च 2020, 03:56

2 जवाब

आप अजगर में ljust() और rjust() स्ट्रिंग ऑब्जेक्ट का उपयोग कर सकते हैं:

customer = 'John Doe'
balance = 39.99

output = customer.ljust(15, '.') + str(balance).rjust(10, '.')

print(output)
#John Doe............39.99

आपको आवश्यक प्रारूप के आधार पर, आप इसे चौड़ाई बदलने या अंतरिक्ष वर्ण जोड़ने के साथ ट्यून कर सकते हैं।

5
aminrd 4 मार्च 2020, 04:17
सहायता के लिए धन्यवाद! इसने मेरे लिए काम किया और यह बहुत साफ और सरल रहा।
 – 
MWhizzy
25 नवम्बर 2020, 18:33

यदि आप बिंदुओं के दोनों ओर रिक्त स्थान नहीं रखना चाहते थे जैसा कि अन्य उत्तर से पता चलता है, तो आप इसे प्राप्त कर सकते हैं स्वरूपण निर्दिष्ट करना साथ ही:

"{:.<17s}{:.>8.2f}".format(customer, balance)

17 वर्ण चौड़े बाएँ संरेखित, . दाएँ गद्देदार स्ट्रिंग और दाएँ संरेखित के 8 वर्ण, . बाएँ गद्देदार, 2 दशमलव बिंदुओं की सटीकता के साथ तैरेंगे।

आप एफ-स्ट्रिंग (पायथन> = 3.6) के साथ भी ऐसा ही कर सकते हैं:

f"{customer:.<17s}{balance:.>8.2f}"

हालाँकि, यदि आप भी डॉट्स के दोनों ओर की जगह को शामिल करना चाहते हैं, तो यह मुश्किल हो जाता है। आप अभी भी ऐसा कर सकते हैं, लेकिन अंतराल को भरने से पहले आपको डबल पैड/प्रारूप या संयोजित करने की आवश्यकता है:

"{:.<16s}{:.>9s}".format(f"{customer} ", f" {balance:>.2f}")

लेकिन मुझे इसे और अधिक सुरुचिपूर्ण कहने में कुछ दर्द होगा।

आप वह सब स्वरूपण के साथ भी कर सकते हैं:

# Fill in with calculated number of "."
"{} {} {:.2f}".format(customer,
                      "."*(25 - (2 + len(customer) + len(f"{balance:.2f}"))),
                      balance)
# Similarly used for calculated width to pad with "."
"{} {:.^{}s} {:.2f}".format(customer,
                            "",
                            25 - (2 + len(customer) + len(f"{balance:.2f}")),
                            balance)

लेकिन फिर, और अधिक सुरुचिपूर्ण यह वास्तव में नहीं है।

1
Ondrej K. 4 मार्च 2020, 12:09
यह अधिक सुरुचिपूर्ण नहीं हो सकता है, लेकिन इसने मुझे थोड़ा प्रारूपण के बारे में समझने और सीखने में मदद की, इसलिए यह बहुत बढ़िया है! मैं वास्तव में विस्तृत उत्तर की सराहना करता हूं, यह बहुत मददगार था। अंततः मैंने अमिनर्ड के समाधान का उपयोग करना समाप्त कर दिया क्योंकि यह सरल था और जो मैं चाहता था उसके लिए काम किया, लेकिन मुझे खुशी है कि आपने भी साझा किया।
 – 
MWhizzy
25 नवम्बर 2020, 18:35