python基础(5)——for & continue & 列表

一、for 语句

1、作用:
     用来遍历可迭代对象的数据元素
         可迭代对象是指能依次获取数据元素的对象

2、可迭代对象包括:
     字符串 str
     ---以下后面会讲---
     列表 list
     元组 tuple
     ...

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

4、示例:

s = "ABCD"
for ch in s:
    print("ch--->>", ch)
for.py

5、练习:
   1. 任意输入一段字符串,
    1) 计算出输入字符'a'的个数,并打印出个数
    2) 计算出空格的个数,并打印出个数
    (要求用for语句,不允许用 str.count方法)
      思考:
         用while 语句能否实现上述功能

s = input("请输入一段字符串: ")
count_a = 0  # 用来记录a的个数
for c in s:
    if c == 'a':
        count_a = count_a + 1
else:  # else子句只有在可迭代对象不能提供数时才会执行
    print('a的个数是:', count_a)

count_blank = 0
for c in s:
    if c == ' ':
        count_blank += 1
print('空格的个数是:', count_blank)
cal_count.py

6、for 语句说明:
   else子句部分可以省略
   当在循环内部用break终止循环时,else子句部分不会执行

示例:

#  输入一段字符串,判断这个字符串内是否有'H'这个字符,并
#   打印出结果

s = input("请输入: ")
# for ch in s:
#     if ch == 'H':
#         print(s, "中含有字符'H'")
#         break
# else:
#     print(s, "中不含有字符'H'")

# 用while 实现
i = 0  # i代表字符串的索引下标
while i < len(s):
    ch = s[i]  # 获取其中一个
    if ch == 'H':
        print(s, "中含有字符'H'")
        break
    i += 1
else:
    print(s, "中不含有字符'H'")
for_else.py

1、range 函数

   range(stop) 用来生成0~stop区间内的整数,直到stop为止(不包含stop)
   range(start, stop[, step])  用来生成start~stop区间内的整数,直到stop为止(不包含stop),每次生成整数后移动step
格式详见:
    >>> help(range)
1、作用:
   用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)
2、说明:
   range返回的对象可以有for语句来进行依次迭代访问取出其中的整数
3、示意:
   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)      # 空

4、示例:

for x in range(4):
    print(x)  # 0, 1, 2, 3
else:
    print("可迭代对象已经不能再提供数据.for结束")

for x in range(3, 6):
    print(x)
print('----------------------------')
for x in range(1, 10, 2):
    print(x)
range.py

5、练习:
   1. 用 for语句打印 1 ~ 20 的整数,打印在一行内:
     1 2 3 4 5 ..... 20

for i in range(1, 21):
    print(i, end=' ')
else:
    print()  # 换行
for_1_20.py

   2. 计算 1 + 3 + 5 + 7 + ..... + 99 的和
     分别用 for语句 和 while语句 实现

s = 0  # 用于记录和
for i in range(1, 100, 2):
    s += i
print(s)

s = 0
i = 1
while i < 100:
    s += i
    i += 2
print(s)
sum_odd.py

2、for 语句变量可能不被创建的问题:

for x in range(4, 0):
     print(x)

print('x绑定', x)

# 此示例示意for语句的变量的创建和绑定问题

for x in range(4, 0):
    print(x)
else:
    print("for 语句结束")

# print('x绑定', x)  # 报错


for x in range(0, 4):
    print(x)

print('x绑定', x)  # 3
for_range_var.py

3、for 注意问题:

    见:
       for_range_times.py

i = 6
for x in range(1, i):  # for x in range(1, 6)
    print('x =', x, 'i=', i)
    i -= 1
# 请问打印结果是什么?
   # x = 1 i= 6
   # x = 2 i= 5
   # x = 3 i= 4
   # x = 4 i= 3
   # x = 5 i= 2
for_range_times.py

3、for 语句的嵌套:

# 此示例示意for语句的嵌套
for x in "ABC":
    for y in "123":
        print(x + y)

思考下列程序的打印次数:
   for x in range(5):
       for y in range(10):
           print("hello")  # 请问打印多少个hello?

练习:
   1. 求: 100以内有哪儿些数与自身+1的乘积再对 11 求余等于8?
       x * (x+1)  % 11 == 8

for x in range(101):
    if x * (x + 1) % 11 == 8:
        print(x)
special_number.py

  2. 输入一个数,打印如下正方形(用for实现)
      请输入: 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

n = int(input("请输入: "))
for line_number in range(1, n + 1):
    # print("1 2 3 4 5")
    for x in range(1, n + 1):
        print(x, end=' ')
    print()  # 换行
square1.py

   3. 输入一个数,打印如下正方形
      请输入: 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

n = int(input("请输入: "))
for line_number in range(1, n + 1):
    for x in range(line_number, n + line_number):
        print("%2d" % x, end=' ')
    print() 
square2.py

  4. 用程序生成如下字符串:
      1) "ABCDEFG..... XYZ"
      2) "AaBbCcDdEe......XxYyZz"
     提示(可以使用 ord 和 chr函数)
       参考 ascii编码

s = ''  # 先创建一个空字符串
# for code in range(65, 65 + 26):
for code in range(ord('A'), ord('Z') + 1):
    s += chr(code)  # 用编码值生成字符串,追加到s末尾
print(s)

s2 = ''
for code in range(65, 65 + 26):
    s2 += chr(code)  # 追加一个大写字母
    s2 += chr(code + 32)  # 追加一个对应的小写字母
print(s2)
for_alpha.py

5、打印全世界所有的文字

# 打印全世界所有的文字
for code in range(0, 65536):
    ch = chr(code)
    print(ch, end='')
all_charators.py

5、continue 语句

1、作用:
     用于循环语句(while,for)中,不再执行本次循环continue之后的语句,重新开始一次新的循环
2、语法:
     continue
3、说明:
     1. 在while语句中执行continue,将会直接跳转到while语句的真值表达式处重新判断循环条件
     2. 在 for 语句中执行continue语句,将会从可迭代对象中取下一个元素,绑定变量后再次进行循环
4、示例:

# 此示例示意contine语句的用法和作用
for x in range(5):
    if x == 2:
        continue
    print(x)
continue.py
# 打印10以内的奇数
for x in range(10):
    if x % 2 == 0:  # 是偶数,跳过
        continue
    print(x)
continue2.py
# 打印10以内的奇数
for x in range(10):
    if x % 2 == 0:  # 是偶数,跳过
        continue
    print(x)
for_continue.py

5、练习:
   1. 求 1 ~ 100之间,所有不能被2, 3, 5, 7 整除的数的和
    (跳过能整除的,剩下的就是不能整除的)

#方法1
s = 0
for x in range(1, 101):
    if x % 2 == 0:
        continue
    if x % 3 == 0:
        continue
    if x % 5 == 0:
        continue
    if x % 7 == 0:
        continue
    s += x
print('和是:', s)

#方法2
s = 0
for x in range(1, 101):
    if x % 2 == 0 or x % 3 == 0 or x % 5 == 0 or x % 7 == 0:
        continue
    # print(x)
    s += x
print('和是:', s)
number_sum.py

6、while中使用continue示例见:

    while_continue.py

# 此示例示意在while中使用contine语句
# 略过2

x = 0
while x < 5:
    if x == 2:
        x += 1
        continue
    print(x)
    x += 1
while_continue.py

7、循环小结:

   四条语句:
       while 语句
       for 语句
       break 语句
       continue 语句
   可迭代对象:
       str 字符串
       range() 函数返回的对象

二、列表 list

   问题:
     如何将计算机运算的数据临时保存在一个地方,同时又方便添加,删除和修改等操作
   容器

1、列表的定义:

   列表是一种容器
   列表是可以被改变的序列
   列表是由一系列特定元素组成的,元素与元素之间可能没有任何的关联关系,但他们之间有先后顺序关系

python3的中的序列类型:

   字符串 str
   列表 list
   元组 tuple
   字节串 bytes
   字节数组 bytearray

2、列表的创建:

1、创建空列表的字面值表达式
     []  # 创建一个空列表
     L = []  变量L绑定一个新创建的空列表
2、创建非空的列表的字面值:
     L = [1, 2, 3, 4]#L绑定一个新创建且含有四个元素的列表
     L = ['Beijing', 'Shanghai', 'Shenzhen']
     L = [1, 'Two', 3.14, '四']
     L = [1, 2, [3.1, 3.2, 3.2], 4] 

3、列表的构造函数 list
   list()  生成一个空的列表,等同于 []
   list(iterable)  用可迭代对象创建一个列表
  示例:
     L = list()  # L = []
     L = list("hello")  # L = ['h','e','l','l','o',]
     L = list(range(5))  # L = [0, 1, 2, 3, 4]

3、列表的运算:

1、算术运算:

     + += * *= (运算规则与字符串的运算规则相同)

 + 用于拼接列表,生成新的列表
     x = [1, 2, 3]
     y = [4, 5, 6]
     z = x + y  # z = [1,2,3,4,5,6]

 += 用原列表与右侧可迭代对象追加来修改原列表
    语法:
        列表变量 += 可迭代对象
    示例:
       x = [1, 2, 3]
       y = [4, 5, 6]
       x += y  # x = [1, 2, 3, 4, 5, 6]
       x += "ABC" # x = [1,2,3,4,5,6,'A','B','C']
       x = [1, 2, 3]
       x += range(4, 6)  # x = [1, 2, 3, 4, 5]
      # += 是改变原来的列表对象,并不会创建新的列表

# list_add_equal.py

#
列表是可变的对象, += 是修改原来的对象 x = [1, 2, 3] print(id(x)) # 139805087766920 x += [4, 5, 6] print(id(x)) # 139805087766920 # 字符串是不可变的对象 += 是创建新的对象,让变量绑定新的对象 # sx += "123" 等同于 sx = sx + '123' sx = "ABC" print(id(sx)) # 139805112114904 sx += "123" # sx = 'ABC123' print(id(sx)) # 139805080811480

   * 生成重复的列表
     x = [1, 2] * 3  # x = [1,2,1,2,1,2]

   *= 生成重复的列表,并改变对变量的绑定
     x = [1, 2, 3]
     x *= 4  # x = [1,2,3,1,2,3,1,2,3,1,2,3]

2、列表的比较运算:

   运算符:
      < <= > >= == !=
         比较规则与字符串的比较规则相同

  示例:
     [1,2,3] < [1, 2, 4]  # True
     [1, 2, 3] < [3, 2, 1]  # True
     [1, 2, 3] == [3, 2, 1]  # False
     [2, 3] >= [1, 2, 3]  # True

    [1, "2"] > ['2', 1]  # 报错
     ["ABC", 1, 2, 3] < ["123", 3, 2]  #

3、列表是可迭代对象

   L = [1, 3, 5, 7]
   for x in L:
      print(x)   # 1 3 5 7

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

a = input('请输入:')  # abc
b = input('请输入:')
c = input('请输入:')
# 方法1
# L = []
# L += [a]
# L += [b]
# L += [c]
# 方法2
L = [a, b, c]
print(L)
input_list.py

  2. 输入任意行文字,存于列表中L中,当不输入内容直接回车后结束输入:
      1) 打印L列表中的内容
      2) 打印出您刚才输入了几行文字信息
      3) 打印出您刚才输入了多少个字符数据

L = []  # 先创建一个列表容器准备放数据
while True:
    s = input("请输入: ")  # 让用户循环输入字符串
    # 等用户输入完毕后,判断这个字符串是否为空
    if s == '':
        break  # 不再输入
    L += [s]

# 1) 打印L列表中的内容
print('L=', L)

# 2) 打印出您刚才输入了几行文字信息
# print("您刚才输入了%d行文字" % len(L))
lines = 0
for _ in L:
    lines += 1
print("您刚才输入了%d行文字" % lines)

# 3) 打印出您刚才输入了多少个字符数据
char_count = 0
for aline in L:
    char_count += len(aline)

print('您刚才输入了%d个字符' % char_count)
text_input.py

练习:

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

x = int(input('请输入一个整数: '))
if x < 2:
    print(x, '不是素数')
else:  # n大于等于2
    for i in range(2, x):
        if x % i == 0:  # 如果整除
            print(x, '不是素数')
            break
    else:
        print(x, '是素数')
练习1.py

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

n = int(input("请输入树干的高度: "))
# 打印树叶部分
for i in range(1, n + 1):
    stars = 2 * i - 1  # 星号个数
    blanks = n - i  # 空格数
    print(' ' * blanks + '*' * stars)


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

3. 算出100~999之间的水仙花数(Narcissistic Number)
     水仙花数是指百位的3次方 + 十位的3次方 + 个位的3次方等于原数的整数

    例如:
        153 = 1**3 + 5**3 + 3 ** 3
     答案:
       153  370 ...

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

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

# 方法3(循环嵌套)
for bai in range(1, 10):
    for shi in range(10):
        for ge in range(10):
            # print(bai, shi, ge)
            x = bai * 100 + shi * 10 + ge
            if x == bai ** 3 + shi ** 3 + ge ** 3:
                print(x)
练习3.py

 

posted on 2018-10-12 17:15  破天荒的谎言、谈敷衍  阅读(896)  评论(0)    收藏  举报

导航