Re: [Edu-sig] reviewing the context manager construct
You are working too hard in creating your string literal. The *Python Language Reference Manual* says:
2.4.2. String literal concatenation Multiple adjacent string literals (delimited by whitespace), possibly using different quoting conventions, are allowed, and their meaning is the same as their concatenation. Thus, "hello" 'world' is equivalent to "helloworld". This feature can be used to reduce the number of backslashes needed, to split long strings conveniently across long lines, [...]
Also, the output is hard to really comprehend. So, may I humbly submit... from __future__ import print_function
digits = "1.61803398874989484820458683436563811772030917980576286213544862270526046281890" \ "244970720720418939113748475408807538689175212663386222353693179318006076672635" \ "443338908659593958290563832266131992829026788067520876689250171169620703222104" \ "321626954862629631361443814975870122034080588795445474924618569536486444924104" \ "432077134494704956584678850987433944221254487706647809158846074998871240076521" \ "705751797883416625624940758906970400028121042762177111777805315317141011704666" \ "599146697987317613560067087480710131795236894275219484353056783002287856997829" \
"778347845878228911097625003026961561700250464338243776486102838312683303724292"
import decimal
def compress_print(d): s = str(d) reps = 0 digit = s[2] i = 3 while s[i] == digit: i += 1 reps += 1 return '{} and {} more "{}"s then {}'.format(s[:3], reps, digit, s[i:])
with decimal.localcontext() as context: context.prec = len(digits)-1 phi = decimal.Decimal(digits) id1 = phi**2 + phi**-2 # Identity 1 (== 3) id2 = 8 * phi**2 - phi**6 # Identity 2 (== 3) print('Phi is {} digits long, {}...{}'.format(len(digits) - 1, digits[:5], digits[-5:])) print('The 1st identity is', compress_print(id1)) print('The 2nd identity is', compress_print(id2)) print('Equal?', id1 == id2) print('The difference is=', id2 - id1)
Phi is 624 digits long, 1.618...24292
The 1st identity is 2.9 and 621 more "9"s then 8 The 2nd identity is 3.0 and 620 more "0"s then 2 Equal? False The difference is= 2.2E-622
On Fri, Mar 28, 2014 at 6:04 AM, Vernon D. Cole <vernondcole@gmail.com>wrote:
You are working too hard in creating your string literal.
The *Python Language Reference Manual* says:
2.4.2. String literal concatenation Multiple adjacent string literals (delimited by whitespace), possibly using different quoting conventions, are allowed, and their meaning is the same as their concatenation. Thus, "hello" 'world' is equivalent to "helloworld". This feature can be used to reduce the number of backslashes needed, to split long strings conveniently across long lines, [...]
Right, so no need for all those backslashes: digits = ("1." "61803398874989484820458683436563811772030917980576286213544862270526046281890" "244970720720418939113748475408807538689175212663386222353693179318006076672635" "443338908659593958290563832266131992829026788067520876689250171169620703222104" "321626954862629631361443814975870122034080588795445474924618569536486444924104" "432077134494704956584678850987433944221254487706647809158846074998871240076521" "705751797883416625624940758906970400028121042762177111777805315317141011704666" "599146697987317613560067087480710131795236894275219484353056783002287856997829" "778347845878228911097625003026961561700250464338243776486102838312683303724292")
Also, the output is hard to really comprehend. So, may I humbly submit...
Thanks. Kirby
participants (2)
-
kirby urner -
Vernon D. Cole