Skip to content

Commit 6b7c134

Browse files
author
DSA Data Ops
committed
Update Version 3
1 parent 8d2c749 commit 6b7c134

File tree

6 files changed

+1149
-0
lines changed

6 files changed

+1149
-0
lines changed
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# <font color='blue'>Data Science Academy - Python Fundamentos - Capítulo 7</font>\n",
8+
"\n",
9+
"## Download: http://github.com/dsacademybr"
10+
]
11+
},
12+
{
13+
"cell_type": "code",
14+
"execution_count": 1,
15+
"metadata": {},
16+
"outputs": [
17+
{
18+
"name": "stdout",
19+
"output_type": "stream",
20+
"text": [
21+
"Versão da Linguagem Python Usada Neste Jupyter Notebook: 3.8.8\n"
22+
]
23+
}
24+
],
25+
"source": [
26+
"# Versão da Linguagem Python\n",
27+
"from platform import python_version\n",
28+
"print('Versão da Linguagem Python Usada Neste Jupyter Notebook:', python_version())"
29+
]
30+
},
31+
{
32+
"cell_type": "markdown",
33+
"metadata": {},
34+
"source": [
35+
"## Missão: Implementar um algoritmo para determinar se uma string possui todos os caracteres exclusivos."
36+
]
37+
},
38+
{
39+
"cell_type": "markdown",
40+
"metadata": {},
41+
"source": [
42+
"## Nível de Dificuldade: Baixo"
43+
]
44+
},
45+
{
46+
"cell_type": "markdown",
47+
"metadata": {},
48+
"source": [
49+
"## Premissas\n",
50+
"\n",
51+
"* Podemos assumir que a string é ASCII?\n",
52+
"     * Sim\n",
53+
"     * Nota: As cadeias de caracteres Unicode podem exigir tratamento especial dependendo do seu idioma\n",
54+
"* Podemos supor que há distinção entre maiúsculas e minúsculas?\n",
55+
"     * Sim\n",
56+
"* Podemos usar estruturas de dados adicionais?\n",
57+
"     * Sim"
58+
]
59+
},
60+
{
61+
"cell_type": "markdown",
62+
"metadata": {},
63+
"source": [
64+
"## Teste Cases\n",
65+
"\n",
66+
"* None -> False\n",
67+
"* '' -> True\n",
68+
"* 'foo' -> False\n",
69+
"* 'bar' -> True"
70+
]
71+
},
72+
{
73+
"cell_type": "markdown",
74+
"metadata": {},
75+
"source": [
76+
"## Algoritmo: Hash Map Lookup\n",
77+
"\n",
78+
"Manteremos um mapa hash (conjunto) para rastrear os caracteres únicos que encontramos.\n",
79+
"\n",
80+
"Passos:\n",
81+
"* Faça um scan cada caracter\n",
82+
"* Para cada caracter:\n",
83+
"     * Se o caracter não existir em um mapa de hash, adicione o caractere a um mapa de hash\n",
84+
"     * Senão, retorne False\n",
85+
"* Retornar Verdadeiro\n",
86+
"\n",
87+
"Nota:\n",
88+
"* Também podemos usar um dicionário, mas parece mais lógico usar um set, pois ele não contém elementos duplicados"
89+
]
90+
},
91+
{
92+
"cell_type": "markdown",
93+
"metadata": {},
94+
"source": [
95+
"## Solução"
96+
]
97+
},
98+
{
99+
"cell_type": "code",
100+
"execution_count": null,
101+
"metadata": {},
102+
"outputs": [],
103+
"source": [
104+
"class UniqueChars(object):\n",
105+
"\n",
106+
" def has_unique_chars(self, string):\n",
107+
" # Implemente aqui sua solução"
108+
]
109+
},
110+
{
111+
"cell_type": "markdown",
112+
"metadata": {},
113+
"source": [
114+
"## Teste da Solução"
115+
]
116+
},
117+
{
118+
"cell_type": "code",
119+
"execution_count": null,
120+
"metadata": {},
121+
"outputs": [],
122+
"source": [
123+
"%%writefile missao1.py\n",
124+
"from nose.tools import assert_equal\n",
125+
"\n",
126+
"\n",
127+
"class TestUniqueChars(object):\n",
128+
"\n",
129+
" def test_unique_chars(self, func):\n",
130+
" assert_equal(func(None), False)\n",
131+
" assert_equal(func(''), True)\n",
132+
" assert_equal(func('foo'), False)\n",
133+
" assert_equal(func('bar'), True)\n",
134+
" print('Sua solução foi executada com sucesso! Parabéns!')\n",
135+
"\n",
136+
"\n",
137+
"def main():\n",
138+
" test = TestUniqueChars()\n",
139+
" try:\n",
140+
" unique_chars = UniqueChars()\n",
141+
" test.test_unique_chars(unique_chars.has_unique_chars)\n",
142+
" except NameError:\n",
143+
" pass\n",
144+
"\n",
145+
"\n",
146+
"if __name__ == '__main__':\n",
147+
" main()"
148+
]
149+
},
150+
{
151+
"cell_type": "code",
152+
"execution_count": null,
153+
"metadata": {},
154+
"outputs": [],
155+
"source": [
156+
"%run -i missao1.py"
157+
]
158+
},
159+
{
160+
"cell_type": "markdown",
161+
"metadata": {},
162+
"source": [
163+
"## Fim"
164+
]
165+
},
166+
{
167+
"cell_type": "markdown",
168+
"metadata": {},
169+
"source": [
170+
"\n",
171+
"### Obrigado\n",
172+
"\n",
173+
"### Visite o Blog da Data Science Academy - <a href=\"http://blog.dsacademy.com.br\">Blog DSA</a>\n"
174+
]
175+
}
176+
],
177+
"metadata": {
178+
"kernelspec": {
179+
"display_name": "Python 3",
180+
"language": "python",
181+
"name": "python3"
182+
},
183+
"language_info": {
184+
"codemirror_mode": {
185+
"name": "ipython",
186+
"version": 3
187+
},
188+
"file_extension": ".py",
189+
"mimetype": "text/x-python",
190+
"name": "python",
191+
"nbconvert_exporter": "python",
192+
"pygments_lexer": "ipython3",
193+
"version": "3.8.8"
194+
}
195+
},
196+
"nbformat": 4,
197+
"nbformat_minor": 1
198+
}

0 commit comments

Comments
 (0)