Python每日笔记03

本次内容:循环+字符串

Python的循环加强练习

>> Python每日笔记—目录 <<

一、 while循环

  1. while循环的几种写法
    先来一个简单的求1-100和的while普通写法
#!/usr/bin/python
# _*_coding:utf-8_*_
# 开发人员:zys
# 开发时间:2021/4/8 8:07 
# 文件名称:01-while.PY
# 开发工具:PyCharm
# 求1+2+3+...+100的和
sum = 0
n = 100
counter = 1
while counter <= n:
    sum += counter
    counter += 1
print("1-%d的和为:%d" % (n, sum))

# 也可以将条件写在while后面
# 与while同级的else表示while结束要做的事情
count = 0
while count < 5:
    print(count, "小于5")
    count += 1
else:
    print(count, "大于或等于5")

# 如果while循环体内只有一条语句,可以将该语句与while写在同一行中
flag = 1
while flag: print("welcome to China")
print("Bye")
  1. while-else 结构
    这种写法是C++和Java中没有见过的写法
#!/usr/bin/python
# _*_coding:utf-8_*_
# 开发人员:zys
# 开发时间:2021/4/8 8:20 
# 文件名称:02-while.PY
# 开发工具:PyCharm   
i = 0
j = 0
while i < 10:  # 外循环
    i += 1
    print("这是外循环", i)
    while j < 5:  # 内循环
        j += 1
        print("这是内循环", end=' ')
    else:   # 当内循环不进行时,进行else,将j置为0
        j = 0

如上述代码段,while-else中可以使用else 重新设置循环变量的值,使用方式十分灵活

  1. break: 直接跳出循环
    continue: 跳过本次循环中剩余的内容
    break和continue大家应该十分熟悉,C++编程中经常会用到
    下面给出一个简单的案例:
#!/usr/bin/python
# _*_coding:utf-8_*_
# 开发人员:zys
# 开发时间:2021/4/8 9:40 
# 文件名称:03-while.PY
# 开发工具:PyCharm
# continue 和 break的效果

# break: 跳出本次循环,结束循环
i = 0
while i < 4:
    i += 1
    print("外循环")
    j = 0
    while j < 3:
        j += 1
        print("内循环")
        if j == 2:
            print("跳出循环")
            break   # 跳出当前循环,和外循环无关
            # break仅能跳出一次循环

# continue: 跳过本次循环,进入下一次循环
count = 0
while count < 10:
    count += 1
    if count == 4:
        continue
    print(count)
    #这里count = 4的结果将不会打印出来

二、for循环

       for循环和while循环的最大区别,就是while循环不需要知道循环的次数,给一个条件去做就行了,for循环需要有一个范围,使用到了range()函数。

  1. for循环的基本使用
    for循环可以在字符串内循环,也可以在列表和元组中循环
#!/usr/bin/python
# _*_coding:utf-8_*_
# 开发人员:zys
# 开发时间:2021/4/8 9:51
# 文件名称:05-for.PY
# 开发工具:PyCharm

# message = "今天风和日丽,适合出去踏青"
# message = [1, 2, 3, 4, 5, 6]
message = (1, 2, 3, 4, 5, 6)
for me in message:
    print(me)
range()函数:  range(start, end, scan)
start: 开始位置
end:	结束位置
scan: 每次递增的间距

range有三种输入参数的情况:
1、range(end):只有一个参数,会默认从0-end,每次递增/减1个
2、range(start,end):有两个参数,从[ start-end )循环,每次递增/减1个
3、range(start,end,scan):三个三处,从[ start-end )循环,每次递增/减scan个
# 使用range()序列函数进行计数
# for i in range(10):
for i in range(1, 10, 2):
    print(i)
  1. 下面给出一个例子,for-else+range+break的小练习,不难理解,运行一下即可知道结果
#!/usr/bin/python
# _*_coding:utf-8_*_
# 开发人员:zys
# 开发时间:2021/4/8 10:00 
# 文件名称:06-for.PY
# 开发工具:PyCharm   
sites = ["Baidu", "google", "Yahoo", "Taobao"]
for site in sites:
    if site == "Yahoo":
        print("雅虎")
        break
    print("循环内容:"+site)
else:
    print("没有完成循环数据")
print("完成循环")
  1. 除了上面的使用,range函数还可以循环负数。range还可以通过len()函数获取列表的长度,使用下标对列表进行循环。
# for使用range循环负数
for i in range(-10, -100, -30):
    print(i)
# 使用len()获取list的长度
# 再使用for和range函数遍历list的所有元素
a = ['google', 'baidu', 'taobao', 'qq']
for i in range(len(a)):
    print(i, a[i])
  1. 来一个经典的算法问题:求1-100的素数(质数),定义就不说了直接上代码:
    说明一下:这里没有优化算法,使用sqrt需要导包,可以使用偶数进行优化
#!/usr/bin/python
# _*_coding:utf-8_*_
# 开发人员:zys
# 开发时间:2021/4/8 10:26 
# 文件名称:08-for.PY
# 开发工具:PyCharm
import math
for i in range(2, 100):
    flag = 1 # 判断是否被整除的标记
    for j in range(2, i):
        if i % j == 0:
            flag = 0 # 如果被整除了,修改flag
    if flag == 1:
        print(i, end=' ')

三、变量生存时间

生存时间,有点像计算机网络中报文段的ttl,个人感觉有点类似。

# 数据类型是不允许改变的,这就意外着如果改变数字数据结构类型,
# 将重新分配内存空间
num = 0xA0F
num = 0o37
print(num) # 此时输出 num = 0o37 数据
del num     # 删除变量
print(num) # 没有信息

a = 1
b = 2
c = 3
del a, b, c

四、math包中常用内置函数

这没有什么好赘述的,记得有这个东西,想起来用即可。
给出案例比较实在。

'''常用的Number中的内置函数'''
import math

# 返回一个数字的绝对值
print(abs(-10))
# 返回数字的上入整数(上取整)     4.5 4.1 4.9
print(math.ceil(4.000000000000001)) # 打印 5
# print(math.ceil(4.0000000000000001)) # 打印 4
# 返回数字的上入整数(下取整)
print(math.floor(4.999999999999999)) # 打印 4
# print(math.floor(4.9999999999999999)) # 打印 5
'''上文中测试了一下float类型的有效位数,挺长的。。'''

# fabs():返回数字的绝对值
'''
fabs方法返回数字的绝对值,类似于abs()
二者区别在于:
abs()是内置函数,fabs()在math中定义
fabs()函数支队浮点型和整数类型有效,abs()还可以用在负数中。
'''
print(math.fabs(-10))

# 返回最大值     参数必须为一个序列
print(max(41, 31, 15, 61, 33, 333, 7, 777))
# 返回最小值     参数必须为一个序列
print(min(41, 31, 15, 61, 33, 333, 7, 777))
# 返回浮点数的四舍五入值,给一个参数,该参数表示四舍五入到小数点后面的位数
print(round(3.1415925, 3))

# 两种次幂的运算,pow需要导入包
print(5**2) # 5^2
print(pow(5, 3)) # 5^3

# 返回数字的平方根
print(math.sqrt(15))

四、字符串操作

  1. 字符串的+= 和 *=
str1 = 'hello'
str2 = "world"
str3 = '''亚洲'''
str4 = """中国"""
str1 += str2
print(str1) # 打印helloworld
str2 *= 2
print(str2) # 打印worldworld
  1. 字符串的切片
    参数和range函数的参数有些类似,如下:
'''字符串的切片'''
school = "江苏师范大学智慧教育学院软件工程专业"
print(school[1:5])  # 1-5位
print(school[:6])   # 前6位
print(school[1:])   # 2-最后位
print(school[len(school)-3:])   # 后3位
print(school[-6:])  # 后6位

str1 = "0123456789"
print(str1[2:5:1])  # 从2-5,每次递增1    234
print(str1[2:5:3])  # 从2-5,每次递增3    2
print(str1[-4:-1:1]) # 从[-4,-1],每次递增1   678
  1. 字符串下标表示和 操作符 in 的使用
    - 字符串可以使用下标表示
    - in操作符:判断元素是否在列表/元组/字典中
str1 = "我爱大学生活"
for i in str1:
    print(i)
for i in range(len(str1)):
    print(str1[i])
if '大学' in str1:
    print("刚才在聊大学生活")
else:
    print("刚才在瞎扯")
  1. 字符串常用函数(代码巨多预警!!)
    排版不好内容比较多,强烈建议慢慢看
'''字符串中的第一个字符转换为大写capitalize()'''
str1 = 'hello'
message = str1.capitalize()
print(message)

'''返回一个指定宽度居中的字符串center(),并且可以填充字符,默认填充为空格'''
message = "world"
print(message.center(40, '*'))  # '*'为填充字符

'''
count(sub,start,end):用于统计字符串里某个字符出现的次数
sub:    搜索的子字符串
start:  开始搜索的位置,默认为0
end:    结束搜索的位置,默认为最后
'''

str1 = "www.taobao.com"
sub = "o"
print(str1.count(sub))
sub = "a"
print(str1.count(sub, 0, 10))

# 编码    code
str1 = "我爱中国"
str1_utf8 = str1.encode("UTF-8")
str1_gbk = str1.encode("GBK")
print(str1_utf8)
print(str1_gbk)

# 解码    decode
print(str1_utf8.decode("utf-8", 'strict'))
print(str1_gbk.decode("GBK", 'strict'))
'''
    decode()方法是以指定的编码格式去解码bytes对象,默认编码为utf-8
    encoding:要使用的编码
    errors:设置不同的错误处理方案
'''

'''
    endswith()检查是否以某字符串结尾
    startswith()检查是否以某字符串开头
'''

message = "春花秋月何时了,往事知多少?小楼昨夜又东风,故国不堪回首明月中。"
# 检查5-20字符串是否以“往事”开头
flag = message.startswith("往事", 5, 20) 
print(flag)	# False

'''字符串查找方法:
    find()方法检测字符串中似乎包含字符串str,如果存在,则返回下标
    index()方法同find()
    区别在于,index找不到会报异常,find找不到返回-1
    
'''

message = "春花秋月何时了,往事知多少?小楼昨夜又东风,故国不堪回首明月中。"
flag = message.find("小楼", 6, 25)
flag = message.index("大楼")
print(flag)

# isalnum()检测字符串是否由字母和数字组成
# 如果该字符中,所有字符都是字母或者数字则返回True
str1 = '''jsnu2021'''
print(str1.isalnum())

# 如果字符串中至少有一个字符,并且所有的字符都是字母或者中文则返回True
str1 = 'goto世界'
print(str1.isalpha())

# isdigit() 判断字符串是否都是字符串组成
str2 = "13814970381"
print(str2.isdigit())

# isspace() 检测字符串中是否由空格组成
str3 = "           "
print(str3.isspace())

# isupper() 判断是否全部为大写
# islower() 判断是否全部为小写
# lower() 转换为小写
# upper() 转换为大写
str4 = "helloWorld"
print(str4.isupper())
print(str4.upper())
print(str4.lower())
print(str4.upper())

  1. 字符串的连接,join(seq)函数用于将序列中的元素以指定的字符连接生成一个新的字符串
    seq: 要连接的元素序列
s1 = "_"
s2 = ""
seq = ("A", "B", "C", "D")  # 字符串序列 - 元组
print(s1.join(seq))  # A_B_C_D
print(s1.join(s2))  # 空
  1. 字符串左对齐填充ljust()
    截去空白字符串或指定字符串lstrip()
'''
    ljust(width, fillchar)
    width:指定字符串的长度
    fillchar:填充字符,默认为空格
    返回一个源字符串左对齐,并使用空格填充至指定长度的新字符串
    如果指定长度小于原字符串的长度,则返回原字符串
'''
message = "Today is Monday"
print(message.ljust(30, '!'))

# lstrip用于截掉字符串左边的空白字符串或者指定字符串,rstrip同理
str1 = "    this is a string example."
print(str1.lstrip())

  1. 字符串替换啊replace()
# replace:把字符串中的old字符替换成新字符,
# 如果指定第三个参数max,说明替换的次数不超过max
str1 = "北平是首都,首都是北平,北平在中国"
print(str1.replace('平', '京', 2))    # 只会替换前两个平

  1. 字符串切片方法split()
# 字符串的切片方法,split()通过指定分隔符对字符串进行切片,
#如果第二个参数num有指定值,则分割为num+1个字符串

# str.split(str = "",num = str.count(str))
# str:分隔符 num:分割次数, 默认为-1,分割所有

message = "床前明月光,疑是地上霜,举头望明月,低头思故乡"
print(message.split(","))   # 返回一个list类型 ['床前明月光,疑是地上霜,举头望明月,低头思故乡']
print(message.split(",", 2))    # 分割num+1次
print(message.replace(',', '\n'))  # 将逗号替换成换行符

内容过于繁多,课堂练习分开写吧,刚好当做练习了。
课堂练习:

课堂小作业1-Star:
通过while循环嵌套 实现如下图形
****...***
*        *
*        *
*        *
****...***

课堂小作业2-直角三角形:
*
**
***
****
*****
******
*******
********
*********

课堂小作业3-九九乘法表(作业2改:)
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

for循环变量 in 序列:
    循环体

   *
  ***
 *****
*******

>> 课堂练习答案 <<

如果这篇文章对你有帮助,点赞评论一下呗,持续更新。。。

你可能感兴趣的:(python,字符串)