Best Python code snippet using SeleniumBase
acabado3.py
Source:acabado3.py
1# TAD- Posição2 # Funções de Baixo Nivel34def cria_posicao(x, y):5 # Cria uma posição atravez de coordenadas dadas: int x int --> posicao6 # A representação interna das posições é um dict7 if type(x) != int or type(y) != int:8 raise ValueError('cria_posicao: argumentos invalidos')9 if x < 0 or y < 0:10 raise ValueError('cria_posicao: argumentos invalidos')11 return {'x': x, 'y': y}121314def obter_pos_x(pos):15 # Dá o valor de x de uma posição: posicao --> int16 # Não sei se para os testes faz diferença a ordem destas 3 posições (ERRO?)17 return pos['x']181920def obter_pos_y(pos):21 # Dá o valor de y de uma posição: posicao --> int22 return pos['y']232425def cria_copia_posicao(pos):26 # Cria uma cópia de uma posição: posicao --> posicao27 return cria_posicao(obter_pos_x(pos), obter_pos_y(pos))282930def eh_posicao(pos):31 # Verifica se o input é uma posição segundo a representação interna: universal --> booleano32 try:33 cria_copia_posicao(pos)34 except Exception:35 return False36 else:37 return True383940def posicoes_iguais(pos1, pos2):41 # Vê se as posições são iguais: posicao x posicao --> boolean42 return obter_pos_y(pos1) == obter_pos_y(pos2) and obter_pos_x(pos1) == obter_pos_x(pos2)434445def posicao_para_str(pos):46 # Converte a posição num string: posicao --> str47 return f'({obter_pos_x(pos)}, {obter_pos_y(pos)})'4849 # Funções de Alto Nivel505152def obter_posicoes_adjacentes(pos):53 # Dá um tuplo com as posições adjacentes, começando por cima e vai pelo sentido do relógio: posicao --> tuplo54 # Tenho ainda de validar as posições adjacentes (ERRO?)55 # Não deixa ir para montanhas56 posis = ()57 if obter_pos_y(pos) >= 2:58 c = cria_posicao(obter_pos_x(pos), obter_pos_y(pos) - 1)59 posis += (c,)60 d = cria_posicao(obter_pos_x(pos) + 1, obter_pos_y(pos))61 b = cria_posicao(obter_pos_x(pos), obter_pos_y(pos) + 1)62 posis += (d, b)63 if obter_pos_x(pos) >= 2:64 e = cria_posicao(obter_pos_x(pos) - 1, obter_pos_y(pos))65 posis += (e,)66 return posis676869def ordenar_posicoes(tup):70 # Ordena um tuplo de posições pela ordem de leitura do plado: tuple --> tuple71 # Tens de validar o tuplo de posições primeiro (ERRO?)72 lista = []73 listaord = []74 for pos in tup:75 pos = posicao_para_str(pos)76 pos = pos.replace('(', '')77 pos = pos.replace(')', '')78 pos = pos.replace(' ', '')79 pos = pos.split(',')80 lista += [[int(x) for x in pos]]81 lista = sorted(lista, key=lambda x: (x[1], x[0]))82 for pos in lista:83 listaord += [cria_posicao(pos[0], pos[1])]84 listaord = tuple(listaord)85 return listaord868788# TAD- Animal89 # Funções de Baixo Nivel9091def cria_animal(s, r, a): # s--> espécie, r--> freq.reprodução, a--> freq.alimentação (IMPORTANTE!)92 # cria um animal qualquer: str x int x int --> animal93 # se a > 0 é um predador94 if type(s) != str or type(r) != int or type(a) != int:95 raise ValueError('cria_animal: argumentos invalidos')96 if r <= 0 or a < 0 or len(s) < 1:97 raise ValueError('cria_animal: argumentos invalidos')98 return {'s': s, 'r': r, 'a': a, 'fome': 0, 'idade': 0}99100101def cria_copia_animal(animal):102 # Cria uma copia, independente, do animal: animal --> animal103 return cria_animal(animal['s'], animal['r'], animal['a'])104105106def obter_especie(animal):107 # Devolve a especie do animal: animal --> str108 return animal['s']109110111def obter_freq_reproducao(animal):112 # Devolve a frequencia de reprodução do animal: animal --> int113 return animal['r']114115116def obter_freq_alimentacao(animal):117 # Devolve a frequencia de alimentação do animal: animal --> int118 return animal['a']119120121def obter_idade(animal):122 # Devolve a idade do animal: animal --> int123 return animal['idade']124125126def obter_fome(animal):127 # Devolve a fome do animal: animal --> int128 return animal['fome']129130131def aumenta_idade(animal):132 # Incrementa a idade do animal por 1: animal --> animal133 animal['idade'] += 1134 return animal135136137def reset_idade(animal):138 # Retorna a idade do animal a zero: animal --> animal139 animal['idade'] = 0140 return animal141142143def aumenta_fome(animal):144 # # Incrementa a fome do animal por 1: animal --> animal145 if animal['a'] != 0:146 animal['fome'] += 1147 return animal148149150def reset_fome(animal):151 # Retorna a fome do animal a zero: animal --> animal152 animal['idade'] = 0153 return animal154155156def eh_animal(animal):157 # Verifica se o animal é do tipo TAD: animal --> boolean158 try:159 cria_copia_animal(animal)160 except Exception:161 return False162 else:163 return True164165166def eh_predador(animal):167 # Verifica se o animal é predador (se sim dá verdadeiro): animal --> boolean168 if eh_animal(animal):169 return obter_freq_alimentacao(animal) != 0170 else: return False171172173def eh_presa(animal):174 # Verifica se o animal é presa (se sim dá verdadeiro): animal --> boolean175 if eh_animal(animal):176 return obter_freq_alimentacao(animal) == 0177 else:178 return False179180181def animais_iguais(animal1, animal2):182 # Verifica se dois animais são iguais: animal x animal --> bolean183 # Não sei se é preciso serem da mesma idade e terem a mesma fome para serem iguais (ERRO?)184 if eh_animal(animal1) and eh_animal(animal2):185 return all([obter_freq_alimentacao(animal1) == obter_freq_alimentacao(animal2),186 obter_freq_reproducao(animal1) == obter_freq_reproducao(animal2),187 obter_especie(animal1) == obter_especie(animal2),188 obter_fome(animal1) == obter_fome(animal2),189 obter_idade(animal1) == obter_idade(animal2)])190 else: return False191192193def animal_para_char(animal):194 # Dá a inicial da especie do anima, maiuscula se predador, minuscola se presa: animal --> str195 if eh_presa(animal):196 return obter_especie(animal)[0].lower()197 if eh_predador(animal):198 return obter_especie(animal)[0].upper()199200201def animal_para_str(animal):202 """ Mostra a informação do animal numa str do tipo 'especie [idade/freq.reprodução{;fome/freq.alimentação}]:'203 animal --> str"""204 if eh_presa(animal):205 return f'{obter_especie(animal)} [{obter_idade(animal)}/{obter_freq_reproducao(animal)}]'206 if eh_predador(animal):207 return f'{obter_especie(animal)} [{obter_idade(animal)}/{obter_freq_reproducao(animal)};\208{obter_fome(animal)}/{obter_freq_alimentacao(animal)}]'209210211 # Funções de Alto nivel212213def eh_animal_fertil(animal):214 # Verifica se o animal já alcançou a idade de reprodução ou nao: animal --> boolean215 return obter_idade(animal) >= obter_freq_reproducao(animal)216217218def eh_animal_faminto(animal):219 """ Verifica se o animal tem um valor de fome superior ou igual não de frequencia de alimentação:220 animall --> boolean"""221 if eh_predador(animal):222 return obter_fome(animal) >= obter_freq_alimentacao(animal)223 if eh_presa(animal):224 return False225226227def reproduz_animal(animal):228 # Cria um animal novo igual ao primeiro e retorna a idade do primeiro a 0: animal --> animal229 animal2 = cria_copia_animal(animal)230 reset_idade(animal)231 return animal2232233234# TAD- Prado235 #Funções de baixo nivel236237def cria_prado(d, r, a, p):238 """Cria um prado que tem as dimenções da pradaria - d, as posições de rochedos - r, todos os aimais - a e todas239 as posicões correspondentes a cada animal - p: posicao x tuple x tuple x tuple --> prado"""240 # Não sei se está tudo validado nem se a valda_pos está bem chamada (ERRO?)241 # Também não sei se posso alterar a ordem da func.copia e dos seletores (ERRO?)242 if not all([eh_posicao(d), type(r) == tuple, type(a) == tuple, type(p) == tuple]):243 raise ValueError('cria_prado: argumentos invalidos')244 if obter_pos_x(d) < 3 or obter_pos_y(d) < 3:245 raise ValueError('cria_prado: argumentos invalidos')246 if len(r) < 0 or len(a) < 1 or len(a) != len(p):247 raise ValueError('cria_prado: argumentos invalidos')248 if len(r) != 0:249 if not all([eh_posicao(x) for x in r]):250 raise ValueError('cria_prado: argumentos invalidos')251 if not all([eh_animal(x) for x in a]):252 raise ValueError('cria_prado: argumentos invalidos')253 if not all([eh_posicao(x) for x in p]):254 raise ValueError('cria_prado: argumentos invalidos')255256 def valida_pos(t): # Não sei se isto funciona (ERRO?)257 if not all([obter_pos_y(x) < obter_pos_y(d) and obter_pos_x(x) < obter_pos_x(d) and \258 obter_pos_y(x) > 0 and obter_pos_x(x) > 0 for x in t]):259 raise ValueError('cria_prado: argumentos invalidos')260261 valida_pos(r)262 valida_pos(p)263 if len(r) + len(a) > obter_pos_x(d) * obter_pos_y(d):264 raise ValueError('cria_prado: argumentos invalidos')265 #_Validações_são_tudo_para_cima266 return {'d': d, 'r': r, 'a': a, 'p': p}267268269def cria_copia_prado(m):270 # Cria uma nova cópia do prado: prado --> prado271 d = m['d']272 r = m['r']273 a = m['a']274 p = m['p']275 return cria_prado(d, r, a, p)276277278def obter_tamanho_x(m):279 # Dá a dimenção no eixo x do prado a contar com as montanhas: prado --> int280 return (obter_pos_x(m['d']) + 1)281282283def obter_tamanho_y(m):284 # Dá a dimenção no eixo y do prado a contar com as montanhas: prado --> int285 return (obter_pos_y(m['d']) + 1)286287288def obter_numero_predadores(m):289 # Dá o numero de predadores presentes no prado: prado --> int290 return len([x for x in m['a'] if eh_predador(x)])291292293def obter_numero_presas(m):294 # Dá o numero de predadores presentes no prado: prado --> int295 return len([x for x in m['a'] if eh_presa(x)])296297298def obter_posicao_animais(m):299 # Dá um tuplo com as posições dos animais no prado, ordenadas por ordem de leitura: prado --> tuple posicoes300 return ordenar_posicoes(m['p'])301302303def indice_posicao(m, p):304 # Dá o indice da posição, ou animal do prado: prado x posicao --> int305 x = 0306 for v in m['p']:307 if posicoes_iguais(v, p):308 return x309 x += 1310311312def obter_animal(m, p):313 # Dá o animal que está numa dada posição do prado: prado x posicao --> animal314 return m['a'][indice_posicao(m, p)]315316317def eliminar_animal(m, p):318 # Elimina o animal da posição,deixando-a livre: prado x posicao --> posicao319 m['a'] = m['a'][:indice_posicao(m, p)] + m['a'][(indice_posicao(m, p) + 1):]320 m['p'] = m['p'][:indice_posicao(m, p)] + m['p'][(indice_posicao(m, p) + 1):]321322323def mover_animal(m, p1, p2):324 # Altera a posição de um animal: prado x posicao x posicao --> prado325 m['p'] = m['p'][:indice_posicao(m, p1)] + (p2,) + m['p'][indice_posicao(m, p1) + 1:]326 return m327328329def inserir_animal(m, a, p):330 # Adiciona ao prado o animal a na posição p: prado x animal x posicao --> prado331 m['p'] = m['p'] + (p,)332 m['a'] = m['a'] + (a,)333 return m334335336def eh_prado(m):337 # Verifica se m é um TAD prado, dá True se sim: universal --> boolean338 try:339 cria_copia_prado(m)340 except Exception:341 return False342 else:343 return True344345346def eh_posicao_animal(m, p):347 # Verifica se a posição p está ocupada por um animal: prado x posicao --> boolean348 return p in m['p']349350351def eh_posicao_obstaculo(m, p):352 # Verifica se a posição p está ocupada por um obstaculo: prado x posicao --> boolean353 if not eh_posicao(p):354 return False355 return any([p in m['r'], obter_pos_y(p) == 0, obter_pos_x(p) == 0,356 obter_pos_x(p) == (obter_tamanho_x(m) - 1), obter_pos_y(p) == (obter_tamanho_y(m) - 1)])357358359def eh_posicao_livre(m, p):360 # Verifica se a posição é válida e está livre: prado x posicao --> boolean361 return all([obter_pos_y(p) < obter_tamanho_y(m) - 1, obter_pos_x(p) < obter_tamanho_x(m) - 1,362 obter_pos_y(p) > 0, obter_pos_x(p) > 0,363 not eh_posicao_obstaculo(m, p),364 not eh_posicao_animal(m, p)])365366367def prados_iguais(m1, m2):368 # Verifica se os dois prados são iguais: prado x prado --> boolean369 if not eh_prado(m1) or not eh_prado(m2):370 return False371 return all([obter_tamanho_x(m1) == obter_tamanho_x(m2), obter_tamanho_y(m1) == obter_tamanho_y(m1),372 m1['r'] == m2['r'], m1['a'] == m2['a'], m1['p'] == m2['p']])373374375def prado_para_str(m):376 # Converte o prado numa imagem que o representa: prado --> str377 """O raciocinio aqui foi criar uma lista_coordenadas com todas as coordenadas do prado. Depois troca-se cada378 coordenada pela figura correspondente. Isto foi feito ora a verificar se a coordenada estava ocupada, ora vendo se379 ela estava numa lista de coordenadas conhecidas.380 Eu sei que há maneiras mil vezes melhores de fazer isto, mas esta foi a unica em que consegui pensar."""381 cantos = []382 cantos.append(cria_posicao(0, 0))383 cantos.append(cria_posicao(obter_tamanho_x(m) - 1, 0))384 cantos.append(cria_posicao(obter_tamanho_x(m) - 1, obter_tamanho_y(m) - 1))385 cantos.append(cria_posicao(0, obter_tamanho_y(m) - 1))386387 lados_x = []388 for x in range(1, obter_tamanho_x(m) - 1):389 lados_x.append(cria_posicao(x, 0))390 lados_x.append(cria_posicao(x, obter_tamanho_y(m) - 1))391392 lados_y = []393 for y in range(1, obter_tamanho_y(m) - 1):394 lados_y.append(cria_posicao(0, y))395 lados_y.append(cria_posicao(obter_tamanho_x(m) - 1, y))396397 lista_cord = []398 for l in range(obter_tamanho_y(m) + 1 - 1): # linha399 for c in range(obter_tamanho_x(m) + 1 - 1):400 lista_cord.append(cria_posicao(c, l))401 lista_cord.append('\n')402 # ^ é um mapa posições403 i = 0404 for pos in lista_cord:405 if pos in cantos:406 lista_cord.insert(i, '+')407 lista_cord.pop(i + 1)408 i += 1409 elif pos in lados_y:410 lista_cord.insert(i, '|')411 lista_cord.pop(i + 1)412 i += 1413 elif pos in lados_x:414 lista_cord.insert(i, '-')415 lista_cord.pop(i + 1)416 i += 1417 elif eh_posicao_obstaculo(m, pos):418 lista_cord.insert(i, '@')419 lista_cord.pop(i + 1)420 i += 1421 elif eh_posicao_animal(m, pos):422 lista_cord.insert(i, animal_para_char(obter_animal(m, pos)))423 lista_cord.pop(i + 1)424 i += 1425 elif pos != '\n':426 lista_cord.insert(i, '.')427 lista_cord.pop(i + 1)428 i += 1429 else:430 i += 1431 lista_cord = lista_cord[:-1]432 imagem_prado = ''.join(lista_cord)433 return imagem_prado434435436 # Funções de Alto nivel437438def obter_valor_numerico(m, p):439 # Devolve o número de ordem de leitura correspondente à coordenada: prado x posicao --> int440 return (obter_tamanho_x(m)) * obter_pos_y(p) + obter_pos_x(p)441442443def obter_movimento(m, p):444 # Devolve a posição para que o animal se vai mover asseguir: prado x posicao --> posicao445 # Escolhi não fazer uma função interna porque os predadores precisão do for para contar as presas446 x = 0447 pa = list(obter_posicoes_adjacentes(p)) # posições adjacentes, numa lista448 pe = []449 for pos in pa: # validar pa, porque pode ser a baixo do prado450 if not obter_pos_x(pos) < (obter_tamanho_x(m) - 1) or not obter_pos_y(pos) < (obter_tamanho_y(m) - 1):451 x += 1452 else:453 pe.append(pos)454 x += 1455 pa = pe456 if eh_predador(obter_animal(m, p)):457 x = 0458 presas = []459 pe = []460 for pos in pa:461 if not eh_posicao_obstaculo(m, pos):462 pe.append(pos)463 if eh_posicao_animal(m, pos):464 if not eh_predador(obter_animal(m, pos)):465 pe.append(pos)466 if eh_presa(obter_animal(m, pos)):467 presas.append(pos)468 x += 1469 pa = pe470 if len(presas) >= 1:471 n = obter_valor_numerico(m, p) % len(presas)472 return presas[n]473 elif len(pa) != 0: # if len(presas) == 0474 n = obter_valor_numerico(m, p) % len(pa)475 return pa[n]476 else:477 return p478479 if eh_presa(obter_animal(m, p)): # é mais fácil entender o das presas primeiro480 x = 0481 pe = []482 for pos in pa:483 if not eh_posicao_obstaculo(m, pos) and not eh_posicao_animal(m, pos):484 pe.append(pos)485 x += 1486 pa = pe487 if len(pa) != 0:488 n = obter_valor_numerico(m, p) % len(pa)489 return pa[n]490 else:491 return p492493494# Funções adicionais495496def geracao(m):497 val = []498 for pos in obter_posicao_animais(m):499 if pos not in val:500 aumenta_idade(obter_animal(m, pos))501 aumenta_fome(obter_animal(m, pos))502 if eh_animal_fertil(obter_animal(m, pos)): # Nascimento503 if pos == obter_movimento(m, pos):504 val.append(pos)505 pos2 = pos506 elif eh_presa(obter_animal(m, pos)):507 pos2 = obter_movimento(m, pos)508 val.append(pos2)509 val.append(pos)510 mover_animal(m, pos, pos2)511 inserir_animal(m, reproduz_animal(obter_animal(m, pos2)), pos)512 elif eh_predador(obter_animal(m, pos)):513 pos2 = obter_movimento(m, pos)514 val.append(pos2)515 val.append(pos)516 reproduz_animal(obter_animal(m, pos))517 mover_animal(m, pos, pos2) # houve aqui duvidas518519 elif eh_posicao_animal(m, obter_movimento(m, pos)) and not posicoes_iguais(pos, obter_movimento(m, pos)):520 pos2 = obter_movimento(m, pos)521 if eh_presa(obter_animal(m, pos2)): # Movimento + Comer522 reset_fome(obter_animal(m, pos))523 eliminar_animal(m, pos2)524 mover_animal(m, pos, pos2)525 val.append(pos2)526527 else:528 pos2 = obter_movimento(m, pos)529 mover_animal(m, pos, pos2)530 val.append(pos2)531532 if eh_animal_faminto(obter_animal(m, pos2)): # Morte por fome533 eliminar_animal(m, pos2) # referenced before assignment, mas como todos dão pos2 devia dar534 return m535536537def simula_ecossistema(f, g, v):538 # Simula o ecossistema e retorna o numero de predadores e presas: str x int x booblean --> tuple539 # f-> nome doc.txt, g-> nº gerações, -> modo verboso/quiet (verboso mostra o prado, os nº de animais e a geração540 # sempre que o nº de animais muda541542 def str_inicial(npredadores, npresas):543 return print(f'Predadores: {npredadores} vs Presas: {npresas} (Gen. 0) \n{prado_para_str(m)}')544545546 with open(f, 'r') as file:547 dr = file.readline()548 d = dr.replace('(', '').replace(')', '').replace('\n', '')549 d = d.split(',')550 d = cria_posicao(int(d[0]), int(d[1])) #___551 rr = file.readline()552 r = rr.replace('(', '').replace(')', '').replace('\n', '')553 r = r.split(',')554 pos = ()555 for n in range(0, len(r), 2):556 pos += (cria_posicao(int(r[n]), int(r[n + 1])),)557 r = pos558 a = ()559 p = ()560 for animal in file.readlines():561 anir = animal562 ani = anir.replace('\n', '').replace('(', '').replace(')', '').replace("'", '')563 ani = ani.split(',')564 a += (cria_animal(ani[0], int(ani[1]), int(ani[2])),)565 p += (cria_posicao(int(ani[3]), int(ani[4])),)566 m = cria_prado(d, r, a, p)567 npresas = obter_numero_presas(m)568 npredadores = obter_numero_predadores(m) #___569 if v:570 str_inicial(npredadores, npresas)571 for i in range(1, g + 1):572 geracao(m)573 novpresas = obter_numero_presas(m)574 novpredadores = obter_numero_predadores(m)575 if novpresas != npresas or novpredadores != npredadores:576 print(f'Predadores: {novpredadores} vs Presas: {novpresas} (Gen. {i}) \n{prado_para_str(m)}')577 npresas = novpresas578 npredadores = novpredadores579 print((npredadores, npresas))580 else:581 str_inicial(npredadores, npresas)582 for i in range(1, g + 1):583 geracao(m)584 npredadores = obter_numero_predadores(m)585 npresas = obter_numero_presas(m)586 str_inicial(npredadores, npresas)587 print((npredadores, npresas))588
...
arvore_binaria_busca.py
Source:arvore_binaria_busca.py
1#!/usr/bin/env python32# -*- coding: utf-8 -*-3"""4Created on Wed May 18 21:04:33 20225@author: estanislau6"""7class Nó:8 9 def __init__(self, chave):10 self.chave = chave11 self.filho_esquerda = None12 self.filho_direita = None13 14 def obter_chave(self):15 return self.chave16 17 def inserir_chave(self, chave):18 self.chave = chave19 20 def obter_filho_esquerda(self):21 return self.filho_esquerda22 23 def inserir_filho_esquerda(self, esquerda):24 self.filho_esquerda = esquerda25 26 def obter_filho_direita(self):27 return self.filho_direita28 29 def inserir_filho_direita(self, direita):30 self.filho_direita = direita31 32class Arvore_Binaria_Busca:33 34 def __init__(self):35 self.raiz = None36 37 def inserir_na_arvore(self, chave):38 nó = Nó(chave) # Cria um novo nó39 40 if self.raiz is None:41 self.raiz = nó42 43 else:44 # árvore não vazia, insere recursivamente45 46 nó_pai = None47 nó_atual = self.raiz48 49 while True:50 51 if nó_atual != None:52 53 nó_pai = nó_atual54 55 # verifica se vai para esquerda ou direita56 if nó.obter_chave() < nó_atual.obter_chave():57 nó_atual = nó_atual.obter_filho_esquerda() # vai para esquerda58 else:59 nó_atual = nó_atual.obter_filho_direita() # vai para direta60 else:61 62 # Se atual é None, então encontrou onde inserir63 if nó.obter_chave() < nó_pai.obter_chave():64 nó_pai.inserir_filho_esquerda(nó) # vai para esquerda65 else:66 nó_pai.inserir_filho_direita(nó) # vai para direta67 68 break69 70 71 def remover_na_arvore(self, chave):72 nó_pai = None73 nó_atual = self.raiz74 75 while nó_atual != None:76 if chave == nó_atual.obter_chave():77 78 # nó a ser removido não possui filhos (nó folha)79 if nó_atual.obter_filho_esquerda() == None and nó_atual.obter_filho_direita() == None:80 81 # verifica se é a raiz82 if nó_pai == None:83 self.raiz = None84 else:85 # verifica se é fiho a direita ou a esquerda86 if nó_pai.obter_filho_esquerda() == nó_atual:87 nó_pai.inserir_filho_esquerda(None)88 elif nó_pai.obter_filho_direita() == nó_atual:89 nó_pai.inserir_filho_direita(None)90 91 # nó a ser removido possui somente um filho 92 elif (nó_atual.obter_filho_esquerda() == None and nó_atual.obter_filho_direita() != None) or \93 (nó_atual.obter_filho_esquerda() != None and nó_atual.obter_filho_direita() == None):94 # verifica se é a raiz95 if nó_pai == None:96 if nó_atual.obter_filho_esquerda() != None:97 self.raiz = nó_atual.obter_filho_esquerda()98 else:99 self.raiz = nó_atual.obter_filho_direita()100 else:101 # verifica se o filho do nó_atual é o fiho da esquerda102 if nó_atual.obter_filho_esquerda() != None:103 if nó_pai.obter_filho_esquerda() and nó_pai.obter_filho_esquerda().obter_chave() == nó_atual.obter_chave():104 nó_pai.inserir_filho_esquerda(nó_atual.obter_filho_esquerda())105 else:106 nó_pai.inserir_filho_direita(nó_atual.obter_filho_esquerda())107 108 else: # senão o filho do nó_atual é o fiho da direita109 # verifica se nó atual é filho à esquerda 110 if nó_pai.obter_filho_esquerda() and nó_pai.obter_filho_esquerda().obter_chave() == nó_atual.obter_chave():111 nó_pai.inserir_filho_esquerda(nó_atual.obter_filho_direita())112 else:113 nó_pai.inserir_filho_direita(nó_atual.obter_filho_direita())114 115 # nó a ser removido possui dois filhos116 elif (nó_atual.obter_filho_esquerda() != None and nó_atual.obter_filho_direita() != None):117 118 nó_pai_menor = nó_atual119 nó_menor = nó_atual.obter_filho_direita()120 proximo_menor = nó_atual.obter_filho_direita().obter_filho_esquerda()121 122 while proximo_menor != None:123 nó_pai_menor = nó_menor124 nó_menor = proximo_menor125 proximo_menor = nó_menor.obter_filho_esquerda126 127 # verifica se o nó a ser removido é a raiz128 if nó_pai == None:129 130 # Caso especial: o nó que ser a nova raiz é o filho da raiz131 if self.raiz.obter_filho_direita().obter_chave() == nó_menor.obter_chave():132 nó_menor.inserir_filho_esquerda(self.raiz.obter_filho_esquerda())133 else:134 # Verifica se o nó_menor é filho à esquerda ou à direita para setar para None o nó_menor135 if nó_pai_menor.obter_filho_esquerda() and nó_pai_menor.obter_filho_esquerda().obter_chave() == nó_menor.obter_chave():136 nó_pai_menor.inserir_filho_esquerda(None)137 else:138 nó_pai_menor.inserir_filho_direita(None)139 140 # seta os filhos á direita e esquerda de nó_menor141 nó_menor.inserir_filho_esquerda(nó_atual.obter_filho_esquerda())142 nó_menor.inserir_filho_direita(nó_atual.obter_filho_direita())143 144 # faz com que o nó_menor seja a raiz145 self.raiz = nó_menor146 147 else:148 # verifica se nó_atual é filho à esquerda ou à direita para setar o nó_menor como filho149 # do pai do nó_atual150 if nó_pai.obter_filho_esquerda() and nó_pai.obter_filho_esquerda().obter_chave() == nó_atual.obter_chave():151 nó_pai.inserir_filho_esquerda(nó_menor)152 else:153 nó_pai.inserir_filho_direita(nó_menor)154 155 # verifica se o nó_menor é filho à esquerda ou à direita para setar para None o nó_menor156 if nó_pai_menor.obter_filho_esquerda() and nó_pai_menor.obter_filho_esquerda().obter_chave() == nó_menor.obter_chave():157 nó_pai_menor.inserir_filho_esquerda(None)158 else:159 nó_pai_menor.inserir_filho_direita(None)160 161 # seta os filhos á direita e esquerda de nó_menor162 nó_menor.inserir_filho_esquerda(nó_atual.obter_filho_esquerda())163 nó_menor.inserir_filho_direita(nó_atual.obter_filho_direita())164 165 break166 167 nó_pai = nó_atual168 # verifica se vai para esquerda ou direita169 if chave < nó_atual.obter_chave():170 # vai para esquerda171 nó_atual = nó_atual.obter_filho_esquerda()172 else:173 # vai para direita174 nó_atual = nó_atual.obter_filho_direita()175 176 177 def mostrar(self, nó_atual):178 179 if nó_atual != None:180 print(nó_atual.obter_chave(), end=' ')181 self.mostrar(nó_atual.obter_filho_esquerda())182 self.mostrar(nó_atual.obter_filho_direita())183 184 def obter_raiz(self):185 return self.raiz186 187abb = Arvore_Binaria_Busca()188abb.inserir_na_arvore(8)189abb.inserir_na_arvore(3)190abb.inserir_na_arvore(1)191abb.inserir_na_arvore(6)192abb.inserir_na_arvore(4)193abb.inserir_na_arvore(7)194abb.inserir_na_arvore(10)195abb.inserir_na_arvore(14)196abb.inserir_na_arvore(13)197abb.remover_na_arvore(8)198abb.mostrar(abb.obter_raiz())...
lab06.py
Source:lab06.py
1class Medalutador:2 def __init__(self, ID, H, Hi, K, BonusA, BonusD, T, Bd, Be, P, Medapeca= 'D2'):3 self.ID = ID4 self.H = H #valor da habilidade inicial, mas que pode ser alterado devido às batalhas5 self.Hi = H #valor da habilidade inicial, que não irá ser modificado, para possibilitar comparações6 self.K = K7 self.BonusA = BonusA8 self.BonusD = BonusD9 self.T = T10 self.Bd = Bd11 self.Be = Be12 self.P = P13 self.Medapeca = Medapeca #valor qualquer que irá ser alterado14 def obter_ID(self):15 return self.ID16 def obter_H(self):17 return self.H18 def obter_Hi(self):19 return self.Hi20 def obter_BonusA(self):21 return self.BonusA22 def obter_BonusD(self):23 return self.BonusD24 def obter_T(self):25 return self.T[0]26 def obter_Bd(self):27 return self.Bd[0]28 def obter_Be(self):29 return self.Be[0]30 def obter_P(self):31 return self.P[0]32 def obter_K(self):33 return self.K34 def obter_ataque (self):35 A = self.BonusA + self.Bd[0] + self.Be[0]36 return A37 def obter_defesa (self):38 D = self.BonusD + self.T[0] + self.P[0]39 return D 40 def obter_Medapeca(self):41 return self.Medapeca42 def altera_H (self, novo_H):43 self.H = novo_H44 def altera_Medapeca (self, nova_Medapeca):45 self.Medapeca = nova_Medapeca46 def adiciona_T (self, novo_T):47 self.T.append(novo_T)48 self.T = ordena (self.T)49 def remove_T (self):50 self.T.pop(0)51 def adiciona_Be (self, novo_Be):52 self.Be.append(novo_Be)53 self.Be = ordena (self.Be)54 def remove_Be (self):55 self.Be.pop(0)56 def adiciona_Bd (self, novo_Bd):57 self.Bd.append(novo_Bd)58 self.Bd = ordena (self.Bd)59 def remove_Bd (self):60 self.Bd.pop(0)61 def adiciona_P (self, novo_P):62 self.P.append(novo_P)63 self.P = ordena (self.P)64 def remove_P (self):65 self.P.pop(0)66class Torneio (Medalutador):67 def __init__ (self):68 self.lista_de_medalutadores = []69 def adiciona_medalutador (self, medalutador):70 self.lista_de_medalutadores.append(medalutador)71def ordena (lista):72 ''' Ordena os valores de uma lista de forma decrescente.'''73 lista1 = []74 for x in lista:75 lista1.append(x)76 lista_ordenada = sorted(lista1, reverse=True)77 return lista_ordenada78#separando os dados:79contador = 080torneio = Torneio ()81n = int(input()) #entrada numero medalutadores82lista1 = []83lista2 = []84torso = []85b_esquerdo = []86b_direito = []87pernas = []88while contador < n:89 lista1.append (str(input())) #entrada H, K, M90 separados = lista1[contador].split(' ')91 habilidade = int(separados[0])92 recuperacao = int(separados[1])93 num_medapecas = int(separados[2])94 num = 095 bonus = str(input())96 separar = bonus.split(' ')97 bonus_ataque = int(separar [0])98 bonus_defesa = int(separar [1])99 while num < num_medapecas:100 lista2.append (str(input())) #entrada medapeças101 separados2 = lista2[num].split(' ')102 if separados2[0] == 'T':103 torso.append(int(separados2[1]))104 elif separados2[0] == 'D':105 b_direito.append(int(separados2[1])) 106 elif separados2[0] == 'E':107 b_esquerdo.append(int(separados2[1]))108 else: #pernas109 pernas.append(int(separados2[1]))110 num +=1111 112 medalutador = Medalutador (ID = contador+1, H= habilidade, Hi= habilidade, K= recuperacao, BonusA= bonus_ataque, BonusD= bonus_defesa, T=ordena(torso), Bd=ordena(b_direito), Be=ordena(b_esquerdo), P=ordena(pernas) )113 torneio.adiciona_medalutador(medalutador)114 lista2.clear()115 torso.clear()116 b_direito.clear()117 b_esquerdo.clear()118 pernas.clear()119 contador += 1 120def medapeca_ganha (vencedor, perdedor):121 '''Define qual medapeca é de mais vantajosa para o vencedor. Retira tal medapeca do perdedor e dá ao vencedor.'''122 torso = perdedor.obter_T() - vencedor.obter_T()123 braco_esquerdo = perdedor.obter_Be() - vencedor.obter_Be()124 braco_direito = perdedor.obter_Bd() - vencedor.obter_Bd()125 pernas = perdedor.obter_P() - vencedor.obter_P()126 if torso >= braco_esquerdo and torso >= braco_direito and torso >= pernas:127 vencedor.altera_Medapeca('T'+ str(perdedor.obter_T()))128 vencedor.adiciona_T(perdedor.obter_T())129 perdedor.remove_T()130 elif braco_esquerdo > torso and braco_esquerdo >= braco_direito and braco_esquerdo >= pernas:131 vencedor.altera_Medapeca('E'+ str(perdedor.obter_Be()))132 vencedor.adiciona_Be(perdedor.obter_Be())133 perdedor.remove_Be()134 elif braco_direito > torso and braco_direito > braco_esquerdo and braco_direito >= pernas:135 vencedor.altera_Medapeca('D'+ str(perdedor.obter_Bd()))136 vencedor.adiciona_Bd(perdedor.obter_Bd())137 perdedor.remove_Bd()138 else: #pernas é maior139 vencedor.altera_Medapeca('P'+ str(perdedor.obter_P()))140 vencedor.adiciona_P(perdedor.obter_P())141 perdedor.remove_P() 142def batalhar (i, j):143 '''Faz a batalha entre os medalutadores i e j, define quem vence e perde, e altera as habilidades e as medapecas conforme isso.'''144 if (i.obter_ataque() > j.obter_defesa() or j.obter_ataque() > i.obter_defesa()) and (i.obter_ataque() - j.obter_defesa()) != (j.obter_ataque() - i.obter_defesa()):145 if (i.obter_ataque() - j.obter_defesa()) > (j.obter_ataque() - i.obter_defesa()):146 vencedor = i147 perdedor = j148 else:149 vencedor = j150 perdedor = i151 elif i.obter_H() != j.obter_H():152 if i.obter_H() > j.obter_H():153 vencedor = i154 perdedor = j155 else:156 vencedor = j 157 perdedor = i158 else:159 if i.obter_ID() < j.obter_ID():160 vencedor = i161 perdedor = j162 else:163 vencedor = j164 perdedor = i 165 if vencedor.obter_H() >= perdedor.obter_H():166 vencedor.altera_H(vencedor.obter_H() - perdedor.obter_H())167 else:168 vencedor.altera_H(0)169 perdedor.altera_H(perdedor.obter_H()//2)170 if vencedor.obter_H() + vencedor.obter_K() < vencedor.obter_Hi():171 vencedor.altera_H(vencedor.obter_H() + vencedor.obter_K())172 173 else:174 vencedor.altera_H(vencedor.obter_Hi())175 if perdedor.obter_H() + perdedor.obter_K() < perdedor.obter_Hi():176 perdedor.altera_H(perdedor.obter_H() + perdedor.obter_K())177 else:178 perdedor.altera_H(perdedor.obter_Hi())179 medapeca_ganha (vencedor, perdedor)180 return vencedor 181def imprimir_ficha_tecnica (i,j):182 print(f'\tA{i.obter_ID()} = E{i.obter_Be()} + D{i.obter_Bd()} + {i.obter_BonusA()} = {i.obter_ataque()}')183 print(f'\tD{i.obter_ID()} = T{i.obter_T()} + P{i.obter_P()} + {i.obter_BonusD()} = {i.obter_defesa()}')184 print(f'\tH{i.obter_ID()} = {i.obter_H()}')185 print(f'\tA{j.obter_ID()} = E{j.obter_Be()} + D{j.obter_Bd()} + {j.obter_BonusA()} = {j.obter_ataque()}')186 print(f'\tD{j.obter_ID()} = T{j.obter_T()} + P{j.obter_P()} + {j.obter_BonusD()} = {j.obter_defesa()}')187 print(f'\tH{j.obter_ID()} = {j.obter_H()}')188 189def imprimir_resultado_da_batalha (k):190 print(f'Medalutador {k.obter_ID()} venceu e recebeu a {k.obter_Medapeca()}\n')191def simular_torneios_de_cyberlutas(lista_de_medalutadores):192 lista_torneio_principal = []193 lista_de_repescagem = []194 for medalutador in lista_de_medalutadores:195 lista_torneio_principal.append(medalutador)196 while len(lista_torneio_principal) >= 2 or len(lista_de_repescagem) >= 2:197 lista_torneio_principal = aplicar_rodada_de_batalhas(lista_torneio_principal, lista_de_repescagem)198 lista_de_repescagem = aplicar_rodada_de_batalhas(lista_de_repescagem, None)199 i = lista_torneio_principal.pop(0)200 j = lista_de_repescagem.pop(0)201 print('Cyberluta Final')202 print(f'Medalutadores: {i.obter_ID()} vs {j.obter_ID()}')203 imprimir_ficha_tecnica(i, j)204 k = batalhar(i, j)205 print(f'Campeao: medalutador {k.obter_ID()}')206def aplicar_rodada_de_batalhas(lista_de_medalutadores, lista_de_repescagem):207 if len(lista_de_medalutadores) < 2:208 return lista_de_medalutadores209 lista_de_vencedores = []210 while len(lista_de_medalutadores) >= 2:211 i = lista_de_medalutadores.pop(0) 212 j = lista_de_medalutadores.pop(0)213 if i.obter_ID() > j.obter_ID():214 i, j = j, i215 if lista_de_repescagem != None:216 print('Cyberluta do Torneio Principal')217 else:218 print('Cyberluta da Repescagem')219 print(f'Medalutadores: {i.obter_ID()} vs {j.obter_ID()}')220 imprimir_ficha_tecnica(i, j)221 k = batalhar(i, j)222 imprimir_resultado_da_batalha(k)223 if lista_de_repescagem != None:224 if i == k:225 lista_de_repescagem.append(j)226 else:227 lista_de_repescagem.append(i)228 lista_de_vencedores.append(k)229 lista_de_vencedores.extend(lista_de_medalutadores)230 return lista_de_vencedores...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!