聪明办法学python(4)
TASK 06 循环 LOOP
1.1 for循环
for x in range(m,n+1) #range(x,y)是左闭右开区间
1.2 range
range(n+1) #起始范围默认为0
range(m,n,k) #第三个参数为步长step
for x in range(5,20,7) == (5 + 12 +19)
eg :只对从m 到 n 的奇数求和
def sum(m,n):
total = 0
for x in range(m,n+1):
if x % 2 == 1:
total += x
return total
eg:从尾到头的range
for x in range(n,m-1,-1)
#以上写法不建议
for i in reversed(range(10,0,1))
#reversed反转
1.3 for循环的嵌套
def printCoordinates(xMax, yMax):
for x in range(1, xMax+1):
for y in range(1, yMax+1):
print(f"( {x} , {y} ) ", end="")
print()
#多层循环运行极慢
eg:星号图
def Stars(n, m):
# 输出一个 n*m 的星型矩阵图
for row in range(n):
for col in range(m):
print("*", end="")
print()
Stars(5, 5)
*****
*****
*****
*****
*****
#换一种写法
def printMysteryStarShape(n):
for row in range(n):
print(row, end=" ")
for col in range(row):
print("*", end=" ")
print()
printMysteryStarShape(5)
0
1 *
2 * *
3 * * *
4 * * * *
2.1 while循环
#我不知道什么时候停下来
def leftmostDigit(n):
n = abs(n)
while n >= 10:
n = n//10
return n
#找出一个数最左边的数字
eg :
def isMultipleOf4or7(x):
return ((x % 4) == 0) or ((x % 7) == 0)
def nthMultipleOf4or7(n):
found = 0
guess = -1
while found <= n:
guess += 1
if isMultipleOf4or7(guess):
found += 1
return guess
#在知道循环范围时不应该使用while,而应该使用for
3.1 break与continue语句
for n in range(200):
if n % 3 == 0:
continue # 跳过这次循环
elif n == 8:
break # 跳出当前整个循环
else:
pass # 啥也不做,占位符(不会被运行)
print(n, end=" ")
1 2 4 5 7
eg:判断一个数是不是质数
def isPrime(n):
if n < 2:
return False
for factor in range(2,n):
if n % factor == 0:
return False
return True
def fasterIsPrime(n):
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0:
return False
maxFactor = round(n**0.5)
for factor in range(3, maxFactor+1, 2):
if n % factor == 0:
return False
return True
#快了一点 但是只有结果正确才能提及算法快慢
4.1 合理的剪枝,缩小搜索范围/循环范围,可以大幅提高程序运行效率
TASK 07 字符串
1.1 字符串文字
#四种引号
#引号的作用就是将文字包裹起来,告诉 Python "这是个字符串!"
#单引号 ' 和双引号 " 是最常见的两种字符字符串引号
print('单引号')
print("双引号")
#三个引号的情况不太常见,但是它在一些场合有特定的作用,如doc-strings
我们为什么需要两种不同的引号?
print("聪明办法学 Python 第二版的课程简称是 'P2S'")
如果我们偏要只用一种引号,这会导致语法错误,Python 无法正确判断一个字符串的终止位置
1.2字符串里的换行符号
#前面有反斜杠 \ 的字符,叫做转义序列
print("Data\nwhale") # \n 是一个单独的换行符号
Data
whale
#等价于
print("""Data
whale""")
Data
whale
#其它的转移序列
print("双引号:\"")
双引号:"
print("反斜线:\\")
反斜线:\
print("换\n行")
换
行
print("这个是\t制\t表\t符\n也叫\t跳\t格\t键")
这个是 制 表 符
也叫 跳 格 键
s = "D\\a\"t\ta"
print("s =", s)
print("\ns 的长度为:", len(s))
s = D\a"t a
s 的长度为: 7
1.3一些字符串常量
import string
print(string.ascii_letters)
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.ascii_lowercase)
abcdefghijklmnopqrstuvwxyz
print(string.ascii_uppercase)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.digits)
0123456789
print(string.punctuation) # < = >
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
print(string.printable)
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
print(repr(string.whitespace))
' \t\n\r\x0b\x0c'
1.4一些字符串的运算
print("abc" + "def")
print("abc" * 3)
abcdef
abcabcabc
print("ring" in "strings") # True
print("wow" in "amazing!") # False
print("Yes" in "yes!") # False
print("" in "No way!") # True
print("聪明" in "聪明办法学 Python") # True
True
False
False
True
True
1.5字符串的索引和切片
s = "Datawhale"
print(s)
print(s[0])
print(s[1])
print(s[2])
print(s[3])
Datawhale
D
a
t
a
print(s[0:4])
print(s[4:9])
Data
whale
print(s[0:2])
print(s[2:4])
print(s[5:7])
print(s[7:9])
Da
ta
ha
le
1.6翻转字符串
# 可以,但是不优雅
print(s[::-1])
elahwataD
# 优雅
def reverseString(s):
return s[::-1]
print(reverseString(s))
elahwataD
1.7字符串的循环
for i in range(len(s)):
print(i, s[i])
0 D
1 a
2 t
3 a
4 w
5 h
6 a
7 l
8 e
in 而不是for
for c in s:
print(c)
D
a
t
a
w
h
a
l
e
#可以使用 enumerate() 获得元素的序号
for idx, c in enumerate(s):
print(idx, c)
0 D
1 a
2 t
3 a
4 w
5 h
6 a
7 l
8 e
#zip(a, b) 可以在一次循环中,分别从 a 和 b 里同时取出一个元素
for a, b in zip(s, reverseString(s)):
print(a, b)
D e
a l
t a
a h
w w
h a
a t
l a
e D
#用 split() 来循环
# class_name.split() 本身会产生一个新的叫做“列表”的东西,但是它不存储任何内容
class_name = "learn python the smart way 2nd edition"
for word in class_name.split():
print(word)
learn
python
the
smart
way
2nd
edition
1.8格式化字符串
用 f-string 格式化字符串
x = 42
y = 99
print(f'你知道 {x} + {y} 是 {x+y} 吗?')
你知道 42 + 99 是 141 吗?
2.1基础文件操作
Python open() 函数用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数。
open(file, mode) 函数主要有 file 和 mode 两个参数,其中 file 为需要读写文件的路径。mode 为读取文件时的模式,常用的模式有以下几个:
r
:以字符串的形式读取文件rb
:以二进制的形式读取文件w
:写入文件a
:追加写入文件
2.2文件对象
open 函数会返回一个 文件对象。在进行文件操作前,我们首先需要了解文件对象提供了哪些常用的方法:
close( )
: 关闭文件- 在 r 与 rb 模式下:read(): 读取整个文件;readline(): 读取文件的一行;readlines(): 读取文件的所有行
- 在 w 与 a 模式下:write()
: ; writelines()
:
2.3注意
- 注意每次操作结束后,及时通过 close( ) 方法关闭文件,否则代码什么不会输出
- w 模式会覆盖之前的文件。如果你想在文件后面追加内容,可以使用 a 模式操作
2.4 with语句
with open("ZenOfPy.py", "w", encoding="utf-8") as file:
file.write(Caesar_cipher)
print(len(Caesar_cipher))
1003
文件操作推荐使用 with open("xxx") as yyy,这样就不用写 f.close()
标签:文件,return,python,range,办法,字符串,聪明,print,def From: https://www.cnblogs.com/liuyankun111/p/17872191.html