运算符优先级

如果你有一个如2 + 3 * 4那样的表达式,是先做加法呢,还是先做乘法?我们的中学数学告诉我们应当先做乘法——这意味着乘法运算符的优先级高于加法运算符。

下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符。

下面这张表(与Python参考手册中的那个表一模一样)已经顾及了完整的需要。事实上,我建议你使用圆括号来分组运算符和操作数,以便能够明确地指出运算的先后顺序,使程序尽可能地易读。例如,2 + (3 * 4)显然比2 + 3 * 4清晰。与此同时,圆括号也应该正确使用,而不应该用得过滥(比如2 + (3 + 4))。

表5.2 运算符优先级

运算符 描述
lambda Lambda表达式
or 布尔“或”
and 布尔“与”
not x 布尔“非”
in,not in 成员测试
is,is not 同一性测试
<,<=,>,>=,!=,== 比较
| 按位或
^ 按位异或
& 按位与
<<,>> 移位
+,- 加法与减法
*,/,% 乘法、除法与取余
+x,-x 正负号
~x 按位翻转
** 指数
x.attribute 属性参考
x[index] 下标
x[index:index] 寻址段
f(arguments...) 函数调用
(experession,...) 绑定或元组显示
[expression,...] 列表显示
{key:datum,...} 字典显示
'expression,...' 字符串转换

其中我们还没有接触过的运算符将在后面的章节中介绍。

在表中列在同一行的运算符具有 相同优先级 。例如,+和-有相同的优先级。

计算顺序
默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。然而,如果你想要改变它们的计算顺序,你得使用圆括号。例如,你想要在一个表达式中让加法在乘法之前计算,那么你就得写成类似(2 + 3) * 4的样子。

结合规律
运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4被计算成(2 + 3) + 4。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c被处理为a = (b = c)。

下一页 表达式

使用源文件

现在让我们重新开始编程。当你学习一种新的编程语言的时候,你编写运行的第一个程序通常都是“Hello World”程序,这已经成为一种传统了。在你运行“Hello World”程序的时候,它所做的事只是说声:“Hello World”。正如提出“Hello World”程序的Simon Cozens[1]所说:“它是编程之神的传统咒语,可以帮助你更好的学习语言。”

启动你选择的编辑器,输入下面这段程序,然后把它保存为helloworld.py。

例  使用源文件

#!/usr/bin/python
# Filename : helloworld.py
print 'Hello World'


为了运行这个程序,请打开shell(Linux终端或者DOS提示符),然后键入命令python helloworld.py。如果你使用IDLE,请使用菜单Edit->Run Script或者使用键盘快捷方式Ctrl-F5。输出如下所示。

输出
$ python helloworld.py
Hello World

如果你得到的输出与上面所示的一样,那么恭喜!——你已经成功地运行了你的第一个Python程序。

万一你得到一个错误,那么请确保你键入的程序 准确无误 ,然后再运行一下程序。注意Python是大小写敏感的,即print与Print不一样——注意前一个是小写p而后一个是大写P。另外,确保在每一行的开始字符前没有空格或者制表符——我们将在后面讨论为什么这点是重要的。

它如何工作
让我们思考一下这个程序的前两行。它们被称作 注释 ——任何在#符号右面的内容都是注释。注释主要作为提供给程序读者的笔记。

Python至少应当有第一行那样的特殊形式的注释。它被称作 组织行 ——源文件的头两个字符是#!,后面跟着一个程序。这行告诉你的Linux/Unix系统当你 执行 你的程序的时候,它应该运行哪个解释器。这会在下一节做详细解释。注意,你总是可以通过直接在命令行指定解释器,从而在任何平台上运行你的程序。就如同命令python helloworld.py一样。

重要
在你的程序中合理地使用注释以解释一些重要的细节——这将有助于你的程序的读者轻松地理解程序在干什么。记住,这个读者可能就是6个月以后的你!

跟在注释之后的是一句Python 语句 ——它只是打印文本“Hello World”。print实际上是一个操作符,而“Hello World”被称为一个字符串——别担心我们会在后面详细解释这些术语。

下一页
可执行的Python程序

过来亮个脸~~~

;P ;P ;P ;P ;P ;P ;P

可执行的Python程序

这部分内容只对Linux/Unix用户适用,不过Windows用户可能也对程序的第一行比较好奇。首先我们需要通过chmod命令,给程序可执行的许可,然后 运行 程序。

$ chmod a+x helloworld.py
$ ./helloworld.py
Hello World

chmod命令用来 改变 文件的 模式 ,给系统中所有用户这个源文件的执行许可。然后我们可以直接通过指定源文件的位置来执行程序。我们使用./来指示程序位于当前目录。

为了更加有趣一些,你可以把你的文件名改成仅仅helloworld,然后运行./helloworld。这样,这个程序仍然可以工作,因为系统知道它必须用源文件第一行指定的那个解释器来运行程序。

只要知道程序的确切位置,你现在就可以运行程序了——但是如果你希望你的程序能够从各个位置运行呢?那样的话,你可以把你的程序保存在PATH环境变量中的目录之一。每当你运行任何程序,系统会查找列在PATH环境变量中的各个目录。然后运行那个程序。你只要简单地把这个源文件复制到PATH所列目录之一就可以使你的程序在任何位置都可用了。

$ echo $PATH
/opt/mono/bin/:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/swaroop/bin
$ cp helloworld.py /home/swaroop/bin/helloworld
$ helloworld
Hello World

我们能够用echo命令来显示PATH变量,用$给变量名加前缀以向shell表示我们需要这个变量的值。我们看到/home/swaroop/bin是PATH变量中的目录之一。swaroop是我的系统中使用的用户名。通常,在你的系统中也会有一个相似的目录。你也可以把你选择的目录添加到PATH变量中去——这可以通过运行PATH=$PATH:/home/swaroop/mydir完成,其中“/home/swaroop/mydir”是我想要添加到PATH变量中的目录。

当你想要在任何时间、任何地方运行你的程序的时候,这个方法十分有用。它就好像创造你自己的指令,如同cd或其他Linux终端或DOS提示符命令那样。

提示
对于Python来说,程序、脚本或者软件都是指同一个东西。

下一页
python 中的数

python中的表达式

#!/usr/bin/python
# Filename: expression.py

length = 5
breadth = 2
area = length * breadth
print 'Area is', area
print 'Perimeter is', 2 * (length + breadth)
输出
$ python expression.py
Area is 10
Perimeter is 14

它如何工作
矩形的长度与宽度存储在以它们命名的变量中。我们借助表达式使用它们计算矩形的面积和边长。我们表达式length * breadth的结果存储在变量area中,然后用print语句打印。在另一个打印语句中,我们直接使用表达式2 * (length + breadth)的值。

另外,注意Python如何打印“漂亮的”输出。尽管我们没有在'Area is'和变量area之间指定空格,Python自动在那里放了一个空格,这样我们就可以得到一个清晰漂亮的输出,而程序也变得更加易读(因为我们不需要担心输出之间的空格问题)。这是Python如何使程序员的生活变得更加轻松的一个例子。

下一篇 python的 if 语句

备份脚本一

#!/usr/bin/python
# Filename: backup_ver1.py

import os
import time

# 1. The files and directories to be backed up are specified in a list.
source = ['/home/swaroop/byte', '/home/swaroop/bin']
# If you are using Windows, use source = [r'C:\Documents', r'D:\Work'] or something like that

# 2. The backup must be stored in a main backup directory
target_dir = '/mnt/e/backup/' # Remember to change this to what you will be using

# 3. The files are backed up into a zip file.
# 4. The name of the zip archive is the current date and time
target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip'

# 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))

# Run the backup
if os.system(zip_command) == 0:
    print 'Successful backup to', target
else:
    print 'Backup FAILED'

perl 的if 语句结构

if (条件) {
要执行的语句;
}

还可以有else的形式
if (条件) {
语句1;
} else {
语句2;
}

用perl计算圆周长

要求:提示用户输入半径长,然后自动输出圆周长。
注:当用户输入的半径为负数时,返回结果为0.  圆周长=2*pi*半径 , 其中pi=3.141592654

程序为:
#! /usr/bin/perl

print "please input the banjing:";
$bj=<STDIN>;
chomp $bj;
$pi=3.141592654;
  if ($bj<0) {
    $bj=0;
  }
  $zc = 2*$pi*$bj;
  print "the zhouchang is $zc.\n";

perl 计算两个数的乘积

要求:提示用户输入两个数,结果返回两个数的乘积。

程序:
#! /usr/bin/perl

print "please input 2 numbers:\n";
$a=<STDIN>;
$b=<STDIN>;
print "the sum of the numbers is:", $a*$b, "\n";

用perl计算一系列数的和

要求:数据是有键盘输入的,个数不定。

#! /usr/bin/perl

sub total {
  my $sum=0;
  while (@_) {
    $sum=$sum+pop @_;
  }
  return $sum;
}

print "Please input some numbers:\n";
$n=&total(<STDIN>);
print "the sum of these numbers is $n\n";

输入一列数字,求最大值

#! /usr/bin/perl -w

sub max {
  my($big)=shift @_;

  foreach (@_) {
    if ($big<$_) {
      $big=$_;
    }
  }
  $big
}
print "please input some numbers,and use Ctrl-D to end:\n";
chomp (@m=<STDIN>);
$n=&max(@m);
print "the maxmum number is:$n\n";

perl 的while循环

格式:
while (条件) {
语句;
}

例子:
$i = 0;
while ($i <10) {
$i += 1;
print $i;
}

perl 打印相同的指定行的字符串

要求:提示用户输入一个数n,和一个字符串。然后输出n行该字符串。

程序:
#! /usr/bin/perl
print "please input a number:";
$a=<STDIN>;
print "please input a character:";
$b=<STDIN>;
while ($n<$a) {
  print $b;
  $n+=1;
}

perl 哈希统计输入的字符串字数

要求:自定义输入一组字符串,例如 aa bb cc aa cc ,那么需要统计出各个字符串出现的次数。

#! /usr/bin/perl

my (@words, %count, $word);

chomp (@words=<STDIN>);

foreach $word (@words) {
  $count{$word} += 1;
}
foreach $word (keys %count) {
  print "$word was senn $count{$word} times.\n";
}

用perl按相反顺序打印从键盘上输入的字符

要求:每行一个读入从键盘上输入的字符,然后再以相反的顺序打印出来。

#! /usr/bin/perl

print "please input characters,and use CTRL-D finish:\n";
chomp(@a=<STDIN>);
@b=reverse @a;
print "@b\n";