列表练习(python)

一、题目

1. 输入一个大于0的正整数n,如果n == 1 ,则返回1, 如果n是偶数,则返回 n // 2 ,如果n是奇数,则返回 3n + 1,将所有的返回值存放到一个列表中,注意:n是第一个元素,其他的元素根据上述要求生成。最后求返回的列表和列表长度。
2. 猜拳游戏:石头、剪刀、布的游戏
3. 求50~150之间的质数是那些?存储在列表中
4. 打印输出标准水仙花数,输出这些水仙花数
5. 验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.
6. 一个五位数,若在它的后面写上一个7,得到一个六位数A,
若在它前面写上一个7,得到一个六位数B,B是A的五倍,求此
五位数.
7. 有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
[10, 8, 5, 3, 27, 99]
8. 如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".
9. 给定一个列表,求最大值(不能使用系统api),求最小值,求平均值、求和
10. 将list中的重复数据去重,至少使用两种方案
11. 如何将0-10随机存入列表中

二、思路

1.     #输入一个大于0的正整数你,求返回的列表和列表长度

#如果n == q,返回1,如果n是偶数,则返回n//2,奇数,则返回3n+1

1.1根据题目建立一个变量n,input函数 输入一个大于0的正整数

1.2根据题意要将所有符合要求的返回值存放到一个列表中,即在0~n中有许多符合要求的数,需要用循环(while)

1.3判断n是否等于1,当n等于1时,根据题意返回1,当n不等于1时,判断n是否为偶数

1.4即判断n除以2的余数是否为0(n % 2 == 0),当n 为偶数时,输出n // 2,当n为奇数时,则输出3*n+1    

*注:因为返回值需要存放到一个列表中,所以n的值会改变即,当n 为偶数时,输出n // 2,即n = n // 2;同理,当n为奇数时,输出3*n+1,即n = 3 *n+ 1

1.5输出列表的长度(len(a))和内容

2.  剪刀石头布

2.1import random,用数字代替剪刀石头布。

根据题意建立一个变量my,input函数   请输入0or1or2,0代表剪刀,1代表石头,2代表布

2.2分为三种情况:

我赢时:剪刀赢布,石头赢剪刀,布赢石头;

            ( my == 0 and computer == 2 or my == 1 and computer == 0 or my == 2 and computer == 1)

我输时:剪刀输石头,布输剪刀,石头数布;

            ( computer == 0 and my == 2 or computer == 1 and my == 0 or computer == 2 and my ==1 )

平手时:剪刀平剪刀,石头平石头,布平布。

3.  #求50~150之间的质数是哪些?储存在列表里

质数:除了1,和它本身之外,不能被其他数整除的数

建立一个空列表a,for循环i是50~150中的数,内循环for,j是2~i中的数

即当‘i’除以‘j’的余数等于0时代表此时i的值还有除1和它本身之外还能被其他数整除

4.  #打印输出标准的水仙花数,输出这些水仙花数

水仙花数是指一个三位数,其各位数字的立方和等于该数本身。

建立一个空列表a,for循环i是100~999中的数,if判断当前三位数的各位数字的立方和((i // 100)**3 + (i %100//10)**3 + (i % 10)**3)是否等于该三位数。是的话,存入列表a中。

5.验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.

#设任意数位N,即N=ana(n-1)a(n-2)...a1==>N=an*10**(n-1)+a(n-1)*10**(n-2)+...+a1

#整数减去它的各位数字之和所得到的差:N-S=an*10**(n-1)+a(n-1)*10**(n-2)+...+a1-(an+a(n-1)+...+a1)=an*(10**(n-1)-1)+a(n-1)*(10**(n-2)-1)+...+a2*(10-1)

#10-1=9,能被9整除,10**2-1=99,能被9整除,故10**(n-1)-1也能被整除

问题:

程序编写时有问题,该如何表示N,如何将N中的各位数相加用程序表示

6.    #一个五位数,若在它的后面写上一7,得到一个六位数A,若在它的前面写上一7,得到一个六位数B,B是A的5倍,求此五位数

建立一个列表a=[],for循环中i在10000~99999内,if判断当前数i,在它的后面写上一7,得到一个六位数A(i * 10 + 7)的五倍,是否等于在它的前面写上一7,得到一个六位数B(i + 700000)

7.    有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
[10, 8, 5, 3, 27, 99]

每次只能拿一个或者两个:i += 1 or i += 2

8.   如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".

素数==质数,不过“2”是特殊的偶素数

#先求出100以内(0~99)的所有素数,再进行判断是否为“孪生数”

9.   给定一个列表,求最大值(不能使用系统api),求最小值,求平均值、求和

#初始化一个列表,进行求值,最大值(max),最小值(min),平均值、求和

10. 将list中的重复数据去重,至少使用两种方案

10.1:初始化一个有重复元素的列表,根据set()函数唯一性的特点,将my_list中的元素不重复的储存在新建立的列表unique_list中,同时因为set()建立的是集合,所以用list()将集合装换为列表,再打印无重复的列表unique_list

10.2:

#建立一个空列表,用来储存出去重复后的列表,for循环,遍历my——list中的每一个元素,if判断当前元素i是否在unique_list,没有存在就将i,存在unique_list,即将重复存在的元素不在储存在unique_list中,打印去重后的列表

11.  #如何将0-10随机存入列表中

import random

random.randint(0,10)

建立一个列表,将0~10让电脑随机分配

三、程序

1.    #输入一个大于0的正整数你,求返回的列表和列表长度

#如果n == q,返回1,如果n是偶数,则返回n//2,奇数,则返回3n+1

n = int(input("输入一个大于0的正整数:"))

a = [ ]

while n != 1 :

    a.append(n)

    if n % 2 == 0:

        n =n // 2

    else :

        n = 3*n+1

a.append(1)

print("元素",a)

print("长度",len(a))

2.   #剪刀石头布

import random

computer = random.randint(0,2)

while True:

    my = int(input("请输入0or1or2,0代表剪刀,1代表石头,2代表布"))

    #我赢了

    if my == 0 and computer == 2 or my == 1 and computer == 0 or my == 2 and computer == 1:

        print("我赢了")

    elif computer == 0 and my == 2 or computer == 1 and my == 0 or computer == 2 and my ==1:

        print("我输了")

    else :

        print("我们是平手")  

3.  #求50~150之间的质数是哪些?储存在列表里

a = []

for i in range(50,151):

    flag = True

    for j in range(2,i):

        #质数:除了1,和它本身之外,不能被其他数整除的数

        #即当i % j == 0时代表此时i的值还有除1和它本身之外还能被其他数整除

        if i % j == 0:

            flag = False

            #结束内循环,跳出

            break  

    if flag :

            a.append(i)

print("50~150之间的质数",a)

4.   #打印输出标准的水仙花数,输出这些水仙花数

#水仙花数是指一个三位数,其各位数字的立方和等于该数本身。

a = []

for i in range(100,1000):

    if ((i // 100)**3 + (i %100//10)**3 + (i % 10)**3) == i:

        a.append(i)

print("水仙花数有:",a)

5.   验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.

6.    #一个五位数,若在它的后面写上一7,得到一个六位数A,若在它的前面写上一7,得到一个六位数B,B是A的5倍,求此五位数

a = []

for i in range(10000,100000):

    if (i * 10 + 7) * 5 == (i + 700000):

        a.append(i)

print("符合条件的五位数为:",a)

7.     有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
[10, 8, 5, 3, 27, 99]

8.  如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".

a = []

b = []

#100以内的素数

for i in range(2,100):

    flag = True

    for j in range(2,i):

        #质数:除了1,和它本身之外,不能被其他数整除的数

        #即当i % j == 0时代表此时i的值还有除1和它本身之外还能被其他数整除

        if i % j == 0:

            flag = False

            #结束内循环,跳出

            break  

    if flag:

        a.append(i)

print("100以内的所有素数:",a)

#素数的孪生数

有问题:

for n in a:

    if n + 2 in a:

        b.append((n,n+2))

print("素数的孪生数",b)

9.   给定一个列表,求最大值(不能使用系统api),求最小值,求平均值、求和

#定义一个列表

a = [10, 8, 5, 3, 27, 99]

#最大值

print("列表中最大的数为:",max(a))

#最小值

print("列表中最小的数为:",min(a))

#平均值

print("列表的平均值为:",(a[0]+a[1]+a[2]+a[3]+a[4]+a[5])/len(a))

#各个数之和

print("列表中各个元素的和为:",a[0]+a[1]+a[2]+a[3]+a[4]+a[5])

10.   将list中的重复数据去重,至少使用两种方案

10.1

#定义一个有重复元素的列表

my_list = [10, 8, 5, 3, 27, 99, 10, 99 ]

#根据set()函数唯一性的特点,将my_list中的元素不重复的储存在新建立的列表unique_list中

#同时因为set()建立的是集合,所以用list()将集合装换为列表

unique_list = list(set(my_list))

#打印无重复的列表unique_list

print(unique_list)

10.2

#定义一个列表list

my_list = [10, 8, 5, 3, 27, 99, 10, 99 ]

#建立一个空列表,用来储存出去重复后的列表

unique_list = []

#遍历my——list中的每一个元素

for i in my_list:

    #判断当前元素i是否在unique_list

    if i not in unique_list:

        #没有存在就将i,存在unique_list,即将重复存在的元素不在储存在unique_list中

        unique_list.append(i)

#打印去重后的列表

print(unique_list)

11.  #如何将0-10随机存入列表中

import random

random.randint(0,10)

my_list = []

for i in range(10):

    num = random.randint(0,10)

    my_list.append(num)

print("列表元素:",my_list)

四、运行结果(截图)

1.    #输入一个大于0的正整数你,求返回的列表和列表长度

#如果n == q,返回1,如果n是偶数,则返回n//2,奇数,则返回3n+1

2 .#剪刀石头布

3.  #求50~150之间的质数是哪些?储存在列表里


4.  #打印输出标准的水仙花数,输出这些水仙花数

5.   验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.

6.    #一个五位数,若在它的后面写上一7,得到一个六位数A,若在它的前面写上一7,得到一个六位数B,B是A的5倍,求此五位数

7.    有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
[10, 8, 5, 3, 27, 99]

8.   如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".

9.  给定一个列表,求最大值(不能使用系统api),求最小值,求平均值、求和

10.   将list中的重复数据去重,至少使用两种方案

10.1

10.2

11.   #如何将0-10随机存入列表中

五、总结

1)还是不熟练,基础知识需要加强记忆

2)问题:

5.验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.

#设任意数位N,即N=ana(n-1)a(n-2)...a1==>N=an*10**(n-1)+a(n-1)*10**(n-2)+...+a1

#整数减去它的各位数字之和所得到的差:N-S=an*10**(n-1)+a(n-1)*10**(n-2)+...+a1-(an+a(n-1)+...+a1)=an*(10**(n-1)-1)+a(n-1)*(10**(n-2)-1)+...+a2*(10-1)

#10-1=9,能被9整除,10**2-1=99,能被9整除,故10**(n-1)-1也能被整除

问题:

程序编写时有问题,该如何表示N,如何将N中的各位数相加用程序表示

7.    有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
[10, 8, 5, 3, 27, 99]

每次只能拿一个或者两个:i += 1 or i += 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值