-
Total de itens
8.257 -
Registro em
-
Última visita
Tudo que Graymalkin postou
-
Eu também pensei nisso, mas parece que não. No caso, se você olhar o valor de &valores[0] vai ver sua posição em memória. Somando 1 à este valor você vai para o próximo elemento do array. Ou seja, cada elemento está em uma posição. Então imagino que não exista uma maneira de alterar todos de uma vez só sem ser com um loop. Mas, vale fazer uma pesquisa na net sobre isso, já que eu não sou nenhum mestre em C. :) Abraços, Graymalkin
-
Aqui o seu código funcionou corretamente. Mas, sempre use a tag CODE para postar o código no fórum, senão o seu código fica sem identação (o que é muuuuito importante em Python). Agora, algumas lições de Python. Primeiro: Python não é Pascal/Delphi! Não precisa de parênteses em tudo quanto é lugar. :D Segundo: print é uma instrução da linguagem e não uma função (e justamente por isso não precisa realmente de parênteses). Terceiro: não existe a necessidade de usar int() quando se faz uma divisão por um inteiro. No caso, ao invés de... x = int(valor/100) ... basta fazer: x = valor/100 O retorno vai ser um inteiro mesmo. Faça o teste no interpretador de Python: >>> 2152/100 21 >>> 2152/100.00 21.52 Vê a diferença? No segundo caso eu usei um float (100.00) e o resultado da divisão foi um float. Quarto: interpolação de strings é muito bom para transformar... print ("Quantidade de nota(s) de 5 reais:") print (w) ... em: print "Quantidade de nota(s) de 5 reais: %i" % w Veja o seu código escrito de uma maneira mais pythônica: def calculaNotas(valor): '''Calcula o valor das notas''' x = valor/100 if x > 0: print "Quantidade de nota(s) de 100 reais: %i" % x valor = valor % 100 if valor <= 0 : return y = valor/50 if y > 0: print "Quantidade de nota(s) de 50 reais: %i" % y valor = valor % 50 if valor <= 0: return z = valor/10 if z > 0: print "Quantidade de nota(s) de 10 reais: %i" % z valor = valor % 10 if valor <= 0: return w = valor/5 if w > 0: print "Quantidade de nota(s) de 5 reais: %i" % z valor = valor % 5 if valor <= 0: return que = valor/1 if que > 0: print "Quantidade de nota(s) de 1 real: %i" % que if valor <= 0: return Agora... códigos repetitivos como o código acima tendem sempre a poderem ser simplificados. Note que a mesma coisa é feita para cada uma das notas (100, 50, 10, 5 e 1). Então, será que não seria melhor um loop? Portanto, veja o código abaixo, que faz mesma coisa que o seu, porém com um loop: def calculaNotas(valor): '''Calcula o valor das notas''' notas = [100, 50, 10, 5, 1] for nota in notas: x = valor/nota if x > 0: print "Quantidade de nota(s) de %i reais: %i" % (nota, x) valor = valor % nota if valor <= 0: break Certo? ;) Graymalkin
-
Dicionários não são ordenados, mas você pode ordenar as chaves e então fazer o loop. No caso, aquele último loop... for nota, quantidade in notas.items(): print "%i nota(s) de %i" % (quantidade, nota) ... seria substituído por: for nota in sorted(notas.keys(), reverse=True): print "%i nota(s) de %i" % (notas[nota], nota) Este aí mostrará em ordem decrescente. Aí é uma questão de gosto e de contexto. Poderia estar tudo em uma só. Mas, dependendo do caso, você pode precisar formatar um mesmo conjunto de dados de maneiras diferentes. Neste caso eu acho mais simples criar uma função que faça os cálculos e outra que faça a exibição deles. Abraços, Graymalkin
-
Não existe nenhuma desvantagem em se usar métodos estáticos. Pelo contrário, em alguns casos é bem melhor fazer isso. Imagine você ter que criar uma instância da classe só para usar um método que não tem nenhuma relação com a instância. Ao invés de... MessageBox.Show("teste"); ... você teria que fazer... MessageBox m = new MessageBox(); m.Show("teste"); ... ou ainda: (new MessageBox()).Show("teste"); De todos os casos, o primeiro, com um método estático, é o melhor, sem dúvidas. Isso é só porque você não pode controlar o que o caboclo (ou você mesmo) vai colocar na variável e nem controlar o seu retorno. Quando você usa propriedades você tem este tipo de controle. Abraços, Graymalkin
-
Você tem que regravar o arquivo inteiro com todos os dados novamente. Esse é o problema de se usar o módulo pickle como um banco de dados. Abraços, Graymalkin
-
Um modo de fazer isso neste caso seria usar um dicionário. Um dicionário é como uma lista onde você pode associar uma determinada "chave" para cada item. Um exemplo completo (usando a função anterior e uma nova): def calculaNotas(valor): notasCaixa = [100, 50, 10, 5, 1] notasValor = [] for nota in notasCaixa: while valor>=nota: valor -= nota if valor>=0: notasValor.append(nota) else: valor += nota if valor==0: break return notasValor def imprimirNotas(notasValor): notas = {} for nota in notasValor: if notas.has_key(nota): notas[nota] += 1 else: notas[nota] = 1 for nota, quantidade in notas.items(): print "%i nota(s) de %i" % (quantidade, nota) imprimirNotas(calculaNotas(187)) Certo? ;) Graymalkin
-
Como Jack, vamos por partes. Você não precisa absorver todas as explicações abaixo de uma vez só. Portanto, aconselho à você primeiro ler o que coloquei abaixo dos "-------". Primeiro, vamos conhecer uma lista: notasCaixa = [100, 50, 10, 5, 1] Você pode acessar cada um dos elementos da lista usando [], exemplo: print notasCaixa[1] 50 Lembrando que o índice (o que está dentro dos colchetes), começa de 0. Para adicionar-se um elemento à lista usamos o método append(), exemplo: lista = [1, 2, 3] lista.append(4) print lista [1, 2, 3, 4] Sendo que existe uma instrução para percorrer uma coleção, como uma lista, que é a instrução for (para). Exemplo: for nota in notasCaixa: print nota Isso vai mostrar todos os elementos de notasCaixa. Isso é uma iteração ou loop, e significa que o bloco de código (no caso, só temos uma linha, mas podiam ser mais) será executado para cada elemento da lista e este estará no identificado que determinarmos (no caso, o nota). Mas, e se precisarmos fazer uma iteração (loop) por uma condição e não pelos elementos? Então temos que usar um while (enquanto). Nesta instrução teremos um bloco de código sendo repetido enquanto uma determinada condição é verdadeira. Tanto para while quanto para for, se quisermos interromper o loop, por algum motivo, podemos usar a instrução break (parada ou quebra). Semelhante ao while temos a instrução if (se), que executa um determinado bloco de código se uma condição for verdadeira (mas apenas uma vez, não é um loop). Opcionalmente pode-se executar outro bloco de código caso a condição seja falsa, e para isso usa-se o else (senão). Operações aritméticas e de atribuição são feitas com os operadores normais. Exemplo: valor = 100 + 5 No caso de... valor += 2 ... isso equivale à: valor = valor + 2 Ou seja, soma-se 2 ao valor. Para todos as instruções os blocos de instruções indicados pela identação (o espaço no início da linha). Exemplo: print "isso é executado antes do if" if a==2: print "isso só vai ser executado se a for igual a 2" print "teste2 - isso só vai ser executado se a for igual a 2" else: print "isso só vai ser executado se a for diferente de 2" print "teste3 - isso só vai ser executado se a for diferente de 2" print "isso é executado depois do if" Em suma, os espaços na frente das linhas são *realmente* necessários. ---------------------------------------------------------------------------------------- Bom, pra quê eu expliquei isso tudo aí em cima? É porque é tudo de que precisamos para fazer o tal exercício! :D Então, segue o código que fiz: def calculaNotas(valor): notasCaixa = [100, 50, 10, 5, 1] notasValor = [] for nota in notasCaixa: while valor>=nota: valor -= nota if valor>=0: notasValor.append(nota) else: valor += nota if valor==0: break return notasValor Primeiro, coloque-o em um arquivo .py e execute-o no IDLE. Depois, vá no interpretador e faça o teste: calculaNotas(187) [100, 50, 10, 10, 10, 5, 1, 1] E daí, dê uma boa analisada em cada linha e qualquer dúvida ache a explicação referente na parte acima. Caso a explicação tenha sido insuficiente, pode perguntar que eu explico melhor. Mas, o mais importante mesmo é que você entenda como o código funciona, ou seja, o porquê de tudo isso. Qualquer dúvida, 'stamos aí. Abraços, Graymalkin EDITADO: Ah, tu saca de Delphi? Então acho que você vai pegar rapidinho o código acima e entender os conceitos. Mas, qualquer dúvida, é só falar. Os que tem grandes problemas são os que já sabem bastante, então não é necessário se dedicar muito, mas apenas dar umas idéias, se possível. Como um professor que tive disse uma vez: "não me interessam aqueles que sabem, mas sim os que não sabem." (E se não me engano foi um professor de lógica de programação). Abraços, Graymalkin EDITADO NOVAMENTE: Recebi sua MP extremamente polida e já à respondi. Graymalkin
-
Como assim?! :blink: Eu não sugeri a você desistir em momento algum! Se você entrou neste curso é porque queria algo (ninguém iria entrar num curso sem saber nada sobre o assunto - bom, pelo menos eu nunca faria isso), então o melhor que se pode fazer é tentar aprender. E programação é um assunto interessantíssimo se você estiver disposto a aprender. Abraços, Graymalkin
-
Bom, eu assumi que ela estivesse usando C ou C++ para implementação, por isso não movi. Abraços, Graymalkin
-
O problema é que você gravou o arquivo com o nome "xml.py" e é justamente o módulo de mesmo nome (que existe na biblioteca de Python) é que estamos tentando importar (import xml.dom.minidom). Renomeie o seu xml.py para qualquer outra coisa (teste.py, por exemplo) e vai dar certo. Abraços, Graymalkin
-
Que curso é esse? E você não tem nenhuma base de lógica de programação? Abraços, Graymalkin
-
Em termos práticos, singleton é quando você não instancia mais de uma vez o que seria um mesmo objeto. Por exemplo, você tem a classe Cliente, e tem a classe Pedido, em que uma das propriedades desta é o cliente que fez o pedido. Ao procurar pelo cliente é lhe retornado um objeto que representa o mesmo, vamos supor: Cliente c = Cliente.Consultar("Bruno") MessageBox.Show(c.Nome) E ao acessar a propriedade Cliente de um objeto Pedido também é lhe retornado um objeto: Pedido p = Pedido.Consultar(1) MessageBox.Show(p.Cliente.Nome) Usando singleton você garante que "c" e "p.Cliente" são o mesmo objeto, e não duas instâncias de Cliente com os mesmos dados. Desta maneira você poupa o trabalho de criar um objeto em duplicidade. Certo? ;) Abraços, Graymalkin
-
Isso é um exercício, né? Então, você vai ter que pensar um pouquinho, não acha? Se eu entregar a resposta de bandeja não tem graça! Só uma dica: comece da maior nota e vai subtraindo as mesmas do valor. Quando o resultado da subtração for menor que 0 é porque você chegou no limite daquela nota específica e se for 0 é porque você já tem todas as notas necessárias. Se tiver alguma dúvida, é só perguntar. Só não espere ver o exercício pronto. Ok? ;) Abraços, Graymalkin
-
Pela tradução da mensagem de erro já dá pra ter uma idéia: "arquivo não encontrado" (file not found). Provavelmente você está procurando por algum arquivo que não existe na máquina de teste (ou está informando um caminho errôneo). Abraços, Graymalkin
-
Impressao Em Formulario Fora Do padrão A4
pergunta respondeu ao Marcos Beltran de Graymalkin em Visual Basic
O que você está usando? Crystal Reports? Data Report? Objeto Printer? Graymalkin -
Você vai ter que percorrer todas as posições do vetor (começando de 0) e só em fazer isso você já sabe qual é a posição atual. Basta que você guarde tanto o maior valor quanto sua posição (e o mesmo vale para o menor). Abraços, Graymalkin
-
Na própria documentação de Python você encontra um exemplo de escrever. De qualquer maneira, segue um exemplo para o seu caso específico: import xml.dom.minidom veiculos = {'carro1' : ['Fiat', 'Uno', '1998'], 'carro2' : ['Ford', 'Ka', '1996'], 'carro3' : ['Chevrolet', 'Vectra', '1998']} dom = xml.dom.minidom.getDOMImplementation() xml = dom.createDocument(None, "carros", None) carros = xml.documentElement for veiculo, dados in veiculos.items(): carro = xml.createElement(veiculo) marca = xml.createElement("marca") marca.appendChild(xml.createTextNode(dados[0])) modelo = xml.createElement("modelo") modelo.appendChild(xml.createTextNode(dados[1])) ano = xml.createElement("ano") ano.appendChild(xml.createTextNode(dados[2])) carro.appendChild(marca) carro.appendChild(modelo) carro.appendChild(ano) carros.appendChild(carro) f = file('c:/teste.xml', 'w') f.write(xml.toprettyxml()) f.close() print xml.toprettyxml() Certo? ;) Graymalkin
-
Sim, eu fiz com um vetor porque era mais prático, mas a idéia é praticamente a mesma: #include <stdio.h> #include <stdlib.h> int main() { int valores[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; int *linha1, *linha4; int temp; printf("Antes:\n"); for (int i=0; i<4; i++) { for (int j=0; j<4; j++) printf("%i ", valores[i][j]); printf("\n"); } linha1 = (int *)&valores[0]; linha4 = (int *)&valores[3]; for (int i=0; i<4; i++) { temp = *(linha1 + i); *(linha1 + i) = *(linha4 + i); *(linha4 + i) = temp; } printf("\nDepois:\n"); for (int i=0; i<4; i++) { for (int j=0; j<4; j++) printf("%i ", valores[i][j]); printf("\n"); } system("pause"); } Certo? ;) Graymalkin
-
O que você está usando? DAO ou ADO? E qual o BD? Graymalkin
-
Use o método SaveFile para gravar e o LoadFile para ler. Abraços, Graymalkin
-
Observe onde você está postando! A sala Tutoriais & Dicas é só mesmo para tutoriais e dicas! Para dúvidas você deve usar a sala Visual Basic. Estou movendo seus tópicos. Abraços, Graymalkin
-
Se você quer selecionar uma pasta use um FolderBrowseDialog: Dim escolherPasta As New FolderBrowserDialog() If escolherPasta.ShowDialog() = Windows.Forms.DialogResult.OK Then MessageBox.Show(escolherPasta.SelectedPath) End If Agora, se você já tem um caminho completo e só quer obter a pasta use System.IO.Path.GetDirectoryName(). Abraços, Graymalkin
-
Acredito que... descontarhora = mkeTempo1.Text descontarminuto = mkeTempo1.Text ... deveria ser... descontarhora = Hour(mkeTempo1.Text) descontarminuto = Minute(mkeTempo1.Text) ... não? Você tem que ter em mente o conceito de tipos de dados e suas atribuições. Abraços, Graymalkin
-
Seria algo assim? #include <stdio.h> #include <stdlib.h> int main() { int valores[] = {1, 2, 3}; int *linha1, *linha3, *temp; printf("Antes:\n"); for (int i=0; i<3; i++) printf("%i\n", valores[i]); linha1 = &valores[0]; linha3 = &valores[2]; *temp = *linha1; *linha1 = *linha3; *linha3 = *temp; printf("\nDepois:\n"); for (int i=0; i<3; i++) printf("%i\n", valores[i]); system("pause"); } Abraços, Graymalkin
-
Quase. Ela não é uma "extensão do python" e sim uma biblioteca "genérica" para controle do terminal. O *módulo* curses de Python é que faz uso dela. Exatamente. A maioria das distribuições Linux já vem com esta biblioteca instalada (ou com opção para instalá-la). No caso do Windows você vai ter que usar módulos próprios de Python para isso (como o WCurses ou o Console). Abraços, Graymalkin