Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Gauld A.Learning to program (Python)_1.pdf
Скачиваний:
23
Добавлен:
23.08.2013
Размер:
1.34 Mб
Скачать

As you see its very similar to Python except you put the variable at the end. Also BASIC uses INPUT for both numbers and strings. There are usually a few extra features in BASIC's INPUT statement. You should look at the documentation for your particular version.

Reading input in Tcl

Tcl has its own input mechanism, which is based around files (which may include the standard input and output 'files') and a command called gets. This reads input from the specified file which in our case will be stdin.

[ Note: This program will not work from the standard tclsh80 or wish80 prompt. Instead you will need to type it into a file (say input.tcl) and run it from the command prompt like so:

C:\PROJECTS\Tcl>tclsh80 input.tcl

]

The Tcl version of our program looks like this:

puts -nonewline stdout "What multiplier do you want? " 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] ]

}

The -nonewline option to puts simply prevents the cursor from moving to the next line after displaying the prompt message. flush forces stdout to write its contents immediately to ensure that it appears on screen. The for loop is almost identical to the version we saw in the loops section.

A word about stdin and stdout

NOTE: stdin is a bit of jargon for the standard input device (usually the keyboard). It is made to look like a file (we'll get to those shortly) for consistency with file handling code.

In Python it lives in the sys module and is called sys.stdin and raw_input() uses it automatically. Tcl can read from any file using gets (short for getstring). You can do the same in Python, try this:

import sys

print "Type a value: ", # comma prevents newline value = sys.stdin.readline() # use stdin explicitly print value

It is almost identical to:

print raw_input(Type a value: )

The advantage of the explicit vesion is that you can do fancy things like make stdin point to a real file so the program reads its input from the file rather than the terminal - this can be useful for long testing sessions wherby instead of sitting typing each input as requested we simply let the program read its input from a file. [ This has the added advantage of ensuring that we can run the test repeatedly, sure that the input will be exactly the same eaach time, and so hopefully will the output. This technique of repeating previous tests to ensure that nothing got broken is called regression testing by programmers. ]

Finally there is also a sys.stdout 'file' that can likewise be redirected, this time to a file. print is equivalent to:

sys.stdout.write("Hello world\n") # \n= newline

47

Obviously if stdout did not refer to the screen then the output would be written to a file. This is how the operating system commands work when we use redirection at the command prompt:

C:> dir

C:> dir > dir.txt

The first command prints a directory listing to the screen. The second prints it to a file. By using the '>' sign we tell the program to redirect stdout to the file dir.txt.

48