当前位置: 代码迷 >> 综合 >> day5-列表与循环练习
  详细解决方案

day5-列表与循环练习

热度:24   发布时间:2023-11-23 10:57:30.0

列表

1.什么是列表(list)

1)列表的长样子:列表使容器型数据类型(序列),将[]作为容器的标志,里面多个元素用逗号隔开:[元素1, 元素2, 元素3, 。。。]
2)列表的特点:列表是可变的(元素的个数、值和顺序可变) - 增删改:列表是有序的 - 支持下标操作
3)列表对元素的要求:没有要求(不管什么类型的数据都可以作为列表的元素)

# 1)空列表
list1 = []
list2 = [ ]
print(type(list1), type(list2))  # <class 'list'> <class 'list'>
print(bool(list1), bool(list2))  # False False
print(len(list1), len(list2))    # 0 0# 2)列表可以同时保存多个数据
list3 = [89, 90, 76, 99, 58]
print(list3)list4 = ['范成', 18, '男', 100, True]
print(list4)list5 = [10, 12.5, True, 'abc', [1, 0], {
    'a':19}, (20, 9), {
    20, 9}, lambda x: x*2]
print(list5)list6 = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]

2.列表的查操作 - 获取元素

查分为三种情况:获取单个元素、切片、遍历(一个一个的取)

1)获取单个元素

''' 语法:列表[下标] 功能:获取列表中指定下标对应的元素 说明: 列表 - 任何结果使列表的表达式,比如:保存列表的变量、具体的列表值等 [] - 固定写法 下标 - 下标又叫索引,是元素在有序序列中位置信息。python中有序序列中每个元素都有两组下标标值,分别是:从前往后从0开始递增的下标值:从后往前-1开始递减的下标值 注意:下标不能越界'''names = ['甄姬', '貂蝉', '韩信', '吕布', '赵云', '后羿', '鲁班', '狄仁杰']
print(names[1])
print(names[-1])
print(names[3])

2)遍历

''' 方式一 - 直接获取列表中的每个元素 for 变量 in 列表:循环体方式二 - 先获取到每个元素的下标值,然后通过下标在获取元素 for 下标 in range(len(列表)):循环体range(len(列表)) == range(列表中元素的个数)方法三 - 同时获取列表中的元素和对应的下标 for 下标,元素 in enumerate(列表):循环体 '''
方式一 
for i in names:print(i)方式二 
for index in range(len(names)):print(names[index])方式三 
for i in enumerate(names):print(i[0], i[1])

练习

# 练习1: 统计不及格人数
scores = [89, 67, 56, 90, 98, 30, 78, 51, 99]
count = 0
for i in scores:if i < 60:count += 1
print('不及格人数:{}'.format(count))# 练习2:统计列表中整数的个数
list7 = [89, 9.9, 'abc', True, 'abc', '10', 81, 90, 23]
count = 0
for i in list7:if type(i) == int:count += 1print('整数的个数:{}'.format(count))# 练习3:求nums中所有偶数的和
num = 0
nums = [89, 67, 56, 90, 98, 30, 78, 51, 99]
for i in nums:if i % 2 == 0:num += i
print('nums中所有偶数的和:{}'.format(num))

3.列表的增加元素

1)添加单个元素

''' 列表.append(元素) - 在列表的最后添加一个有元素 列表.insert(下标)'''
movies = ['五十度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪']
print(movies)movies.append('肖申克的救赎')
print(movies)movies.insert(2, '沉默的羔羊')
print(movies)

2)批量添加

''' 列表1.extend(列表2) - 将列表2元素全部添加到列表1的后面 '''
movies.extend(['让子弹飞', '触不可及'])
print(movies)

练习

# 练习:求scores中所有的及格的分数提取出来
scores = [89, 67, 56, 90, 98, 30, 78, 51, 99]
list1 = []
for i in scores:if i > 60:list1.append(i)
print(list1)

4.循环练习题

  1. 判断101-200之间有多少个素数,并输出所有素数。

    list1 = []
    for a in range(101, 200):for i in range(2, int((a ** 0.5) + 1)):if a % i == 0:breakelse:list1.append(a)
    print(list1)
    #[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
  2. 求整数1~100的累加值,但要求跳过所有个位为3的数。

    sum = 0
    for i in range(1, 101):if i % 10 == 3:continueelse:sum += i
    print(sum)# 4570
    
  3. 有?分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数

    fz = 1
    fm = 1
    n = 20
    for i in range(n):fz, fm = fz + fm , fz
    print(fz, '/', fm)# 17711 / 10946
    
  4. 写程序计算 n 的阶乘 n! 的结果

    n = int(input('输入整数n:'))
    sum = 1
    for i in range(1, n+1):sum *= i
    print('n! = ', sum)
    
  5. 求1+2!+3!+…+20!的和

    n = int(input('输入整数n:'))
    sum = 1
    sum1 = 0
    for i in range(1, n+1):sum *= isum1 += sum
    print('1! + 2! +...n! = ', sum1)# 输入整数n:20
    # 1! + 2! +...n! = 2561327494111820313
    
  6. 写程序求表达式 a + aa + aaa + aaaa+ … 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)

    例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333

    n = int(input('输入整数n:'))
    a = int(input('输入整数a(1-9):'))
    sum = 0
    for i in range(n):sum += a * (n - i) * (10 ** i)
    print(sum)# 37035
    
  7. 控制台输出三角形

    a.根据n的值的不同,输出相应的形状
    n = 5时             n = 4
    *****               ****
    ****                ***
    ***                 **
    **                  *
    *b.根据n的值的不同,输出相应的形状(n为奇数)
    n = 5               n = 7*                    ****                  ***
    *****                ************c. 根据n的值的不同,输出相应的形状
    n = 4112112321
    1234321n = 51121123211234321
    123454321
    
    1)
    n = 5
    for i in range(n):print('*' * (n - i))*****
    ****
    ***
    **
    *2for i in range(0, n, 2):print(('*' * (i + 1)).center(5))*  *** 
    *****3)
    n = 5
    num = 0
    a = 1
    for i in range(1, n + 1):num = num * 100 + aa += 2 * 10 ** iprint(str(num).center(20))1          121         12321        1234321       123454321 
    
  8. 小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?

    for i in range(7):for j in range(21):if (i * 15 + j * 5) > 100:breakfor z in range(51):if (i * 15 + j * 5 + z * 2) > 100:breakif (i * 15 + j * 5 + z * 2) == 100:print('洗发水{}瓶,牙刷{}个,香皂{}支'.format(i, j, z))
    
  9. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?

    a = 0.00008
    count = 0
    while 1:a *= 2count += 1if a >= 8848.13:print('对折{}次之后能达到珠穆朗玛峰的高度(8848.13米)'.format(count))break# 对折27次之后能达到珠穆朗玛峰的高度(8848.13米)
    
  10. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    rabbit_1 = 1
    rabbit_2 = 0
    rabbit_3 = 0
    n = 10
    for i in range(1, n):if i == 2:rabbit_1, rabbit_2, rabbit_3 = rabbit_3, rabbit_1, rabbit_2 + rabbit_3elif i == 1:passelse:rabbit_1, rabbit_2, rabbit_3 = rabbit_2 + rabbit_3, rabbit_1, rabbit_2 + rabbit_3print('第{}个月已共有{}对兔子'.format(i, rabbit_1 + rabbit_2 + rabbit_3))
    
  11. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

    n = b = 90
    list = []
    while 1:for i in range(2, int(b**0.5)+1):if b % i == 0:b = b // ilist.append(i)breakelse:list.append(b)break
    print('{} = {}'.format(n, list[0]), end='')
    for i in range(1, len(list)):print(' X {}'.format(list[i]), end='')
  12. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

    n = '5632'
    n2 = 0
    for i in range(4):n2 = n2 * 10 + (int(n[i]) + 5) % 10
    n2 = n2 // 1000 + (n2 % 10) * 1000 + (n2 // 100) % 10 *10 + (n2 // 10) % 10 * 100
    print(n2)# 7810
    
  13. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。

    n = 10000.0
    for i in range(5):n = n * (1+0.003)
    print(n)
    # 10150.902704052423
    
  14. 输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)

    n = input('请输入一个任意整数:')
    sum = 0
    for i in range(len(n)):sum += int(n[i])
    print(sum)# 请输入一个任意整数:123456
    # 21
    
  15. 求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)

    print('请输入两个整数(n < m)')
    n, m = int(input('请输入一个整数n:')), int(input('请输入一个整数m:'))
    Common_divisor = 0
    for i in range(1, n + 1):if (n % i == 0) and (m % i == 0):Common_divisor = i
    Common_multiple = 0
    i = 1
    while 1:if (i * Common_divisor % n == 0) and (i * Common_divisor % m == 0):Common_multiple = i * Common_divisorbreaki += 1
    print(Common_divisor, Common_multiple)# 请输入两个整数(n < m)
    # 请输入一个整数n:4
    # 请输入一个整数m:5
    # 1 20