• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

player

[Python]Dúvidas variadas[Resolvido]

39 mensagens neste tópico

Boas

Antes demais peço desculpa se postei no lugar errado, mas como não tinha a certeza postei aqui.

Como ainda sou um iniciante em python, ah umas coisas que não entendo, mas desta vez deparei-me com isto.

Eu vi num tutorial a seguinte cena.

# -*- coding: cp1252 -*-
#Isto vai ter password, calculadora, calcular as despesas, conversor CHF to Euros e vice-versa.
from time import sleep   #De time importar o sleep

loop = 1 #Vai ser usado para fechar o loop
choice = 0 #Vai ser usado para as escolhas

print'**Bem vindo**'
print
#Sistema de password vai ser usado agora
name = 'ruioliveira'
passw = 'ruca22'
n = raw_input('Nome: ')
if n == name:
    p = raw_input('Password:')
    if p == passw:
        while loop > 0:
            print 'Escolha uma opcao'
            print '1) Calculadora'
            print '2) Conversor CHF para Euros and Vice-Versa (Cambio: 1.52)'
            print '3) Despesas'
            print '4) Fechar Programa'
            choice = int(raw_input('Escolha: '))
            if choice == 1:
                print 'Bem vindo a Calculadora, use Fechar para fechar o loop'
                while 1:
                    print 'Podes usar +, -, *, /'
                    n = raw_input('Insira o calculo: ')
                    if 'fechar' in n:
                        break
                    print eval(n)
            elif choice == 2:
                print
                print 'Bem vindo ao Conversor'
                print '1) Conversor CHF para Euros'
                print '2) Conversor Euros para CHF'
                choice = input('Escolha: ')
                if choice == 1:
                    while 1:
                        print 'Conversor CHF para Euros'
                        chf = input('CHF: ')
                        if chf == 0:
                            break
                        euro = chf/1.52
                        print 'CHF = %.2f - EUROS = %.2f' % (chf,euro)
                elif choice == 2:
                    while 1:
                        euro = input('EURO: ')
                        if euro == 0:
                            break
                        chf = euro*1.52
                        print 'EURO = %.2f - CHF = %.2f' % (euro, chf)
            elif choice == 3:
                print
                print 'Despesas'
                print
                n = raw_input('Calculos: ')
                print eval(n)/2
            elif choice == 4:
                print 'Programa a fechar, tenha um bom dia'
                sleep(5)
                loop = 0
            else:
                print 'Por favor, escolhe uma das opcoes'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O primeiro escreve cada posição em separado. O segundo escreve a linha toda de uma vez (cada linha é uma lista, que é representada dessa forma).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O primeiro escreve cada posição em separado. O segundo escreve a linha toda de uma vez (cada linha é uma lista, que é representada dessa forma).

Desculpa mas ainda não compreendi muito bem, mas obrigado na mesma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A variável matriz é uma lista de tuplas ou uma tupla de tuplas. O que é que isto significa? Significa que a variável matriz é uma lista cujos elementos são tuplas, cada uma com 3 elementos do tipo int. Ou seja, o que o código que viste faz é o equivalente a:

for tupla in matriz:
    for inteiro in tupla:
        print inteiro,
    print

E o teu é:

for tupla in matriz:
    print tupla

Ou seja, o código que viste imprime os elementos de uma tupla 1 a 1, imprime um \n e depois repete isso com a tupla seguinte, enquanto que o teu código imprime a representação da tupla (uma tupla representa-se usando (1, 2, 3), uma lista usando [1, 2, 3], etc).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax muito obrigado, já compreendi. E obrigado tambem Ferreira.

Falem também do meu código que está abaixo das dúvidas, digam o que posso melhorar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

cara.. tem uma palavra reservada em python q vc pode usar na calculador.. aoinvez desse bando de if e while

if choice == 1:
    print
    print 'Bem Vindo a Calculadora'
    r = raw_input('calculo: ')
    eval(r)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em vez de estares a encadear tudo, podes fazer p.e.:

if user != userautorizado or pass != passautorizada:
    print "Dados errados"
    sys.exit()
#resto do programa.

Btw, vê se isto te interessa: http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=180269

Sim vai dar um jeitaço, obrigado :P

Já agora podem explicar isso do eval? Eu tive a dar uma olhadela rápida e não percebi muito. (Já deve ser o sono :confused:)

Cumps e obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tipo ele realiza a operacao q estiver na string

abre o interpretador do python e escreve

eval('1+1')

ele retorna 2

ae esse code do djthyrax ajuda

mas da erro se vc passar um palavra/frase ou outra coisa qlqr

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tipo ele realiza a operacao q estiver na string

abre o interpretador do python e escreve

eval('1+1')

ele retorna 2

ae esse code do djthyrax ajuda

mas da erro se vc passar um palavra/frase ou outra coisa qlqr

Já percebi obrigado

Já modifiquei a calculadora com o eval,não toda mas dá bastante mais jeito que usar aqueles ifs e isso.

if user != userautorizado or pass != passautorizada:
    print "Dados errados"
    sys.exit()
#resto do programa.

Não usei esse sistema porque só agora é que tive oportunidade de vir a net e investigar melhor o sys, mas para a próxima meto.

Obrigado pela ajuda de ambos  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só de salientar que se deve ter muito cuidado ao usar o eval.

Deve-se sempre validar primeiro o input. Não vá conter código malicioso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem apareço aqui com uma dúvida nova neste código

import os   
a = os.system   
a('copy c:\modulo.py c:\Python')    
nome = raw_input('Nome da pasta: ') 
nome = 'Meu-'+nome  
a('md c:\''+nome)   
a('copy c:\estupidez.py c:\''+nome) 
abrir = os.startfile
abrir('c:/tabela.txt')

A minha dúvida é a seguinte:

a('copy c:\modulo.py c:\Python')    Enquanto que aqui tem uma barra assim \ e só preciso se meter duas aspas para fechar a string

a('md c:\''+nome)  e aqui tendo a mesmo barra preciso de colocar três aspas?

E no programa qual é a diferença entre esta barra / e esta \?

Não liguem aos nomes dos ficheiros, era para fazer uma coisa rápida e desde já obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não funciona assim lol. O \ é um caracter que serve para "escapar" caracteres especiais: \n significa uma mudança de linha p.e. O que tu queres fazer é ter o caracter \ mesmo, e para isso, usas \\: a("copy c:\\estupidez.py c:\\"+nome)

Outra hipótese, mas que no exemplo que dei pode dar problemas, é usares um modificador que existe em python, o r: r"C:\estupidez.py" Tendo o r, o python mete automaticamente a 2a \.

Em relação à diferença entre \ e /, basta olhares para elas para veres que são completamente diferentes :confused:, mas em windows, ambas servem para separar as pastas. Isto é, C:\lulz\estupidez.py ou C:/lulz/estupidez.py ou C:\lulz/estupidez.py ou C:/lulz\estupidez.py em Windows aponta tudo para o mesmo ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não funciona assim lol. O \ é um caracter que serve para "escapar" caracteres especiais: \n significa uma mudança de linha p.e. O que tu queres fazer é ter o caracter \ mesmo, e para isso, usas \\: a("copy c:\\estupidez.py c:\\"+nome)

Então mas a diferença entre meter / ou \ nâo é nenhuma?

E já agora se souberes, podes dizer porque e que e necessário ter 3 aspas nesta parte do código: a('md c:\''+nome)

Tipo eu fiz isto através de um tutorial, mas como lá não explica tudo vim aqui tirar as dúvidas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para manipulares ficheiros em Windows, não há qualquer diferença.

Em relação às 3 plicas, é porque o \ associa-se sempre ao caracter seguinte para simbolizar um, o que significa que \' é na verdade apenas ', mas um ' que faz parte da string e não um delimitador da string.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para manipulares ficheiros em Windows, não há qualquer diferença.

Em relação às 3 plicas, é porque o \ associa-se sempre ao caracter seguinte para simbolizar um, o que significa que \' é na verdade apenas ', mas um ' que faz parte da string e não um delimitador da string.

Ah ok obrigado, já percebi.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa lá o post duplo mas a minha dúvida basicamente continua, isto porque se eu meter a barra / as pastas não são criadas, enquanto que se eu meter \ já são criadas por isso fiquei outra vez na dúvida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho outra dúvida desta vez em relação ao self.

Eu já tive a ver mas simplesmente não consigo perceber o seu uso. Eu sei que se usa num método duma classe mas não compreendo muito bem o que ele faz. Se alguém me puder dar umas luzes agradecia :P

Cumps e obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

self = próprio (em português) Ou seja, de uma forma MUITO RESUMIDA, tu estás a dizer que o método xyz ou uma variável abc pertence à classe em que estás a trabalhar.

Verdadeiros senhores do OOP dizem que o self é uma coisa estúpida e por isso, deixo esses que percebem de OOP explicar melhor. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ia jurar que tinha aqui respondido a isso do self.

Eu também! :P Até fiquei surpreendido de não.

Mas por favor, do it. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também! :) Até fiquei surpreendido de não.

Mas por favor, do it. :P

Pois se puderes explicar era fixe.

Tharis obrigado na mesma :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epá, basicamente o self é um apontador para o endereço da instância da class. Passando o apontador à função, consegues ter no scope da função acesso a todos os métodos da instância da class.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora