To be fair, that's not quite the same as perl/shell-style interpolation.
In perl, "$x" pulls the value of $x from the variable namespace. In your Py2.6 example, the "{x}" format in the string has nothing to do with a variable named x; rather it references the keyword args supplied to format.
He converted to string before he attempted the add so it isn't a strong type vs weak type issue. It is a they haven't overloaded the + operator to perform string append. Which may or may not be logical.
Poster asked why he has to type print "x="+str(x).
I assumed he would like to just type print "x="+x.
For that code to work str.__add__(self,x) should accept int as parameter x.
If that was the case, then "3" + 7 would return "37" (ok, I've thought it will be "10", my bad :)), but 7 + "3" would still cast exception. So + would be not symmetric.
If you want Python to "be smart enough to cast x automatically", then you want a weakly typed language. Weakly typed languages are difficult to reason about.
For example, should "3" == 3? Should 3 automatically be converted to "3" in that instance, or vice-versa?