Skip to content

Commit a6bab80

Browse files
author
Fernanda Magalhães
committed
Update Cap08
1 parent 6ffa0ce commit a6bab80

35 files changed

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

0 commit comments

Comments
 (0)