python的基础语法(if,while,for,break,continue 特殊缩进)

来源:互联网 发布:微信 打开淘宝客户端 编辑:程序博客网 时间:2024/06/05 23:07

1.python的缩进

python 关于缩进的问题

习惯了java,c++之类的宽容,初学python,被它摆了道下马威,写if else,竟然必须要我正确用缩进格式,原来在python里不能用括号来表示语句块,也不能用开始/结束标志符来表示,而是靠缩进来表示,好吧,我以后多注意 

空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我们将在后面的章节中看到有关块的用处的例子。


你需要记住的一样东西是错误的缩进会引发错误。例如:

i = 5
print 'Value is', i # Error! Notice a single space at the start of the line
print 'I repeat, the value is', i

当你运行这个程序的时候,你会得到下面的错误:

File "whitespace.py", line 4
print 'Value is', i # Error! Notice a single space at the start of the line
^
SyntaxError: invalid syntax

注意,在第二行的行首有一个空格。Python指示的这个错误告诉我们程序的语法是无效的,即程序没有正确地编写。它告诉你, 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)。何时你能够使用新块,将会在后面的章节,如控制流中详细介绍。

如何缩进
不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我 强烈建议 你在每个缩进层次使用 单个制表符 或 两个或四个空格 。
选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即 只 使用这一种风格。 


Python的缩进应该是一个优点,刚开始可能不是非常的习惯,慢慢就行了!
当你看别人的Python代码的时候,你就会深切感受到缩进的好处。
另外,Python的缩进可以在一定程度上防止大量的代码堆积在一起,客观上促使形成良好的代码风格

Py的哲学同Perl/ruby的不同。它不会给你很多功能,然后警告你说,这个这个最好别用,那个那个得注意了。它认为凡是它提供给你的,都是给你用的,只要符合它的语法规范,随便怎么用都可以。如果你能写出烂代码,那说明这个设计有问题。这是一种负责任的态度。

{} 可以允许程序员写出很烂的代码,而这与Py的哲学不符。所以Py在设计之处就规定,用缩进而不是{}表示程序块。

这并没有什么不好的,在绝大多数情况下,缩进比{}更清楚。

但是Py的缩进也不是无往不利的。个人感觉有两个地方不方便。

第一,粘贴代码的时候修改缩进不方便。但好在我有vi。

第二,html嵌套py代码的时候,要同时维护两套缩进,html的和py的。这个太困难了。我觉得这是妨碍PSP流行的最重要的原因。

不可否认,python的代码一旦缩进乱了,是无法重新格式化的。


2.

python的if判断

if 判断条件的时候,如果是多个条件一起进行判断,那么就需要逻辑运算符
 
并且-----------and
或者-----------or
非(取反)----not
 
if 条件1 and 条件2:
     条件1和条件2都满足时,做的事情1
     。。。。。。。。。。,做的事情2
     。。。。。。。。。。,做的事情3
     等等
 
if 条件1 or tiaojian2:
     条件1和条件2有一个满足时,做的事情1
     。。。。。。。。。。。。,做的事情2
     。。。。。。。。。。。。,做的事情3
     等等
 
if not (条件1 and 条件2):
     满足条件1和条件2的取反时,做的事情1
     。。。。。。。。。。。。,做的事情2
     。。。。。。。。。。。。,做的事情3
     等等
 
总结:
方式1:
if 条件:
    条件满足时做的事情1
    条件满足时做的事情2
    条件满足时做的事情3
    。。。。。。等等
 
方式2:
if 条件:
    条件满足时做的事情1
    条件满足时做的事情2
    条件满足时做的事情3
    。。。。。。等等
else:
    条件不满足时做的事情1
    条件不满足时做的事情2
    条件不满足时做的事情3
    。。。。。。等等
 
方式3:
if 条件:
    条件满足时做的事情1
    条件满足时做的事情2
    条件满足时做的事情3
    。。。。。。等等
elif 条件2:
    条件2不满足时做的事情1
    条件2不满足时做的事情2
    条件2不满足时做的事情3
    。。。。。。等等
elif 条件3:
    条件3不满足时做的事情1
    条件3不满足时做的事情2
    条件3不满足时做的事情3
    。。。。。。等等
else:
    条件1、2、3都不满足的情况下,默认执行的事情,(注意:else可有可无,根据实际的功能来确定)
 
如果条件1满足,那么就执行条件1满足时做的事情,做完后,下面的条件2、3都不会被执行,而是直接结束整个if语句
 
如果条件1不满足,那么就判断条件2是否满足,如果条件2满足,那么就执行条件2满足时的代码,然后结束整个if语句
 
如果条件1、2都不满足,那么就判断条件3,如果条件3满足,那么就执行条件3满足时执行的事情,然后结束整个if语句
 
周一至周日练习
#!/bin/bash env python
 
#1.获取用户输入的数字
num = input("请输入一个数字,1:周一 2:周二 。。。")
 
#2.根据用户的数据,显示相应的信息
if num=="1":
    print("周一")
elif num=="2":
    print("周二")
elif num=="3":
    print("周三")
elif num=="4":
    print("周四")
elif num=="5":
    print("周五")
elif num=="6":
    print("周六")
elif num=="7":
    print("周日")
else:
    print("请输入正确数字")
 
 
if嵌套:
if 条件1:
    条件1满足时做的事情1
    if 条件2:
        条件2满足时做的事情2

3.

while循环语法结构

当需要语句不断的重复执行时,可以使用while循环
while expression:
    while_suite
语句while_suite会连续不断的循环执行,直到表达式的值变成0或false
 
复制代码
#!/usr/bin/env pythonsum100 = 0counter = 1while counter <= 100:    sum100 += counter    counter += 1print "result is %d" % sum100
复制代码

4.for 循环


for循环可以用来遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次)。for循环的基本结构如下:

具体看这个案例:

设计一个函数,在桌面创建10个文本,用数字从1-10依次给它们命名。

复制代码
 1 def text_create(): 2     path = '/Users/duwangdan/Desktop/' 3     for text_name in range(1,11): 4         # 1-10的范围需要用到range函数 5         with open (path + str(text_name) + '.txt','w') as text: 6             # with...as的用法正文内会详细介绍 7             text.write(str(text_name)) 8             text.close() 9             print('Done')10 11 text_create()
复制代码

现在我们来理解下每行代码。

第1行:定义一个text_create函数;

第2行:给变量path赋值为桌面路径;

第3行:将1-10范围内的每个数字依次装入变量text_name中,每次命名一个文件;

第5行:打开位于桌面的txt文件,并给每一个text执行写入操作;

第7行:给每个文件依次命名;

第8行:关闭文件;

第9行:执行完一次命名操作后显示一个Done;

第11行:调用函数。

案例中提到了“with...as”,在Python中,“with...as”语法是用来代替传统的“try...finally”的。

比如:打开桌面的test文件,尝试读取文件内容,最后关闭文件。

1 file = open('/Users/duwangdan/Desktop/test.txt')2 try:3     data = file.read()4 finally:5     file.close()

虽然这段代码执行良好,但比较冗长,换成用“with...as”来表达后,代码会更为简洁。

1 with open('/Users/duwangdan/Desktop/test.txt') as file:2     data = file.read()

除了上面的单层循环之外,还有一种常见的循环,是嵌套循环

比如用嵌套循环实现九九乘法口诀。

1 for i in range(1,10):2     for j in range(1,10):3         print('{} X {} = {}'.format(i,j,i*j))

最外层的循环,依次将1-9的数字储存在变量i中;变量i每取一次值,内层循环就依次将1-9的数字储存在变量j中;最后打印出当前的i、j、和i*j的值。

从Python2.6开始,新增了format函数,用来格式化字符串,可以通过{}.format来实现。在上面这个案例中,将i、j、i*j的值分别存入前面的{ }中,然后做好格式化,统一形式。


5.python中   xrange和range的异同

range
    函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。
range示例: 

 

  1. >>> range(5) 
  2. [0, 1, 2, 3, 4] 
  3. >>> range(1,5) 
  4. [1, 2, 3, 4] 
  5. >>> range(0,6,2)
  6. [0, 2, 4]


xrange
    函数说明:用法与range完全相同,所不同的是生成的不是一个数组,而是一个生成器。
xrange示例: 

  1. >>> xrange(5)
  2. xrange(5)
  3. >>> list(xrange(5))
  4. [0, 1, 2, 3, 4]
  5. >>> xrange(1,5)
  6. xrange(1, 5)
  7. >>> list(xrange(1,5))
  8. [1, 2, 3, 4]
  9. >>> xrange(0,6,2)
  10. xrange(0, 6, 2)
  11. >>> list(xrange(0,6,2))
  12. [0, 2, 4]


    由上面的示例可以知道:要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间,这两个基本上都是在循环的时候用:

  1. for i in range(0, 100): 
  2. print i 
  3. for i in xrange(0, 100): 
  4. print i 


    这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:

  1. = range(0,100) 
  2. print type(a) 
  3. print a 
  4. print a[0], a[1] 


    输出结果:

  1. <type 'list'>
  2. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
  3. 0 1


    而xrange则不会直接生成一个list,而是每次调用返回其中的一个值:

  1. = xrange(0,100) 
  2. print type(a) 
  3. print a 
  4. print a[0], a[1] 


    输出结果:

  1. <type 'xrange'>
  2. xrange(100)
  3. 0 1


    所以xrange做循环的性能比range好,尤其是返回很大的时候,尽量用xrange吧,除非你是要返回一个列表。


6.break语句

break语句可以结束当前循环然后跳转到下条语句
写程序的时候,应尽量避免重复的代码,在这种情况下可以使用while-break结构
复制代码
#!/usr/bin/env pythonwhile True:    yn = raw_input("continue?(y/n)")    if yn in 'Yy':        break    print "work on"/usr/bin/python2.6 /root/PycharmProjects/untitled10/break1.pycontinue?(y/n)nwork oncontinue?(y/n)yProcess finished with exit code 0
复制代码

continue语句

当遇到continue语句时,程序会终止当前循环,并忽略剩余的语句.然后回到循环的顶端
如果仍然满足循环条件,循环体内语句继续执行,否则退出循环
所有偶数的和
复制代码
#!/usr/bin/env pythonsum100 = 0counter = 1while counter <= 100:    counter += 1    if counter % 2 == 1:        continue    sum100 += counterprint sum100
复制代码

else语句

python中的while语句也支持else子句
else子句只在循环完成后执行
break语句也会跳过else块
复制代码
#!/usr/bin/env pythonsum10 = 0i = 1while i <= 10:    sum10 += i    i += 1else:    print sum10
复制代码


阅读全文
0 0
原创粉丝点击