python基础day05笔记

2018.7.6

day04回顾:

  字符串
    字符串格式化表达式

  •       字符串  % (参数)

    生成一定格式字符串

  •     %%
  •     %d
  •     %s
  •     ...

  占位符和类型码之间的 格式化语句

  •     %+07.2f
  •     %-+7.2f

    
  循环语句

  •     break

  
while 语句
  语法:

  •     while 真值表达式:
  •         语句块1
  •     else:
  •         语句块2



while 语句的嵌套

break 语句
  作用:
    跳出循环(结束包含此break语句的循环语句)


死循环:
  while True:

  •       if ....:
  •          break
  •   else:
  •      .......



day05笔记:


for 语句
  作用:
    用来遍历可迭代对象的数据元素


可迭代对象是指能依次获取数据元素的对象
可迭代对象包括:
  字符串 str
  ----以下后面会讲----
  列表 list
  元组 tuple
  字典 dict
  ...


for 语法

  •   for 变量列表 in  可迭代对象:
  •       语句块1
  •   else:
  •       语句块2



  说明:
    当循环内部用break语句终止循环时,else子句部分的语句不会执行
  示例见:

s = "ABCDE"

for ch in s:
    print('ch====>', ch)

print("当 for语句结束后,ch绑定的是:", ch)
s = "ABC"

for ch in s:
    print('ch====>', ch)

print("当 for语句结束后,ch绑定的是:", ch)
s = 'ABCDE'

for c in s:
    print(c)
    if c == 'D':
        break
else:
    print('for语句因为可迭代对象不能提供数据而结束')



练习:
  任意输入一段字符串
    1) 计算您输入的字符'A' 的个数,并打印出来
    2) 计算出空格的个数,并打印出来
      (要求用for语句,不允许使用, S.count方法)


  思考用while语句能否实现上述功能

# 练习:
#   任意输入一段字符串
#     1) 计算您输入的字符'A' 的个数,并打印出来
#     2) 计算出空格的个数,并打印出来
#       (要求用for语句,不允许使用, S.count方法)

#   思考用while语句能否实现上述功能

# 任意输入一段字符串
s = input("请输入: ")  # "ABCABA"

# 1) 计算您输入的字符'A' 的个数,并打印出来
count_A = 0  # 准备用来记录个数的变量
for ch in s:
    if ch == 'A':
        count_A += 1
print("'A' 这个字符的个数是:", count_A)

# 2) 计算入空格的个数,并打印出来
count_space = 0  # 准备用来记录个数的变量
for ch in s:
    if ch == ' ':
        count_space += 1
print("空格 这个字符的个数是:", count_space)


# 思考用while语句能否实现上述功能
count_A = 0
count_space = 0
i = 0  # 获取字符串数据的索引
while i < len(s):
    ch = s[i]  # 取出字符
    # 先算判断ch是否是'A'
    if ch == 'A':
        count_A += 1
    if ch == ' ':
        count_space += 1
    i += 1

print("'A' 这个字符的个数是:", count_A)
print("空格 这个字符的个数是:", count_space)


range() 函数:
  格式:

  •     range(stop)  从零开始,每次生成一个整数后加1操作,直到stop为止(不包含stop)
  •     range(start, stop[, step]) 从 start开始,每次生成一个整数后移动step,直到stop为止(不包含stop,且step可以是负数)

  详见:
    >>> help(range)
  作用:

  •     用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)

  说明:

  •     range函数调用返回的对象可用于for语句来进行依次迭代取出其中的整数

  示例:

  •     range(4)     # 生成 0, 1, 2, 3
  •     range(3, 6)  # 生成 3, 4, 5
  •     range(1, 10, 2)  # 生成 1, 3, 5, 7, 9
  •     range(5, 0, -2)  # 生成 5, 3, 1
  •     range(4, 0)      # 空

  见:

for x in range(4):
    print(x)  # 0  1  2  3

print('-------------------')
for x in range(3, 6):
    print(x)

print('==============')
for x in range(5, 0, -2):
    print(x)



练习:
  用for 语句打印1~20 打印在一行内

for i in range(1, 21):
    print(i, end=' ')
print()


练习:
  求 100以内有哪儿些整数与自身+1的乘积再对11求余的结果等于8?

      x * (x+1) % 11 == 8  x附合条件

for x in range(100):
    if x * (x + 1) % 11 == 8:
        print(x)


  1. 写程序计算  1 + 3 + 5 + 7 + ...+ 99的和
    (要求用for语句和while语句两种方式实现).

s = 0
for x in range(1, 100, 2):
    s += x
print("1 + 3 + 5 + ....+ 99=", s)

print('----以下用while语句实现-----')
s = 0
i = 1
while i < 100:
    x = i
    s += x
    i += 2
print("1 + 3 + 5 + ....+ 99=", s)



  2. 用while语句实现打印:
     1 3 5 7 9. .... 19 
     打印在一行内

  3. 将上题用for语句来实现

i = 1
while i <= 19:
    print(i, end=' ')
    i += 2
else:
    print()  # 换行

# 3. 将上题用for语句来实现
for i in range(1, 20, 2):
    print(i, end=' ')
else:
    print()  # 换行



for 语句嵌套:
  示例:
    for x in "ABC":
        for y in "123":
            print(x + y)
  思考:
    for x in range(5):
        for y in range(10):
            print(x, y, 'ABC')  # 请问这条语句执行多少次?


练习:
  用for 语句实现下题 :
    1. 输入一个数w代表正方形的宽度,打印如下正方形:
      如输入:5
        1 2 3 4 5
        1 2 3 4 5
        1 2 3 4 5
        1 2 3 4 5
        1 2 3 4 5

w = int(input("请输入: "))
for line in range(1, w + 1):
    for x in range(1, w + 1):
        print(x, end=' ')
    print()  # 打印完毕后换行


    2. 写程序来改写上题:
      如输入: 5
      打印如下:
        1 2 3 4 5
        2 3 4 5 6
        3 4 5 6 7
        4 5 6 7 8
        5 6 7 8 9
      如输入: 3
      打印如下:
        1 2 3
        2 3 4
        3 4 5

w = int(input("请输入: "))
for line in range(1, w + 1):
    for x in range(line, line + w):
        print('%2d' % x, end=' ')
    print()  # 打印完毕后换行



continue 语句:
  问题:
    如何让程序不再向下执行,重新开始一次新的循环


  continue语句的作用:
    用于循环语句中(while, for语句),不再执行本次循环内 continue之后的语句,重新开始一次新的循环
  说明:

  1. 在while语句中执行continue语句,将会直接跳转到 while语句的直值表达式处重新判断循环条件
  2. 在for 语句中,执行continue语句,将会从可迭代对象中取一下元素绑定变量后再次进行循环


  示例见:

# 此示例示意continue语句的用法
for x in range(5):
    if x == 2:
        continue
    print(x)


练习:
  1. 输入一个整数用begin绑定,
  再输入一个整数用end绑定
  打印从begin开始,到end结束内的全部奇数(不包含end)

begin = int(input("请输入开始整数: "))
end = int(input("请输入结束整数: "))

for x in range(begin, end):
    if x % 2 == 0:
        continue
    print(x)



  2. 将上述练习改写为 用while语句实现

begin = int(input("请输入开始整数: "))
end = int(input("请输入结束整数: "))

# 方法1
# i = begin
# while i < end:
#     if i % 2 == 0:
#         i += 1
#         continue
#     print(i)
#     i += 1

# 方法:
i = begin
while i < end:
    i += 1
    if (i - 1) % 2 == 0:
        continue
    print(i - 1)



  3. 求 1~100 之间所有不被 5, 7, 11 整除的数的和
    (可以考虑用continue实现)
 

s = 0  # 用于累加

for x in range(1, 101):
    if x % 5 == 0 or x % 7 == 0 or x % 11 == 0:
        continue
    # if x % 5 == 0:
    #     continue
    # if x % 7 == 0:
    #     continue
    # if x % 11 == 0:
    #     continue
    s += x

print("和是:", s)


循环总结
  语句:

  •     while 语句
  •     for 语句
  •        字符串 str
  •        range() 函数返回的对象
  •     break 语句:  结束当前循环语句的执行
  •     continue 语句:  结束本次循环,重新开始新的循环



列表 list
  列表的定义 :

  1. 列表是一种容器(通常用来存储计算机的数据对象)
  2. 列表是可以被改变的序列
  3. 列表是由一系列特定元素组成的,元素与元素之间可能没有任何的关联关系,但他们之间有先后顺序关系



创建空列表的字面值方式

  •   L = []    # L绑定空列表


创建非空列表的字面值方式

  •   L = [1, 2, 3, 4]
  •   L = ['北京', '上海', '深圳', '西安']
  •   L = [1, 'Two', 3.14, '四']
  •   L = [1, 2, [3.1, 3.2, 3.3], 4]



列表的构造(创建)函数list

  •   list()   生成一个空的列表,等同于 []
  •   list(iterable)  用可迭代对象创建一个列表

示例:

  •   L = list()         # L = []
  •   L = list("hello")  # L = ['h', 'e', 'l', 'l', 'o']
  •   L = list(range(5, 10, 2))  # L = [5, 7, 9]



列表的运算:
  运算符:
    +   +=   *   *= 
    + 用于拼接列表

  •     x = [1, 2, 3]
  •     y = [4, 5, 6]
  •     z = x + y  # [1, 2, 3, 4, 5, 6]

  += 用于将右侧的可迭代对象的数据追加到原列表中

  •     x = [1, 2, 3]
  •     x += [4, 5, 6]  # x = [1, 2, 3, 4, 5, 6]
  •     x = [1, 2]
  •     x += "AB"  # x = [1, 2, 'A', 'B']
  •     x = [1, 2]
  •     x += range(3)  # x = [1, 2, 0, 1, 2]

  * 用于生成重复的列表

  •     x = [1, 2] * 3  # x = [1, 2, 1, 2, 1, 2]
  •     x = list("AB")
  •     x *= 2  # x = ['A', 'B', 'A', 'B']



列表的比较运算:
  运算符:
    <  <=  >  >=  ==  !=
  比较规则:
    同字符串比较规则完全相同

  •   [1, 2, 3] < [1, 3, 2]  # True
  •   [1, 2, 3] != [3, 2, 1]  # True
  •   [1, 'two'] > ['two', 1]  # TypeError 出错
  •   [1, 'two', 3.14] < [1, '二', 3]


列表是可迭代对象:
  L = [2, 3, 5, 7, 11]
  for x in L:
      print(x)


列表的in / not in 运算符:
  判断一个元素是否存在于列表中,如果存在返回True,否则返回 False
  in 和 not in 的返回值相反
  示例:

  •     x = [1, 'two', 3, '四']
  •     3 in x   # True
  •     4 not in x  # True
  •     '3' in x   # False


练习:
  1 输入三行文字,将这三行文字, 保存于一个列表L中,并打印
    如:
      请输入: abc<回车>
      请输入: 123<回车>
      请输入: 你好<回车>
    生成列表如下:
      L = ['abc', '123', '你好']
      print(L)  打印

a = input("请输入:")
b = input("请输入:")
c = input("请输入:")
L = [a, b, c]
print(L)



练习:
  1. 输入任意行文字,存于列表L中,当不输入任何内容直接回车后结束输入
   1) 打印L列表中的内容
   2) 计算您共输入了几行内容
   3) 计算您共输入了多少个字符

  1. 输入任意行文字,存于列表L中,当不输入任何内容直接回车后结束输入
   1) 打印L列表中的内容
   2) 计算您共输入了几行内容
   3) 计算您共输入了多少个字符
L=[]
where True:
    n = input('输入任意文字: ')
    if n == '':
        braek
    L+=[n]

print(L)



print(len(L))


count = 0
for line in L:
    count += len(line)  # 把字符个数累加到count中

print('   您共输入了%d个字符' % count)




    




  2. 输入一个整数(代表树干的高度)
     打印出如下一棵树
     输入: 2
     打印:
      *
     ***
      *
      *
     输入:3
       *
      ***
     *****
       *
       *
       *

n = int(input("请输入一个树干的高度: "))

# 打印树叶部分
for i in range(1, n + 1):  # i 代表层数
    stars = i * 2 - 1  # 算出星号的个数
    blank = n - i  # 算出左侧空格的个数
    print(' ' * blank + '*' * stars)

# 打印树干部分
for _ in range(n):
    print(' ' * (n - 1) + '*')


  3. 写一个程序,任意输入一个整数,判断这个数是否是素数(prime)
    素数(也叫质数), 是只能被1和自身整除的正整数:
      如: 2 3 5 7 11 等
    提示:
      用排除法: 当判断x是否是素数是,只要让x分别除以:
        2, 3, 4, 5, .... x-1, 只要整除了,那x不是素数,否则x是素数

x = int(input("请输入一个整数: "))

if x < 2:
    print(x, '不是素数')
else:  # x肯定是大于等于2
    # 用排除法
    for i in range(2, x):
        if x % i == 0:  # 整除了
           print(x, '不是素数')
           break
    else:
        print(x, '是素数')


  4.算出100~1000以内的水仙化数(Naricissistic Number)
    水仙花数是指百位的3次方 加上 十位的3次方 加上 个位的3次方等于原数的数
    如:
      153 = 1**3 + 5**3 + 3**3
    答案:
      153, 370, ....

# 方法1
# for i in range(100, 1000):
#     s = str(i)  # 转为字符串
#     bai = int(s[0])  # 百位
#     shi = int(s[1])  # 十位
#     ge = int(s[2])  # 个位
#     if i == bai ** 3 + shi ** 3 + ge ** 3:
#         print(i)

# 方法2
# for i in range(100, 1000):
#     bai = i // 100  # 百位
#     shi = i % 100 // 10  # 十位
#     ge = i % 10  # 个位
#     if i == bai ** 3 + shi ** 3 + ge ** 3:
#         print(i)

# 方法3
for bai in range(1, 10):
    for shi in range(10):
        for ge in range(10):
            i = bai * 100 + shi * 10 + ge
            if i == bai ** 3 + shi ** 3 + ge ** 3:
                print(i)

 

你可能感兴趣的:(python基础20课时)