Conversando com o utilizador

O que iremos cobrir?
Como é que o utilizador pode introduzir data, e como ler essa data uma vez obtida? Irei mostrar como ler, tanto data numérica, como data de string. Iremos também dar uma vista de olhos em como transformar esse input do utilizador em parte activa do código.

Até agora todos os nossos programas só tem lidado com data estática. Ou seja se tudo fosse assim nós poderíamos simplesmente verificar qual a data que tínhamos disponível depois escrever um programa se dentro das conformidade que essa data nos providencia. Por outras palavras como sabemos exactamente qual a data que temos, saberíamos exactamente como escrever um programa para melhor a tratar, portanto esse programas seria perfeito, e nunca mais haveria erros nem problemas. Mas todos sabemos que na realidade as coisas não são bem assim. A maioria dos programas espera em ser 'guiado' pelo utilizador. mesmo que seja para as tarefas mais básicas, como abrir um ficheiro, ou que ficheiro editar, etc.. Outros programas, pedem direcções ao utilizador em alturas criticas. Agora iremos analisar como tudo isso acontece.

>>> print raw_input("Escreve qualquer coisa: ")

Como podes ver raw_input simplesmente dispõem a prompt que lhe é fornecida e 'captura' a resposta do utilizador para depois imprimi-la também. Então o que podemos fazer é atribuir-lhe uma variável:

resp = raw_input("Como te chamas? ")
print "Olá, %s, prazer em conhecer-te" % resp 

raw_input tem um primo que se chama input. A diferença entre os dois é que, enquanto o raw_input pega no que foi escrito pelo utilizador e apresenta-o como sendo uma string, o input pega no que foi escrito pelo utilizador e tenta formar um número. Exemplificando, o utilizador digita '1', '2', '3', o que input faz é ler esses 3 caracteres e tenta converte-los num número, que neste caso seria 123.

Agora vamos aproveitar enquanto isto ainda esta fresco e vamos utiliza-la na nossa velha amiga tabuada de multiplicação:

multiplicador = input("Qual é a tabuada que gostarias de ver")
for j in range(1,13):
   print "%d x %d = %d" % (j, multiplicador, j * multiplicador)

o Input no BASIC

Para obter o mesmo efeito no BASIC basta utilizar o comando INPUT:

INPUT "Qual a tabuada de multiplicação que gostarias de ver, escolhe um número: ";M
FOR J = 1 to 12
    PRINT M "x" J "= " M*J
NEXT J

Como podes ver é muito parecido com o Python, exceptuando a colocação da variável no final. Também há que notar que o BASIC usa o INPUT tanto para números como para strings. Existem ainda mais algumas coisa capacidades extras do BASIC para este comando. Em caso que estejas interessado, sempre podes verificar a documentação da tua versão.

O comando Input em Tcl

O Tcl tem o seu próprio mecanismo de obter input, esse mecanismo é baseado a volta de ficheiros (que poderão incluir os "ficheiros" standart de input e output.) e um comando chamado gets. O que este comando faz é simplesmente ler o input a partir de um ficheiro previamente especificado, que no nosso caso seria stdin. a versão do nosso programa em Tcl seria algo como isto.:

puts -nonewline stdout "Qual é a tabuada de multiplicação? "
flush stdout
set mult [gets stdin]
for {set j 1} {$j <= 12} {incr j} {
    puts [format " %d x %d = %d" $j $mult [expr $mult * $j] ]
    }

A opção -nonewline no comando puts serve simplesmente para impedir o cursor de mover para a linha seguinte depois depois pôr a pronta criada por nós. flush força o stdout a imprimir o seu conteúdo imediatamente, por forma assegurar que o mesmo aprece no ecrã. A parte do loop for, é praticamente idêntico ao que vimos na secção anterior.

Os parâmetros das Linhas de Comandos

Um outro tipo de input é através da linha de comandos. Por exemplo quando queres correr o teu processador de texto com o seguinte:

EDIT qualquercoisa.txt

Como é que o editor de texto lê o nome do ficheiro?

Na maioria das linguagens o sistema operativo providencia um array ou uma lista de strings que contêm as palavras de comando. Então se o primeiro elemento é o próprio comando, o segundo elemento será portanto o primeiro argumento, etc. Normalmente costuma existir uma variável mágica que contém o número de elementos que estão nessa lista.

No Python essa lista esta dentro do módulo sys, e dá-se pelo nome de argv (argument values). Nós podemos extrair os elementos dessa lista ou através da indexação ou por uma iteração. Experimenta:

import sys
for item in sys.argv:
    print item
    
print "o primeiro argumento foi:", sys.argv[1]

As linhas de comando do Tcl

O Tcl tem um esquema parecido com o do Python, mas só que com 3 varáveis: argv0 - a palavra-chave de comando, argv - uma string contendo o resto da linha de comando argc - o número de palavras que estão no argv

Um exemplo de como aceder a linha de comandos do Tcl é:

puts "o comando foi: $argv0"
puts "O primeiro argumento foi:  [lindex $argv 0]"

E no BASIC

Enquanto no Tcl não existe nenhum equivalente para o comando Input, como no Python e no BASIC, agora é a vez do BASIC não ter um equivalente para o argv. Embora seja possível usar o sistema operativo para exercer as mesmas funções de acesso. Mas isso é demasiado avançado para este curso, Contudo eu recomendo que em BASIC uses a prompt de uma forma interactiva com o utilizador.

E é tudo no que diz respeito ao input, pelo menos neste curso. Eu sei que isto é muito básico , mas sempre te irá permitir escrever programas muito úteis com isso. Nos primórdios da programação no Unix isto era o único tipo de interacção existente. Portanto dá-te por contente. Tanto o Python como o Tcl e o BASIC (na encarnação como Visual BASIC) permitem-te escrever programas com GUI muito sofisticados com janelas, caixas de diálogo, etc.... mas isso já é muito avançado para este curso. Por falar nisso no trabalho final, mais adiante irás encontrar um exemplo onde se irá requerer um input via GUI, isto no Python, mas não irá haver grandes explicações acerca do funcionamento do mesmo. Existem muitos Web sites que te podem providenciar esse tipo de conhecimento. Mas recomendo que os visites apenas quando tiveras um bom conhecimento acerca do essencial e básico, irás encontrar alguns deles na página das referências.

Pontos a lembrar
  • Usa o input para leres números, e o raw_input para leres caracteres/strings.
  • Tanto oinput and raw_input podem colocar uma string como prompt para o utilizador.
  • No BASIC o comando INPUT pode ser utilizado para qualquer tipo de data.
  • Os parâmetros da linha de comandos podem ser obtidos a partir da lista argv importados do módulo sys no Python onde o primeiro item é o nome do programa.
  • O Tcl usa um sistema com um nome semelhante, argv, para obter a lista que contém a data da linha de comandos, mas quanto ao nome do programa esse esta no argv0
  • A variável __name__ será transformada em __main__ em caso que o módulo seja executado a partir de uma linha de comandos (ou então com um duplo clique no Windows).

Anterior  Próxima  Índice


Em caso que tenhas alguma dúvida ou queiras comentar esta página envia-me um e-mail para: babyboy@oninet.pt