TALES can't handle few cases that happen often and seem quite reasonable to do in templates.
It can't compare values:
<option tal:repeat="opt options" tal:attributes="selected php:opt == selected_option"/>
<title tal:condition="php:count(allimages)==1">Photo</title> <title tal:condition="php:count(allimages) GT 1">${php:count(allimages)} photos</title>
It doesn't have logic expressions:
<div tal:condition="php:canShowFoo AND foo.isAvailable()">
It can't compute values conditionally:
<tr tal:repeat="row rows" tal:attributes="class php:repeat.row.odd ? 'odd' : 'even'"/>
It can't pass arguments to functions:
<h1 tal:content="php:substr(header, 0,100)"/>
<div tal:content="structure php:getAdvert(PAGE_TOP)">
1