import%20marimo%0A%0A__generated_with%20%3D%20%220.8.3%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20mo%2C%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Strings%0A%0A%20%20%20%20%20%20%20%20J%C3%A1%20vimos%20dois%20tipos%20num%C3%A9ricos%20(%60int%60%20e%20%60float%60)%2C%20o%20tipo%20booleano%20(%60bool%60)%2C%20e%20o%20tipo%20%60None%60.%20Python%20tamb%C3%A9m%20tem%20um%20tipo%20para%20representa%C3%A7%C3%A3o%20de%20texto%3A%20as%20strings%2C%20ou%20cadeias%20de%20caracteres%20(em%20Python%2C%20%60str%60).%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20type(1)%2C%20type(1.1)%2C%20type(True)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20string_vazia%20%3D%20''%20%20%23%20ou%20%22%22%0A%20%20%20%20string_caractere%20%3D%20'a'%0A%20%20%20%20hi%20%3D%20%22hi%20%F0%9F%98%87%22%0A%20%20%20%20ol%C3%A1%20%3D%20%22ol%C3%A1%22%0A%20%20%20%20konnichiwa%20%3D%20%22%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%22%20%22%E3%81%8A%E5%AC%A2%E3%81%95%E3%82%93%E3%80%82%22%20%23%20duas%20strings%20seguidas%20s%C3%A3o%20concatenadas%0A%20%20%20%20konnichiwa%0A%20%20%20%20return%20hi%2C%20konnichiwa%2C%20ol%C3%A1%2C%20string_caractere%2C%20string_vazia%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20type('')%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20longlongstring%20%3D%20%22%22%22%0A%20%20%20%20%20%20Uma%20string%20literal%20normal%20n%C3%A3o%20pode%0A%20%20%20%20%20%20%20%20ter%20mais%20de%20uma%20linha%2C%0A%20%20%20%20%20%20%20mas%20a%20com%20aspas%20triplas%20sim!%0A%20%20%20%20%20%20%22%22%22%0A%20%20%20%20longlongstring%0A%20%20%20%20return%20longlongstring%2C%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Por%20que%20temos%20delimitadores%20%60''%60%20e%20%60%22%22%60%3F%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20singlequote%20%3D%20%22Hey%2C%20you%2C%20you're%20finally%20awake%22%0A%20%20%20%20doublequote%20%3D%20'Shakespeare%20wrote%20%22To%20be%2C%20or%20not%20be%22%20in%20Hamlet.'%0A%20%20%20%20singlequote%2C%20doublequote%0A%20%20%20%20return%20doublequote%2C%20singlequote%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Sequ%C3%AAncias%20de%20escape%0A%0A%20%20%20%20%20%20%20%20Alguns%20caracteres%20n%C3%A3o%20s%C3%A3o%20diretamente%20represent%C3%A1veis%20em%20uma%20string%3B%20para%20eles%20usamos%20sequ%C3%AAncias%20de%20escape.%20Aqui%20est%C3%A3o%20algumas%20das%20sequ%C3%AAncias%20mais%20comuns%3A%0A%0A%20%20%20%20%20%20%20%20%7C%20Sequ%C3%AAncia%20de%20Escape%20%7C%20Significado%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20%20%7C-----------------%7C-----------------------------%7C%0A%20%20%20%20%20%20%20%20%7C%20%60%5C%3Cnewline%3E%60%20%20%20%20%20%7C%20Contrabarra%20e%20nova%20linha%20ignoradas%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60%5C%5C%60%20%20%20%20%20%20%20%20%20%20%20%20%7C%20Contrabarra%20(%60%5C%60)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60%5C'%60%20%20%20%20%20%20%20%20%20%20%20%20%7C%20Aspa%20simples%20(%60'%60)%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60%5C%22%60%20%20%20%20%20%20%20%20%20%20%20%20%7C%20Aspa%20dupla%20(%60%22%60)%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60%5Cn%60%20%20%20%20%20%20%20%20%20%20%20%20%7C%20ASCII%20Linefeed%20(LF)%20%3D%20nova%20linha%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20%20%7C%20%60%5Ct%60%20%20%20%20%20%20%20%20%20%20%20%20%7C%20ASCII%20Horizontal%20Tab%20(TAB)%20%20%20%7C%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20%23%20Teste%20deletar%20o%20caractere%20de%20escape%20'%5C'%20e%20veja%20o%20que%20acontece%0A%20%20%20%20works%20%3D%20'Shakespeare%20didn%5C't%20write%20%22You%5C're%20finally%20awake%22%20in%20Hamlet.'%0A%20%20%20%20works%0A%20%20%20%20return%20works%2C%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20%22no%20meio%20do%20caminho%20tinha%20uma%20pedra%5Cntinha%20uma%20pedra%20no%20meio%20do%20caminho%22%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20%22no%20meio%20do%20caminho%20tinha%20uma%20pedra%20%5C%0A%20%20%20%20tinha%20uma%20pedra%20no%20meio%20do%20caminho%22%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Formatted%20strings%20(f-strings)%0A%0A%20%20%20%20%20%20%20%20Para%20colocar%20valores%20em%20strings%20ou%20manipular%20strings%2C%20uma%20forma%20usual%20%C3%A9%20usar%20uma%20f-string.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20%CF%80%20%3D%203.14159%0A%20%20%20%20f'O%20valor%20de%20%CF%80%20%C3%A9%20%7B%CF%80%7D'%0A%20%20%20%20return%20%CF%80%2C%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20nome%20%3D%20'Jo%C3%A3o%20Bosco'%0A%20%20%20%20f%22Meu%20cantor%20favorito%20%C3%A9%20o%20%7Bnome%7D%22%0A%20%20%20%20return%20nome%2C%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20def%20collatz_steps(n)%3A%0A%20%20%20%20%20%20%20%20steps%20%3D%200%0A%20%20%20%20%20%20%20%20while%20n%20%3E%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20n%20%25%202%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20n%20%3D%20n%20%2F%2F%202%0A%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20n%20%3D%203%20*%20n%20%2B%201%0A%20%20%20%20%20%20%20%20%20%20%20%20steps%20%2B%3D%201%0A%20%20%20%20%20%20%20%20return%20steps%0A%20%20%20%20return%20collatz_steps%2C%0A%0A%0A%40app.cell%0Adef%20__(collatz_steps)%3A%0A%20%20%20%20n%20%3D%2010%0A%20%20%20%20f%22A%20sequ%C3%AAncia%20de%20Collatz%20come%C3%A7ando%20em%20%7Bn%7D%20chega%20a%201%20em%20%7Bcollatz_steps(n)%7D%20passos.%22%0A%20%20%20%20return%20n%2C%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Fun%C3%A7%C3%B5es%20de%20strings%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(konnichiwa%2C%20works)%3A%0A%20%20%20%20len(works)%2C%20len(konnichiwa)%20%20%23%20nos%20d%C3%A1%20o%20tamanho%20de%20uma%20string%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20ord('%C3%A7')%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20chr(231)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20chr(ord('a'))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20str.capitalize(%22eu%20me%20chamo%20valter%20hugo%20m%C3%A3e.%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20str.title(%22pulp%20fiction%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20string_com_espacos%20%3D%20%22%20%20%20...%20%20%20%20%20%5Cn%22%0A%20%20%20%20str.strip(string_com_espacos)%2C%20string_com_espacos%0A%20%20%20%20return%20string_com_espacos%2C%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Tamb%C3%A9m%20podemos%20indexar%20strings%2C%20obtendo%20seus%20caracteres%20individuais.%20A%20indexa%C3%A7%C3%A3o%20em%20Python%20%C3%A9%20feita%20usando%20colchetes%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20'ol%C3%A1'%5B2%5D%20%20%23%20indexa%C3%A7%C3%A3o%20come%C3%A7a%20de%200%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20s1%20%3D%20'Os%20mutantes'%0A%20%20%20%20s1%5B4%5D%0A%20%20%20%20return%20s1%2C%0A%0A%0A%40app.cell%0Adef%20__(s1)%3A%0A%20%20%20%20indice%20%3D%205%0A%20%20%20%20s1%5Bindice%20%2B%201%5D%20%23%20tamb%C3%A9m%20podemos%20usar%20vari%C3%A1veis%20e%20express%C3%B5es%20para%20indexar%20uma%20string%0A%20%20%20%20return%20indice%2C%0A%0A%0A%40app.cell%0Adef%20__(s1)%3A%0A%20%20%20%20s1%5B0%3A2%5D%2C%20s1%20%23%20tamb%C3%A9m%20podemos%20indexar%20uma%20substring%20da%20string%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Uma%20string%20%C3%A9%20um%20iter%C3%A1vel%2C%20de%20modo%20que%20podemos%20us%C3%A1-la%20em%20um%20loop%20%60for%60%20para%20iterar%20sobre%20seus%20caracteres%20constituintes%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(s1)%3A%0A%20%20%20%20for%20char%20in%20s1%3A%0A%20%20%20%20%20%20%20%20print(char)%0A%20%20%20%20return%20char%2C%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Podemos%20iterar%20usando%20%60range%60%20tamb%C3%A9m%2C%20naturalmente.%20Para%20isso%20precisamos%20de%20usar%20%60len%60%20para%20termos%20o%20tamanho%20da%20string%3B%20note%20que%20como%20%60range(n)%60%20%C3%A9%20o%20intervalo%20%24%5B0%2C%20n)%24%20e%20a%20indexa%C3%A7%C3%A3o%20de%20Python%20come%C3%A7a%20em%20zero%2C%20podemos%20fazer%20simplesmente%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(s1)%3A%0A%20%20%20%20for%20idx%20in%20range(len(s1))%3A%0A%20%20%20%20%20%20%20%20print(s1%5Bidx%5D)%0A%20%20%20%20return%20idx%2C%0A%0A%0A%40app.cell%0Adef%20__(s1)%3A%0A%20%20%20%20for%20ix_%2C%20ch%20in%20enumerate(s1)%3A%0A%20%20%20%20%20%20%20%20print(ix_%20%2B%201%2C%20ch)%0A%20%20%20%20return%20ch%2C%20ix_%0A%0A%0A%40app.cell%0Adef%20__(konnichiwa)%3A%0A%20%20%20%20str.isalpha('a')%2C%20str.isalpha('a')%2C%20str.isalpha(konnichiwa%5B5%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20str.islower('a')%2C%20str.islower('A')%2C%20str.isupper('R')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%20I%2FO%20b%C3%A1sico%0A%0A%20%20%20%20%20%20%20%20Usaremos%20duas%20fun%C3%A7%C3%B5es%20nativas%20(%60built-in%60)%20do%20Python%20para%20fazermos%20I%2FO%20(entrada%20e%20sa%C3%ADda)%20de%20valores.%0A%0A%20%20%20%20%20%20%20%20Quando%20executamos%20um%20script%20Python%20com%20o%20c%C3%B3digo%20abaixo%2C%20n%C3%A3o%20obtemos%20resposta%20alguma%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%2010%20**%2010%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20Vemos%20o%20resultado%20aqui%20e%20no%20console%20Python%20pois%20estes%20ambientes%20'printam'%20o%20resultado%20automaticamente%20para%20n%C3%B3s%2C%20mas%20como%20podemos%20verificar%2C%20isso%20n%C3%A3o%20acontece%20quando%20executamos%20o%20script%20diretamente%20com%0A%0A%20%20%20%20%20%20%20%20%60%60%60bash%0A%20%20%20%20%20%20%20%20python%20teste.py%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Uma%20forma%20de%20printar%20resultados%20%C3%A9%20com%20a%20fun%C3%A7%C3%A3o%20nativa%20%60print%60.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20print(10**10)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20N%C3%A3o%20parece%20haver%20diferen%C3%A7a%20no%20console%20Python%2C%20mas%20coloque%20o%20c%C3%B3digo%20acima%20no%20arquivo%20%60teste.py%60%2C%20execute-o%20novamente%20com%20o%20interpretador%20Python%20e%20veja%20que%20h%C3%A1%20diferen%C3%A7a.%0A%0A%20%20%20%20%20%20%20%20Mesmo%20no%20console%20h%C3%A1%20diferen%C3%A7a%3A%20a%20fun%C3%A7%C3%A3o%20%60print%60%20n%C3%A3o%20produz%20resultado%20(n%C3%A3o%20tem%20%60return%60).%20Veja%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20a%20%3D%20print(10**10)%0A%20%20%20%20a%20%3D%3D%2010%20**%2010%0A%20%20%20%20return%20a%2C%0A%0A%0A%40app.cell%0Adef%20__(a)%3A%0A%20%20%20%20a%20is%20None%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%20N%C3%A3o%20confunda%20print%20com%20retorno!%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Para%20obtermos%20valores%20do%20usu%C3%A1rio%20em%20um%20programa%20interativo%2C%20podemos%20usar%20a%20fun%C3%A7%C3%A3o%20nativa%20%60input%60.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(collatz_steps)%3A%0A%20%20%20%20num%20%3D%20input(%22Me%20diz%20um%20n%C3%BAmero%3A%20%22)%0A%20%20%20%20print(f%22Voc%C3%AA%20sabia%20que%20a%20sequ%C3%AAncia%20de%20Collatz%20come%C3%A7ando%20em%20%7Bnum%7D%20chega%20a%201%20em%20%7Bcollatz_steps(int(num))%7D%20passos%3F%22)%0A%20%20%20%20return%20num%2C%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Note%20que%20%C3%A9%20necess%C3%A1rio%20em%20muitos%20casos%20converter%20valores%20de%20strings%20para%20outros%20tipos.%20Para%20isso%20usamos%20a%20fun%C3%A7%C3%A3o%20com%20o%20nome%20do%20tipo%20(por%20exemplo%2C%20%60int(3)%60)%2C%20mas%20cuidado%3A%20essas%20fun%C3%A7%C3%B5es%20podem%20falhar.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20bool('True')%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20int('212.1')%20%20%23%20erro%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20int(1.10)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20float('1.1')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20Exerc%C3%ADcios%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%23%20Ex.%201%0A%0A%20%20%20%20%20%20%20%20Crie%20uma%20fun%C3%A7%C3%A3o%20que%20verifica%20se%20uma%20string%20%C3%A9%20um%20pal%C3%ADndromo.%0A%0A%20%20%20%20%20%20%20%20%3E%20Uma%20palavra%20pal%C3%ADndroma%20%C3%A9%20aquela%20cuja%20sequ%C3%AAncia%20de%20letras%20%C3%A9%20sim%C3%A9trica%2C%20permitindo%20uma%20leitura%20id%C3%AAntica%20da%20esquerda%20para%20a%20direita%20ou%20da%20direita%20para%20a%20esquerda%3A%20ovo%2C%20osso%2C%20reler%2C%20anilina.%0A%0A%20%20%20%20%20%20%20%20%3Cdetails%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Csummary%3EDica%201%3C%2Fsummary%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20Uma%20palavra%20de%20um%20caractere%20s%C3%B3%20(%3Ccode%3Elen(s)%20%3D%3D%201%3C%2F%3E)%20%C3%A9%20sempre%20pal%C3%ADndroma.%20Se%20assumirmos%20que%20a%20palavra%20%C3%A9%20pal%C3%ADndroma%20at%C3%A9%20um%20certo%20caractere%2C%20como%20podemos%20checar%20se%20ela%20%C3%A9%20pal%C3%ADndroma%20at%C3%A9%20o%20caractere%20seguinte%3F%20Voc%C3%AA%20consegue%20transformar%20essa%20ideia%20numa%20fun%C3%A7%C3%A3o%20recursiva%20para%20checar%20se%20uma%20palavra%20%C3%A9%20pal%C3%ADndroma%3F%0A%20%20%20%20%20%20%20%20%3C%2Fdetails%3E%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20def%20palindromo(s)%3A%0A%20%20%20%20%20%20%20%20pass%0A%20%20%20%20return%20palindromo%2C%0A%0A%0A%40app.cell%0Adef%20__(palindromo)%3A%0A%20%20%20%20palindromo('ovo')%2C%20not%20palindromo('rel%C3%B3gio')%2C%20palindromo('aabbcc')%20%23%20testes%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%23%20Ex.%202%0A%0A%20%20%20%20%20%20%20%20Crie%20uma%20fun%C3%A7%C3%A3o%20%60taxa_de_performance%60%20que%20calcula%20a%20taxa%20de%20performance%20de%20um%20fundo%20de%20investimento%20e%20o%20montante%20l%C3%ADquido%20resultante%2C%20dadas%20as%20taxas%20de%20valoriza%C3%A7%C3%A3o%20do%20fundo%20e%20a%20de%20seu%20benchmark%2C%20al%C3%A9m%20do%20valor%20da%20taxa%20de%20performance%20e%20o%20do%20capital%20inicialmente%20investido.%0A%0A%20%20%20%20%20%20%20%20Note%20que%20a%20taxa%20de%20performance%20%C3%A9%20cobrada%20sobre%20a%20parcela%20da%20rentabilidade%20do%20fundo%20que%20excede%20a%20varia%C3%A7%C3%A3o%20do%20benchmark.%0A%0A%20%20%20%20%20%20%20%20Escreva%20ent%C3%A3o%20uma%20fun%C3%A7%C3%A3o%20interativa%20que%20l%C3%AA%20(usando%20%60input%60)%20os%20argumentos%20da%20fun%C3%A7%C3%A3o%20%60taxa_de_performance%60%2C%20e%20printa%20seu%20resultado.%20Para%20facilitar%20seu%20uso%20pelo%20usu%C3%A1rio%2C%20leia%20as%20taxas%20como%20percentuais%20(por%20exemplo%2C%205%25%20de%20valoriza%C3%A7%C3%A3o%20%C3%A9%20convertido%20para%200.05).%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20def%20taxa_de_performance(capital%2C%20valorizacao_capital%2C%20valorizacao_benchmark%2C%20taxa)%3A%0A%20%20%20%20%20%20%20%20pass%0A%20%20%20%20return%20taxa_de_performance%2C%0A%0A%0A%40app.cell%0Adef%20__(taxa_de_performance)%3A%0A%20%20%20%20taxa_de_performance(capital%3D100%2C%20valorizacao_capital%3D0.08%2C%20valorizacao_benchmark%3D0.04%2C%20taxa%3D0.2)%20%3D%3D%200.8%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%23%20Ex.%203%0A%0A%20%20%20%20%20%20%20%20Crie%20uma%20fun%C3%A7%C3%A3o%20que%20verifica%20os%20requerimentos%20de%20seguran%C3%A7a%20de%20uma%20senha.%20Ela%20deve%20checar%3A%0A%0A%20%20%20%20%20%20%20%20-%20se%20a%20senha%20tem%20pelo%20menos%20um%20caractere%20mai%C3%BAsculo%3B%0A%20%20%20%20%20%20%20%20-%20se%20a%20senha%20tem%20pelo%20menos%20um%20s%C3%ADmbolo%3B%0A%20%20%20%20%20%20%20%20-%20se%20a%20senha%20tem%20pelo%20menos%20um%20n%C3%BAmero%3B%0A%20%20%20%20%20%20%20%20-%20se%20a%20senha%20tem%20pelo%20menos%208%20caracteres%20no%20total%20(use%20a%20fun%C3%A7%C3%A3o%20%60len%60).%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%23%20Ex.%204%0A%0A%20%20%20%20%20%20%20%20Crie%20uma%20fun%C3%A7%C3%A3o%20que%20verifica%20a%20validade%20de%20um%20CPF%20(recebido%20como%20string%2C%20podendo%20estar%20formatado%20como%20%60123.456.789-09%60).%20Use%20a%20fun%C3%A7%C3%A3o%20%60str.replace%60%20para%20remover%20pontos%20e%20h%C3%ADfen%2C%20e%20aplique%20o%20algoritmo%20de%20verifica%C3%A7%C3%A3o%20descrito%20na%20%5Bwikip%C3%A9dia%5D(https%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FCadastro_de_Pessoas_F%25C3%25ADsicas%23C%25C3%25A1lculo_do_d%25C3%25ADgito_verificador).%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A