Jump to content

Lógica números primos


MarioJaa

Postagens Recomendadas

olá, tenho esse código que me mostra os numeros primos que estão dentro de um arquivo txt.

O problema é que, não consigo mudar para me mostrar os numeros que não são primos do arquivo.

quero deletar a linha do arquivo que possui algum numero primo e mostrar em outro arquivo somente os numeros que sobraram após deletar a linha que possui algum numero primo.

def verificaPrimo(num):

    return all(num%g!=0 for g in range(2,num)) and num > 1



def obtemNumeros(nomeArquivo):

    with open(nomeArquivo, "r") as f:

      for i in f:

        yield i.split()



nomeArquivo = "numeros.txt"

texto = ''

for numeros in obtemNumeros(nomeArquivo):

    texto += '{}\n'.format(' '.join([g for g in numeros if verificaPrimo(int(g))]))#filtra os primos

print(texto.strip(), file=open("resultPrimos.txt", 'w'))

conteudo do arquivo "numeros.txt"

10 20 30 25 98 1000
1 0 -1 9 20
2 3 0 31
4 999 26
8 997 20 30 234
161 6376

 

o que deveria ser impresso:

10 20 30 25 98 1000

1 0 -1 9 20

4 999 26

161 6376

 

o que o codigo acima imprime:

 

2 3 31

997
 

Link to comment
Compartilhe em outros sites

  • MarioJaa mudou o título para Lógica números primos
  • Pessoal da TecnoSpeed

Olá @MarioJaa, tudo bem ?

Não entendi muito bem o ultimo for ali, porém alterei o código de modo com que funcionou, talvez você consiga ter uma ideia ao analisar o código abaixo. 😅

Utilizei de outra lógica para resolver isso.

  • Transformei cada linha do numeros.txt em um array (lista)
  • Após isso realizei um for dentro dessa lista criada, e com base nesse for criei uma nova lista somente com os valores não primos.
  • Após isso, transformei a lista em str e adicionei o '\n' para quebrar a linha
def verificaPrimo(num):
    return all(num%g!=0 for g in range(2,num)) and num > 1
 
# Abrir o arquivo
arquivo = open('numeros.txt').read()

#Criar uma lista geral, contendo cada linha do txt como uma nova lista

# Resultado disso é arquivo = ['10 20 30 25 98 1000', '1 0 -1 9 20' ...]
arquivo = arquivo.split('\n')  
# Resultado disso é lista = [ ['10','20','30','25','98','1000'] , ['1','0','-1','9','20'] ...]
lista = [texto.split(' ') for texto in arquivo]


# Criar o loop para extrair somente os não primos
lista_nao_primo = []

# Primeiro FOR: percorrer dentro da listas [ [linha1],[linha2],[linha3] ...]
for linha in lista:
    linha_nao_primos = []
    
    # Segundo For: percorrer dentro de cada llinha
    for numero in linha:   
      	#Verificar se é primo
        if verificaPrimo(int(numero)) == False:
          	#Extrair os não primos
            linha_nao_primos.append(numero)     
   	#Adicionar na lista geral       
    lista_nao_primo.append(linha_nao_primos)
    
# Agora basta criar o arquivo
# Primeiro transformar a lista em string, adicionando o '\n' para quebrar a linha
texto = ''
for linha in lista_nao_primo:
    texto += ' '.join(linha) + '\n'

# Criar o arquivo
print(texto,file=open('resultado.txt','w'))

Código só parece grande, mas é porque tenho costume de comentar quase tudo 😅.
Enfim o resultado foi esse. . image.png

Caso fique com qualquer dúvida em relação ao código acima ou em qualquer outra coisa, basta me chamar.
Também estou a disposição para quaisquer outras dúvidas que possam surgir. 😀

 

Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...