1. print和import

1.1 打印多个参数

可用 + 连接多个字符串,可保证被连接字符串前无空格;

可用sep=“_”,自定义各种分隔符;

 print("I","wish","to","register","a","complaint",sep="_")
结果:
I_wish_to_register_a_complaint

可自定义结束字符串,以替换默认的换行符;

 print('Hello,',end='')
print('World!')
结果:
Hello,World!

1.2 导入时重命名

导入某个模块时,通常使用如下方式:

 方法1:import somemodule
方法2:from somemodule import somefunction
方法3:from somemodule import somefuction,anotherfunction,yetanotherfunction
方法4:from somemodule import *

如果导入的两个模块,都包含同一个函数,可用按如下方法调用函数:

 module1.open(...)
module2.open(...)
也可以在语句末尾加as子句并指定别名
3 import math as foobar
4 foobar.sqrt(4)

2. 赋值

2.1 序列解包(可迭代对象解包)

将一个序列(或任何可迭代对象)解包,并将得到的值存储在一系列变量中。解释如下:

 values = 1,2,3
print(values)
x,y,z = values
print(x)
结果:
(1, 2, 3)
1

(1)同时(并行)给多个变量赋值

 x,y,z = 1,2,3
print(x,y,z)
结果:
1 2 3

(2)交换多个变量的值

 x,y,z = 1,2,3
x,y = y,x
print(x,y,z)
结果:
2 1 3

*** 序列解包,在使用返回元组(或其他序列或可迭代对象)的函数或方法时很有用。

eg:随机从字典中获取或删除一个键-值对,用方法popitem,它随机获取一个键-值对并以元组的方式返回。然后将返回的元组解包到两个变量中。

 scoundre = {'name':'Robin','girlfriend':'Marion'}
key, value = scoundre.popitem()
print(key)
print(value)
结果:
girlfriend
Marion

(3)用星号运算符(*)收集多余的值,这样无需确保值和变量的个数相同

 a,b,*rest = [1,2,3,4,5]
print(rest)
结果:
[3, 4, 5]

# 带星号的变量可以放在其他位置
name = "Albus Precival Wulfric Brain Dumbledore"
first, *middle, last = name.split()
print(middle)
结果:
['Precival', 'Wulfric', 'Brain']

赋值语句的右边可以是任何类型的序列,但带星号(*)的变量最终包含的总是一个列表。

 a, *b, c = "abc"
print(a,b,c)
结果:
a ['b'] c

(4)链式赋值

用于将多个变量关联到同一个值,链式赋值是一种快捷方式。

 x = y = somefunction()

 # 上述代码与下面等价
y = somefunction
x = y

(5)增强赋值

如代码 x = x + 1,可直接将右边表达式中的运算符(+)移到赋值运算符(=)前面,写成 x += 1。该方式称为增强赋值,适用于所有标准运算符。增强赋值,可让代码更紧凑、更简洁,增加可读性。

3. 代码块 - 缩进

代码块是通过缩进代码(即前面加空格)来创建的。

也可使用制表符,但标准做法是只使用空格来缩进,且每级缩进4个空格。

4. 条件和条件语句

(1) False,None,0,"",(),[],{},这些值均将被解释器视为假。

(2)if语句

(3)else子句

(4)elif子句

(5)代码块嵌套

5. 循环

(1)while循环

 name = ''
while not name:
name = input('plz enter your name:')
print('Hllo, {}!'.format(name))
结果:
plz enter your name:elon
Hllo, elon!

并未像书中所说:回车后再次出现提示信息。

书中修复该现象方法:将while not name 改为 while not name or name.isspace()或while not name.strip()。

(2)for 循环

该函数,可为序列(或其他可迭代对象)中每个元素执行代码块。基本上,可迭代对象是可使用for循环进行遍历的对象。

 words = ['this','is','an','ex','parrot']
for word in words:
# 用end=' '替代print默认输出的换行符合
print(word, end=' ')
结果:
this is an ex parrot

只要能使用for循环,就不用使用while循环!!!

创建范围函数range(0,10),起始位置为0,不包含结束位置(10)

 print(list(range(0,10)))
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

(3)迭代字典

  1)遍历字典的所有关键字

 d = {'x':1,'y':2,'z':3}
for key in d:
print(key,end=', ')
print(key, 'corresponds to', d[key])
结果:
x, x corresponds to 1
y, y corresponds to 2
z, z corresponds to 3

  2)遍历字典的所有值,d.values()

 for value in d.values():
print(value)
结果:
1
2
3

  3)遍历字典,返回键-值对,d.items()

 for key,value in d.items():
print(key, 'corresponds to', value)
结果:
x corresponds to 1
y corresponds to 2
z corresponds to 3

***字典元素的排列顺序不确定,如果所处理的键或值顺序非常重要,可将键或值存储在一个列表中,并对列表排序,再迭代。

(4)迭代工具

  1)并行迭代 - zip内置函数,缝合序列

  如,需同时迭代两个序列,方法(1)如下:

 names = ['anne','beth','george','damon']
ages = [12,45,32,99] for i in range(len(names)):
print(names[i], 'is', ages[i], 'years old')
结果:
anne is 12 years old
beth is 45 years old
george is 32 years old
damon is 99 years old

  方法(2):用zip函数解包

 names = ['anne','beth','george','damon']
ages = [12,45,32,99] #用zip缝合两个序列
ziptool = list(zip(names,ages))
print(ziptool)
#缝合后,在循环中将元组解包
for name,age in zip(names,ages):
print(name, 'is', age, 'years old')
结果:
[('anne', 12), ('beth', 45), ('george', 32), ('damon', 99)] anne is 12 years old
beth is 45 years old
george is 32 years old
damon is 99 years old

  ***函数zip可用于“缝合”任意数量的序列

  ***使用zip函数缝合时,当序列长度不同时,函数zip将在最短的序列用完后停止“缝合”

 listzip = list(zip(range(5), range(1000)))
print(listzip)
结果:
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

  2)迭代时获取索引

  使用内置函数enumerate,该函数能迭代索引-值对,其中的索引是自动提供的。

 names = ['anne','beth','george','damon']
print(enumerate(names)) for index,string in enumerate(names):
if 'geo' in string:
names[index] = '[censored]' # 将包含'geo'的元素替换为'[censored]'
7 print(string,'\'s index is', index)
8
print(names)
10
结果:
<enumerate object at 0x000001C7EC6F3E58>
george 's index is 2
14
['anne', 'beth', '[censored]', 'damon']

  3)反向迭代和排序后再迭代

 lists = [4, 3, 5, 8, 6, 7]
print(sorted(lists))
print(list(reversed(lists)))
结果:
[3, 4, 5, 6, 7, 8]
[7, 6, 8, 5, 3, 4] words = 'Hello, world!'
print(sorted(words))
结果:
[' ', '!', ',', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w'] print(list(reversed(words)))
reversed_words = ''.join(reversed(words))
print(reversed_words)
结果:
['!', 'd', 'l', 'r', 'o', 'w', ' ', ',', 'o', 'l', 'l', 'e', 'H']
!dlrow ,olleH # reversed和sorted,不会就地修改对象,而是返回反转和排序后的版本
print(words)
结果:Hello, world!

*** 要按字母表排序,可先转换为小写。可将sort或sorted的key参数设置为str.lower

 print(sorted("aBC", key=str.lower))
结果:
['a', 'B', 'C']

(5)跳出循环

  1)break - 结束(跳出)循环

 from math import sqrt

 for n in range(99, 0, -1):
root = sqrt(n)
if root == int(root):
print(n)
break 结果:81

  2)continue

  结束当前迭代,并跳到下一次迭代开头(跳过循环体中余下语句,但不结束循环)。

  continue不如break用得多。

  3)while True/break

  while True导致循环永不结束,但将条件放在了循环体内的一条if语句中,而这条if语句将在条件满足时调用break。(避免在代码中过多使用break)

 while True:
word = input('please enter a word: ')
if not word:
break
print('The word is ', word)
结果:
please enter a word: elon
The word is elon
please enter a word:

(6)循环中的else子句

  通常,循环中使用break是因为“发现”了什么或“出现”了什么情况。若要判断循环是提前结束还是正常结束:

  1)可在循环开始前定义一个布尔变量并将其设置为False,再在跳出循环时设置为True。便可在循环后用一条if语句来判断循环是否提前结束。

 from math import sqrt
break_out = False
for x in range(99,81,-1):
root = sqrt(x)
if root == int(root):
break_out = True
print(x)
break
if not break_out:
print("I don't break out!")
结果:
I don't break out!

  模板:

 # 模板
break_out = False
for x in seq:
do_something()
if condtion(x):
break_out = True
break
do_something_else()
if not break_out:
print("I don't break out!")

  2)***简单的方法,在循环中添加一条else子句,它仅在没有调用Break时才执行。

 from math import sqrt
for n in range(99,81,-1):
root = sqrt(n)
if root == int(root):
print(n)
break
else:
print("Don't find it!") 结果:Don't find it!

20190830

  治军之道,以勤字为先。身勤则强,佚则病;家勤则兴,懒则衰;国勤则治,怠则乱;军勤则胜,惰则败。惰者,暮气也,常常提其朝气为要。——曾文正公,巳未二月

Python基础 第5章 条件、循环及其他语句(1)的更多相关文章

  1. Python基础教程之第5章 条件, 循环和其它语句

    Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 #Chapter 5 条件, 循环 ...

  2. Python基础1:if条件判断 break/continue语句

    计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. Python中,if语句被用来进行判断,它的语法结构是: 1 if 判断条件: 2 执行语句…… 3 var = input(" ...

  3. python基础教程第5章——条件循环和其他语句

    1.语句块是在条件为真(条件语句)时执行或者执行多次(循环语句)的一组语句.在代码前放置空格来缩进语句即可穿件语句块.块中的每行都应该缩进同样的量.在Phyton中冒号(:)用来标识语句块的开始,块中 ...

  4. Python基础 第5章 条件、循环及其他语句(2)

    6. 简单推导 列表推导,是一种从其他列表创建列表的方式,其原理类似于for循环. list1 = [x * x for x in range(10)] print(list1) 结果: [0, 1, ...

  5. python学习笔记2_条件循环和其他语句

    一.条件循环和其他语句 1.print和import的更多信息. 1.1.使用逗号输出  //print() 打印多个表达式是可行的,用逗号隔开.       在脚本中,两个print语句想在一行输出 ...

  6. Python之条件 循环和其他语句 2014-4-6

    #条件 循环和其他语句 23:30pm-1:431.print和import的更多信息 使用逗号将多个表达式输出 >>> print 'age:',42 age: 42 >&g ...

  7. Python基础(6)--条件、循环

    本文的主要内容是 Python 的条件和循环语句以及与它们相关的部分. 我们会深入探讨if, while, for以及与他们相搭配的else,elif,break,continue和pass语句. 本 ...

  8. 第一章:python基础语法| 字符编码| 条件语句...

    1.编程语言介绍 编程就是写代码,让计算机帮你做事情.计算机底层是电路,只认识二进制0和1.机器语言&汇编语言语言进化历史:机器.汇编.高级.机器语言只接受二进制代码:汇编语言是采用英文缩写的 ...

  9. python基础(二)条件判断、循环、格式化输出

    继续上一篇,今天主要总结一下条件判断.循环.格式化输出 一.条件判断 python中条件判断使用if else来判断,多分支的话使用if elif ... else,也就是如果怎么怎么样就怎么怎么样, ...

随机推荐

  1. [TJOI2019]甲苯先生的字符串——矩阵乘法+递推

    题目链接: [TJOI2019]甲苯先生的字符串 我们用一个$26*26$的$01$矩阵记录任意两个字符是否能相邻. 设$f[i][j]$表示处理完前$i$个字符,第$i$个字符为$j$的方案数. 可 ...

  2. 2019-06-03 校内python模拟题解(所有非原题)

    一起来女装吧 本题改编自USACO(USA Computing Olympiad) 1.1节的第一题 (感谢lsy同学对本题题面的贡献) 直接计算就好了 chr:将ASCII码转成字符 ord:字符对 ...

  3. openfoam变热物性参数的设置【转载】

    转载自:http://blog.sina.com.cn/s/blog_9de422500102va73.html 物性参数在constant/thermophysicalProperties文件中设置 ...

  4. IntelliJ IDEA 2017.3 配置Tomcat运行web项目教程(多图)

    小白一枚,借鉴了好多人的博客,然后自己总结了一些图,尽量的详细.在配置的过程中,有许多疑问.如果读者看到后能给我解答的,请留言.Idea请各位自己安装好,还需要安装Maven和Tomcat,各自配置好 ...

  5. arcgis python 布局中所有元素平移

    # Author: ESRI # Date: July 5, 2010 # Version: ArcGIS 10.0 # Purpose: This script will loop through ...

  6. OpenJudge计算概论-忽略大小写比较字符串大小

    /*======================================================================= 忽略大小写比较字符串大小 总时间限制: 1000ms ...

  7. OpenJudge计算概论-分数求和

    /*====================================================== 1006:分数求和 总时间限制: 1000ms 内存限制: 65536kB 描述 输入 ...

  8. Promise和Generator

    异同: 1.promise解决的是串行的嵌套异步问题. 2.yield把Generator Function切割为有多个出口的Generation. 3.Promise是社区的研发产物,yield是E ...

  9. python基础之线程、进程、协程

    线程 线程基础知识 一个应用程序,可以多进程.也可以多线程. 一个python脚本,默认是单进程,单线程的. I/O操作(音频.视频.显卡操作),不占用CPU,所以: 对于I/O密集型操作,不会占用C ...

  10. iis启动异常 0x80072749

    错误提示: “/”应用程序中的服务器错误. 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同 ...