bernardus Posted December 10, 2009 at 02:59 AM Report #299548 Posted December 10, 2009 at 02:59 AM Boas. Antes de mais os parabens pelo excelente trabalho realizado. A minha duvida é a seguinte. Eu gostava de fazer um script em python para fazer o seguinte. 10 ou mais variaveis. Eu sei a variavel final mas nao sei que como chegar a variavel final. ex. x y z eu sei que a soma de isto é (vamos supor) A mas vamos imaginar que existe mais variaveis alem dos x,y,z etc etc. Como faço para que ele me calcule a probablidade de chegar ao A???? abraço O que eu queria era que ele me fizesse a probablidades
newbeen Posted December 10, 2009 at 04:03 AM Report #299549 Posted December 10, 2009 at 04:03 AM Desculpa mas não consigo perceber a pergunta... RHCE - 120-062-534
JoaoRodrigues Posted December 10, 2009 at 09:08 PM Report #299705 Posted December 10, 2009 at 09:08 PM Sim, vais ter que perguntar melhor porque honestamente não se percebe patavina :x
bernardus Posted December 14, 2009 at 04:22 PM Author Report #300349 Posted December 14, 2009 at 04:22 PM Bem desculpem lá 🙂 Por exemplo eu tenho uma lista com os totais e com o detalhado. O que eu queria era que através de pyhton fazer um soft para me dar as possibilidades, através soma de algum detalhado desse um dos totais. EX. detalhado >>>>>>>>>> 1 2 3 4 5 >>>>>>>>>> Totais >>>>>>>>>> 8 7 Quero que o soft me diga as como chegar a um dos totais EX Total 8= 5+3 Total 7=4+3 So que com valores mt maiores Abraço
bernardus Posted December 16, 2009 at 05:55 PM Author Report #300793 Posted December 16, 2009 at 05:55 PM boas. Talvez com o pseudo codigo seja mais simples entenderam 😛 int vector[100]; // 100 numeros a verificar no maximo... int matriz[100][100]; // cada linha terá uma possibilidade e cada coluna terá os números necessários para atingir a soma. (máximo de 100 possibilidades somando um máximo de 100 números [altamente exagerado]) int n_valores; int valor_a_descobrir; int linhas_matriz = 0; int colunas_matriz = 0; bool valor_encontrado = false; print "a fazer reset à matriz de resultados..." for(int i = 0; i < 100; i++) for(int x = 0; x < 100; x++) matriz[x] = 0; print "quantos numeros? " read n_valores; for(int i = 0; i < n_valores ; i++) { print "entre com o valor numero {i}: " read vector; } print "qual o valor a descobrir? " read valor_a_descobrir; print "a pesquisar..." // percorrer todos os valores inseridos for(int i = 0; i < n_valores; i++) { print "a testar valores para o {i}º numero..." soma=0; colunas_matriz = 0; // percorrer todos os valores inseridos for(int x = 0; x < n_valores ; x++) { soma+=vector[x]; if(soma>valor_a_descobrir) soma-=vector[x]; else matriz[linhas_matriz][colunas_matriz++]=vector[x]; if(soma==valor_a_descobrir) valor_encontrado=true; } if(valor_encontrado) { linhas_matriz++; valor_encontrado=false; } } print "Foram encontradas {linhas_matriz} possibilidades!" print "a mostrar resultados..." for(int i = 0; i < linhas_matriz;i++) { if(linhas_matriz [0]!=0) // significa que inserimos qualquer coisa...logo, há um resultado nesta linha! { print "{valor_a_descobrir} = " for(x=0;linhas_matriz [x]!=0;x++) { print "{matriz [x]}" if((x < 99) && matriz [x+1]!=0) print " + " } } } A minha duvida é passar isto para python. eu sei passar para c# mas como estou a começar no fantastico mundo python peço a vossa ajuda 👍 abraço
Imoogi Posted December 17, 2009 at 12:11 AM Report #300949 Posted December 17, 2009 at 12:11 AM tenta isso, só um exemplo, depois vc muda os valores ou faz pegar do teclado, etc... list = (1, 2, 3, 4, 5) # lista dos detalhados tot = (7, 8) # lista dos totais for i in list: for l in list: for t in tot: if i+l == t: print "%d + %d = %d" % (i, l, t)
bernardus Posted December 17, 2009 at 01:03 AM Author Report #300961 Posted December 17, 2009 at 01:03 AM malta em vez de meter no detalhado numeros inteiros como faço para decimais ex 3425,6 abraço
IceBrain Posted December 17, 2009 at 01:31 AM Report #300964 Posted December 17, 2009 at 01:31 AM Usa pontos em vez de vírgulas. list = (1.5883, 2.2332, 3.1, 4.0, 5.44) # lista dos detalhados Depois no print tens que usar %f em vez de %d. ❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents A list of command line apps
bernardus Posted December 17, 2009 at 01:43 AM Author Report #300966 Posted December 17, 2009 at 01:43 AM o gajo nao compila:( list = (134.35,3687.46,724.76,345.67,3336.89,200.45,1000.32,57.45,200.43,7004.68,3951.09,461.87) # lista dos detalhados tot = (737.9,5671.16) # lista dos totais for i in list: for l in list: for t in tot: if i+l == t: print "%f + %f = %f" % (i, l, t)
IceBrain Posted December 17, 2009 at 02:56 AM Report #300973 Posted December 17, 2009 at 02:56 AM Primeira observação: não uses "list" como nome de variáveis, visto que é uma função do próprio Python (http://docs.python.org/library/functions.html#list) Segunda : para criar uma lista, usa os parêntesis quadrados, em vez dos redondos: list = [134.35,3687.46,724.76,345.67,3336.89,200.45,1000.32,57.45,200.43,7004.68,3951.09,461.87] O que tu estás a criar são tuplos, não listas. No meu PC ele não dá erros, simplesmente não imprime nada, suponho que seja problema do algoritmo. ❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents A list of command line apps
bernardus Posted December 17, 2009 at 03:20 AM Author Report #300975 Posted December 17, 2009 at 03:20 AM entao como resolvo o problema? abraço
bernardus Posted December 17, 2009 at 03:22 AM Author Report #300976 Posted December 17, 2009 at 03:22 AM desculpem o double post. mas com este codigo ele nao dava erro nenhum e trabalhava direitinho 😛 list = (1, 2, 3, 4, 5) # lista dos detalhados tot = (7, 8) # lista dos totais for i in list: for l in list: for t in tot: if i+l == t: print "%d + %d = %d" % (i, l, t) Mas desde que tentei meter numeros decimais o gajo nao mostra nada B) abraço
IceBrain Posted December 17, 2009 at 03:36 AM Report #300977 Posted December 17, 2009 at 03:36 AM E tens a certeza que há algum valor que dê bem? É que eu fiz só as somas e nenhuma me deu esses resultados... ❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents A list of command line apps
bernardus Posted December 17, 2009 at 03:39 AM Author Report #300978 Posted December 17, 2009 at 03:39 AM tenho porque esses valores sao de testes e confirmados manualmente. era fixe uma ajuda +. ja deves ter percebido o problema. lista de detalhados lista de totais e atraves dos detalhados dar as possibilidades de um dos totais. como o codigo acima list = (1, 2, 3, 4, 5) # lista dos detalhados tot = (7, 8) # lista dos totais for i in list: for l in list: for t in tot: if i+l == t: print "%d + %d = %d" % (i, l, t) so que quando meto os decimais chapéu. Any help please B)
IceBrain Posted December 17, 2009 at 03:46 AM Report #300979 Posted December 17, 2009 at 03:46 AM Epá, eu fiz simplesmente: ll = [134.35,3687.46,724.76,345.67,3336.89,200.45,1000.32,57.45,200.43,7004.68,3951.09,461.87] # lla dos detalhados for i in ll: for l in ll: print "%f + %f = %f" % (i, l, (i+l)) E os resultados são: 134.350000 + 134.350000 = 268.700000 134.350000 + 3687.460000 = 3821.810000 134.350000 + 724.760000 = 859.110000 134.350000 + 345.670000 = 480.020000 134.350000 + 3336.890000 = 3471.240000 134.350000 + 200.450000 = 334.800000 134.350000 + 1000.320000 = 1134.670000 134.350000 + 57.450000 = 191.800000 134.350000 + 200.430000 = 334.780000 134.350000 + 7004.680000 = 7139.030000 134.350000 + 3951.090000 = 4085.440000 134.350000 + 461.870000 = 596.220000 3687.460000 + 134.350000 = 3821.810000 3687.460000 + 3687.460000 = 7374.920000 3687.460000 + 724.760000 = 4412.220000 3687.460000 + 345.670000 = 4033.130000 3687.460000 + 3336.890000 = 7024.350000 3687.460000 + 200.450000 = 3887.910000 3687.460000 + 1000.320000 = 4687.780000 3687.460000 + 57.450000 = 3744.910000 3687.460000 + 200.430000 = 3887.890000 3687.460000 + 7004.680000 = 10692.140000 3687.460000 + 3951.090000 = 7638.550000 3687.460000 + 461.870000 = 4149.330000 724.760000 + 134.350000 = 859.110000 724.760000 + 3687.460000 = 4412.220000 724.760000 + 724.760000 = 1449.520000 724.760000 + 345.670000 = 1070.430000 724.760000 + 3336.890000 = 4061.650000 724.760000 + 200.450000 = 925.210000 724.760000 + 1000.320000 = 1725.080000 724.760000 + 57.450000 = 782.210000 724.760000 + 200.430000 = 925.190000 724.760000 + 7004.680000 = 7729.440000 724.760000 + 3951.090000 = 4675.850000 724.760000 + 461.870000 = 1186.630000 345.670000 + 134.350000 = 480.020000 345.670000 + 3687.460000 = 4033.130000 345.670000 + 724.760000 = 1070.430000 345.670000 + 345.670000 = 691.340000 345.670000 + 3336.890000 = 3682.560000 345.670000 + 200.450000 = 546.120000 345.670000 + 1000.320000 = 1345.990000 345.670000 + 57.450000 = 403.120000 345.670000 + 200.430000 = 546.100000 345.670000 + 7004.680000 = 7350.350000 345.670000 + 3951.090000 = 4296.760000 345.670000 + 461.870000 = 807.540000 3336.890000 + 134.350000 = 3471.240000 3336.890000 + 3687.460000 = 7024.350000 3336.890000 + 724.760000 = 4061.650000 3336.890000 + 345.670000 = 3682.560000 3336.890000 + 3336.890000 = 6673.780000 3336.890000 + 200.450000 = 3537.340000 3336.890000 + 1000.320000 = 4337.210000 3336.890000 + 57.450000 = 3394.340000 3336.890000 + 200.430000 = 3537.320000 3336.890000 + 7004.680000 = 10341.570000 3336.890000 + 3951.090000 = 7287.980000 3336.890000 + 461.870000 = 3798.760000 200.450000 + 134.350000 = 334.800000 200.450000 + 3687.460000 = 3887.910000 200.450000 + 724.760000 = 925.210000 200.450000 + 345.670000 = 546.120000 200.450000 + 3336.890000 = 3537.340000 200.450000 + 200.450000 = 400.900000 200.450000 + 1000.320000 = 1200.770000 200.450000 + 57.450000 = 257.900000 200.450000 + 200.430000 = 400.880000 200.450000 + 7004.680000 = 7205.130000 200.450000 + 3951.090000 = 4151.540000 200.450000 + 461.870000 = 662.320000 1000.320000 + 134.350000 = 1134.670000 1000.320000 + 3687.460000 = 4687.780000 1000.320000 + 724.760000 = 1725.080000 1000.320000 + 345.670000 = 1345.990000 1000.320000 + 3336.890000 = 4337.210000 1000.320000 + 200.450000 = 1200.770000 1000.320000 + 1000.320000 = 2000.640000 1000.320000 + 57.450000 = 1057.770000 1000.320000 + 200.430000 = 1200.750000 1000.320000 + 7004.680000 = 8005.000000 1000.320000 + 3951.090000 = 4951.410000 1000.320000 + 461.870000 = 1462.190000 57.450000 + 134.350000 = 191.800000 57.450000 + 3687.460000 = 3744.910000 57.450000 + 724.760000 = 782.210000 57.450000 + 345.670000 = 403.120000 57.450000 + 3336.890000 = 3394.340000 57.450000 + 200.450000 = 257.900000 57.450000 + 1000.320000 = 1057.770000 57.450000 + 57.450000 = 114.900000 57.450000 + 200.430000 = 257.880000 57.450000 + 7004.680000 = 7062.130000 57.450000 + 3951.090000 = 4008.540000 57.450000 + 461.870000 = 519.320000 200.430000 + 134.350000 = 334.780000 200.430000 + 3687.460000 = 3887.890000 200.430000 + 724.760000 = 925.190000 200.430000 + 345.670000 = 546.100000 200.430000 + 3336.890000 = 3537.320000 200.430000 + 200.450000 = 400.880000 200.430000 + 1000.320000 = 1200.750000 200.430000 + 57.450000 = 257.880000 200.430000 + 200.430000 = 400.860000 200.430000 + 7004.680000 = 7205.110000 200.430000 + 3951.090000 = 4151.520000 200.430000 + 461.870000 = 662.300000 7004.680000 + 134.350000 = 7139.030000 7004.680000 + 3687.460000 = 10692.140000 7004.680000 + 724.760000 = 7729.440000 7004.680000 + 345.670000 = 7350.350000 7004.680000 + 3336.890000 = 10341.570000 7004.680000 + 200.450000 = 7205.130000 7004.680000 + 1000.320000 = 8005.000000 7004.680000 + 57.450000 = 7062.130000 7004.680000 + 200.430000 = 7205.110000 7004.680000 + 7004.680000 = 14009.360000 7004.680000 + 3951.090000 = 10955.770000 7004.680000 + 461.870000 = 7466.550000 3951.090000 + 134.350000 = 4085.440000 3951.090000 + 3687.460000 = 7638.550000 3951.090000 + 724.760000 = 4675.850000 3951.090000 + 345.670000 = 4296.760000 3951.090000 + 3336.890000 = 7287.980000 3951.090000 + 200.450000 = 4151.540000 3951.090000 + 1000.320000 = 4951.410000 3951.090000 + 57.450000 = 4008.540000 3951.090000 + 200.430000 = 4151.520000 3951.090000 + 7004.680000 = 10955.770000 3951.090000 + 3951.090000 = 7902.180000 3951.090000 + 461.870000 = 4412.960000 461.870000 + 134.350000 = 596.220000 461.870000 + 3687.460000 = 4149.330000 461.870000 + 724.760000 = 1186.630000 461.870000 + 345.670000 = 807.540000 461.870000 + 3336.890000 = 3798.760000 461.870000 + 200.450000 = 662.320000 461.870000 + 1000.320000 = 1462.190000 461.870000 + 57.450000 = 519.320000 461.870000 + 200.430000 = 662.300000 461.870000 + 7004.680000 = 7466.550000 461.870000 + 3951.090000 = 4412.960000 461.870000 + 461.870000 = 923.740000 Nenhum dá algum desses dois, mesmo contando com os arredondamentos... ❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents A list of command line apps
bernardus Posted December 17, 2009 at 03:57 AM Author Report #300981 Posted December 17, 2009 at 03:57 AM entao como faço? lol abraço obrigado pela a tua ajuda
bernardus Posted December 17, 2009 at 03:59 AM Author Report #300982 Posted December 17, 2009 at 03:59 AM mas repara uma coisa o resultado nao é a soma dos dois. Pode ser dois ou mais B) e acho que no codigo anterior só citaste os detalhados e nao os totais 😛 a soma de x detalhados dao o total de y e python compara o total com o resultados de varias somas dos detalhados entendes?
IceBrain Posted December 17, 2009 at 04:20 AM Report #300983 Posted December 17, 2009 at 04:20 AM Ah, é que o código dado pelo Imoogi só faz somas de dois números. Tenta passar o código em C para Python, é razoavelmente fácil nesse caso. Tens aqui o início, se tiveres dúvidas no resto avisa! #declarações: vector = [0.0] * 100 #100 numeros a verificar no maximo... matriz = [[0.0] * 100 for i in range(100)] #cada linha terá uma possibilidade e cada coluna terá os números necessários para atingir a soma. (máximo de 100 possibilidades somando um máximo de 100 números [altamente exagerado]) n_valores = 0 #isto não é necessário valor_a_descobrir = 0.0 #idem linhas_matriz = 0 colunas_matriz = 0 valor_encontrado = False n_valores = int(raw_input("quantos numeros? ")) for i in range(n_valores): vector[i] = float(raw_input("entre com o valor numero {%d}: " % i)) valor_a_descobrir = float( raw_input( "qual o valor a descobrir? ")) print "a pesquisar..." ❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents A list of command line apps
bernardus Posted December 17, 2009 at 04:40 AM Author Report #300984 Posted December 17, 2009 at 04:40 AM eu em c nao manjo quase nada B) n podes passar para python? 😛 abraço e desculpa a enorme trabalheira
IceBrain Posted December 17, 2009 at 02:09 PM Report #301069 Posted December 17, 2009 at 02:09 PM Eu não me importo de fazê-lo, mas esse código tem uns problemas. A variável linhas_matriz é um inteiro, mas nesta linha é tratada como um array: if(linhas_matriz[0]!=0) // significa que inserimos qualquer coisa...logo, há um resultado nesta linha! E podiar pôr o código entre tags [code ], porque há caracteres que não se lêem bem, ❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents A list of command line apps
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now