一、题目
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