Os telefones

Post on 28-Nov-2014

909 views 2 download

description

Palestra relâmpago realizada no I Toró de palestras do PUG-PE (28/11)

Transcript of Os telefones

Os Telefones Rodrigo Lira

Rodrigo LiraAluno do 5º período de Engenharia da Computação na UPE.

Conheci python no final de 2008.

Participa dos grupos Python Poli e do PUG-PE.

http://tiny.cc/rodrigolira

Os Telefones

Na pacata campestre vila de Arquivonaoencontradoville, todos os telefones têm 6 dígitos. A companhia telefônica estabelece as seguintes regras sobre os números:

Não pode haver dois dígitos consecutivos idênticos, porque isso é chato.

A soma dos dígitos tem que ser par, porque isso é legal.

O último dígito não pode ser igual ao primeiro, porque isso dá azar.

Então, dadas essas regras perfeitamente razoáveis, bem projetadas e maduras, quantos números de telefone na lista abaixo são válidos?

215228, 218415, 221632, 224722, 229644, 230847, 233798, 237903, 239224, 241832, 242112, 243248, 246147, 247652, 250688, 252940, 255721, 256882, 259134, 262578, 263327, 266656, 268796, 270350, 272863, 275245, 278601, 278606, 281963, 283751, 288259, 291562, 296545, 298528, 302103, 303431, 307561, 311979, 315548, 320440, 322278, 324469, 324740, 327417, 330263, 331179, 334147, 334932, 336085, 338096, 338106, 342991, 347187, 347590, 348863, 350187, 353246, 354032, 358616, 363056, 363251, 366141, 369906, 371046, 372684, 377077, 381177, 382086, 385627, 385694, 386105, 388179, 390251, 392624, 394225, 395328, 398698, 400102, 404224, 408064, 410386, 411711, 413621, 415653, 417168, 419269, 424197, 427202, 430639, 432570, 437462, 442412, 444990, 447613, 452039, 456750, 459927, 462532, 465756, 467051, 468297, 469089, 471562, 474900, 475534, 476833, 478910, 480437, 482085, 485647, 487736, 489897, 493033, 495182, 498463, 502539, 502785, 505926, 508246, 511720, 515395, 515595, 516362, 520927, 525025, 529957, 530139, 531015, 533760, 534588, 538184, 541403, 542913, 546141, 548038, 549095, 552509, 556808, 560382, 563503, 565304, 567165, 567675, 572218, 573856, 576408, 578085, 578997, 579553, 584487, 589220, 590967, 593234, 597867, 599823, 603666, 607878, 611482, 611854, 612811, 614119, 615956, 617547, 621070, 621309, 626105, 626885, 631080, 635911, 639606, 640175, 641607, 645158, 647958, 652199, 656507, 658615, 662663, 662947, 664704, 666668, 667544, 669440, 673512, 675931, 676963, 677113, 678606, 682716, 682998, 684883, 686140, 688963, 689054, 692042, 695458, 697031, 697457, 697623, 698026

Filter

FilterAplicação de filtro

Tem como retorno uma sequência formada por todos os itens em que func(item) é True.

filter(função ou None,seq)

#Palíndromosfilter(lambda x: x[::-1]==x,["casa","ovo","palavra","radar"])['ovo', 'radar']

LambdaFunção anônima.

Seu corpo deve conter apenas expressão.

Não possui a instrução return.

Seguem o modelo:

lambda arg1,arg2,arg3,argn: expressão

Separar os telefones

telefones = “215228, 218415”

telefone.split(',')

['215228', ' 218415']

O último dígito não pode ser igual ao primeiro

telefone = “215228”

telefone[0]!=telefone[-1]

True

A soma dos dígitos tem que ser par

telefone = “215228”

sum(int(d) for d in telefone)%2==0

True

ZipRetorna uma lista cujos elementos são tuplas resultantes de cada um dos elementos de uma ou mais sequências de entrada seq1, seq2, seqN.

zip(seq1,seq2,seqn)

Exemplo:zip(('a','b'),[1,2])[('a', 1), ('b', 2)]

Não pode haver dois dígitos consecutivos idênticos

telefone = “215228”

all(a!=b for a,b in zip(telefone,telefone[1:]))#[('2', '1'), ('1', '5'), ('5', '2'), ('2', '2'), ('2', '8')]

False

Script