-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
237 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
""" | ||
Dada uma string que contenha números, obter a soma e o produto dos | ||
números inteiros contidos na string. | ||
A função deve receber uma string e retornar uma tupla com o resultado. | ||
Caso a string não possua números, deve-se retonar None e não a tupla. | ||
Exemplos: | ||
a8b2 -> (10, 16) | ||
nnn -> None | ||
a101 1 -> (102, 101) | ||
>>> valor_da_soma("a8n2") | ||
10 | ||
>>> valor_da_soma("a8n3") | ||
11 | ||
>>> valor_da_soma("a101 1") | ||
102 | ||
>>> valor_da_soma("1000") | ||
1000 | ||
>>> valor_da_soma("") | ||
>>> valor_da_mul("a8n2") | ||
16 | ||
>>> valor_da_mul("a8n3") | ||
24 | ||
>>> valor_da_mul("a101 8") | ||
808 | ||
>>> valor_da_mul("1") | ||
1 | ||
>>> valor_da_mul("8") | ||
8 | ||
>>> valor_da_mul("") | ||
>>> resultado("a8b2") | ||
(10, 16) | ||
>>> resultado("a8b3") | ||
(11, 24) | ||
>>> resultado("abc") | ||
>>> resultado("a101 1") | ||
(102, 101) | ||
>>> extrai_numeros("a8b2") | ||
[8, 2] | ||
>>> extrai_numeros("a8b3") | ||
[8, 3] | ||
>>> extrai_numeros("aaaa") | ||
[] | ||
>>> extrai_numeros("") | ||
[] | ||
""" | ||
|
||
def valor_da_soma(string): | ||
numeros = extrai_numeros(string) | ||
return sum(numeros) if len(numeros) > 0 else None | ||
|
||
def valor_da_mul(string): | ||
numeros = extrai_numeros(string) | ||
if len(numeros) == 0: | ||
return None | ||
resultado = 1 | ||
for valor in numeros: | ||
resultado *= valor | ||
return resultado | ||
|
||
def resultado(string): | ||
soma, multi = valor_da_soma(string), valor_da_mul(string) | ||
if all([soma, multi]): | ||
return soma, multi | ||
return | ||
|
||
def extrai_numeros(string): | ||
numeros = [] | ||
atual = "" | ||
for caracter in string: | ||
if caracter.isnumeric(): | ||
atual += caracter | ||
else: | ||
if atual != "": | ||
numeros.append(int(atual)) | ||
atual = "" | ||
if atual != "": | ||
numeros.append(int(atual)) | ||
return numeros |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
""" | ||
Um endereço IPv4 é representado como quatro números decimais separados por pontos. | ||
Cada número deve estar no intervalo de 0 a 255. | ||
Por exemplo, 192.168.0.1 é um endereço IPv4 válido, enquanto 256.100.50.0 não é. | ||
A função deve receber uma string e retornar uma tupla. | ||
O primeiro elemento da tupla deve ser um booleano (True se a string for um endereço | ||
IPv4 válido, False caso contrário). | ||
O segundo elemento deve ser uma mensagem de erro detalhando o motivo da falha, | ||
ou None se for válido. | ||
"192.168.0.1" -> (True, None) | ||
"256.100.50.0" -> (False, "Um ou mais octetos estão fora do intervalo de 0 a 255") | ||
"192.168.0" -> (False, "Formato incorreto, deve ter exatamente 4 octetos") | ||
"192.168.0.abc" -> (False, "Um ou mais octetos não são números inteiros") | ||
>>> is_ipv4("192.168.0.1") | ||
True | ||
>>> is_ipv4("192.168.0") | ||
False | ||
>>> is_ipv4("192.168.0.abc") | ||
False | ||
>>> is_ipv4("192.168.999.999") | ||
False | ||
>>> error("192.168.999.999") | ||
'Um ou mais octetos estão fora do intervalo de 0 a 255' | ||
>>> error("192.168.0") | ||
'Formato incorreto, deve ter exatamente 4 octetos' | ||
>>> error("192.168.0.abc") | ||
'Um ou mais octetos não são números inteiros' | ||
>>> error("192.168.0.1") | ||
'' | ||
>>> resultado("192.168.0.1") | ||
(True, None) | ||
>>> resultado("192.168.0") | ||
(False, 'Formato incorreto, deve ter exatamente 4 octetos') | ||
>>> resultado("192.168.0.abc") | ||
(False, 'Um ou mais octetos não são números inteiros') | ||
""" | ||
|
||
def is_ipv4(ip): | ||
valores = ip.split(".") | ||
if len(valores) != 4: | ||
return False | ||
for valor in valores: | ||
if not valor.isnumeric(): | ||
return False | ||
if not (0 <= int(valor) <= 255): | ||
return False | ||
return True | ||
|
||
def error(ip): | ||
valores = ip.split(".") | ||
if len(valores) != 4: | ||
return "Formato incorreto, deve ter exatamente 4 octetos" | ||
for valor in valores: | ||
if not valor.isnumeric(): | ||
return "Um ou mais octetos não são números inteiros" | ||
if not (0 <= int(valor) <= 255): | ||
return "Um ou mais octetos estão fora do intervalo de 0 a 255" | ||
return '' | ||
|
||
def resultado(ip): | ||
return (is_ipv4(ip), error(ip) if error(ip) else None) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
""" | ||
Um endereço IPv6 é representado como oito grupos de quatro dígitos hexadecimais | ||
separados por dois pontos. Os dígitos podem incluir números de 0 a 9 e letras de | ||
A a F (maiúsculas ou minúsculas). | ||
Por exemplo, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 é um endereço IPv6 válido, | ||
enquanto 2001:db8:85a3::8a2e:370g:7334 não é. | ||
A função deve receber uma string e retornar uma tupla. O primeiro elemento da | ||
tupla deve ser um booleano (True se a string for um endereço IPv6 válido, False | ||
caso contrário). | ||
O segundo elemento deve ser uma mensagem de erro detalhando o motivo da falha, | ||
ou None se for válido. | ||
"2001:0db8:85a3:0000:0000:8a2e:0370:7334" -> (True, None) | ||
"2001:db8:85a3:0:0:8a2e:370g:7334" -> (False, "Um ou mais grupos contêm caracteres inválidos") | ||
"2001:0db8:85a3" -> (False, "Formato incorreto, deve ter exatamente 8 grupos") | ||
>>> erro("2001:db8:85a3:0:0:8a2e:370a:7334") | ||
>>> erro("2001:db8:85a3:0:0:8a2g:370a:7334") | ||
'Um ou mais grupos contêm caracteres inválidos' | ||
>>> erro("2001:0db8:85a3") | ||
'Formato incorreto, deve ter exatamente 8 grupos' | ||
>>> is_ipv6("2001:db8:85a3:0:0:8a2e:370a:7334") | ||
(True, None) | ||
>>> is_ipv6("2001:db8:85a3:0:0:8a2g:370a:7334") | ||
(False, 'Um ou mais grupos contêm caracteres inválidos') | ||
>>> is_ipv6("2001:db8:85a3:0:0:8a2a:370a") | ||
(False, 'Formato incorreto, deve ter exatamente 8 grupos') | ||
""" | ||
|
||
def erro(ip): | ||
if ip.count(":") != 7: | ||
return 'Formato incorreto, deve ter exatamente 8 grupos' | ||
validos = "0123456789abcdefABCDEF:" | ||
for valor in ip: | ||
if valor not in validos: | ||
return 'Um ou mais grupos contêm caracteres inválidos' | ||
return | ||
|
||
def is_ipv6(ip): | ||
err = erro(ip) | ||
return (err is None, err) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
## O que foi bom? | ||
- Vários aprendizados | ||
|
||
## O que podemos melhorar? | ||
- Mais gente, divulgar melhor | ||
|
||
## O que aprendemos? | ||
- Função all | ||
- return implicito | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters