PYTHON函数
作业1、判断以下哪些不能作为标识符(bdf)
#标识符不能以数字开头 不能含有特殊标记 不能与系统的函数关键字重名
分析 可以得出 b d f是不能作为标识符的
A、a
B、¥a
C、_12
D、$a@12
E、false
F、False
作业2:
输入数,判断这个数是否是质数(要求使用函数 + for循环)
def is_primer(num):
flag=True
for i in range(2,num//2+1):
if(num%i==0):
flag=False
break
return flag
num=int(input("输入一个数以此来判断是否是素数:"))
if is_primer(num):
print("是素数")
else:
print("不是素数")
作业3:求50~150之间的质数是那些?
写一个函数判断是不是质数 写一个循环从50到150
如果是质数 输出这个数
def is_prime(num):
flag=True
for i in range(2,num//2+1):
if num%i==0:
flag=False
break
return flag
for i in range(50,151):
if is_prime(i):
print(i)
作业4:打印输出标准水仙花数,输出这些水仙花数
水仙花数指的是各个位数的三次方的和等于该数而且这个数是三位数
def is_flower(num):
a=num//100
b=num%100//10
c=num%10
if a**3+b**3+c**3==num:
return True
else:
return False
for i in range (100,1000):
if is_flower(i):
print(f"{i}是水仙花数")
作业5:验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.
写一个函数计算各位数字之和
import random
def every_sum(num):
a=num
sum=0
while True:#一个循环用于将各个位上的数剥离
b=a%10#剥离个位
a=a//10#数字右移 原来的十位变成现在的个位
sum+=b#数位上的数加入sum
if(a==0):#直到个位数是零 也就是各个位数都被剥离完成
break
return sum
x=random.randint(0,100)
print(x)
if(x-every_sum(x))%9==0:
print("验证成功")
else:
print("失败")
作业6:一个五位数,若在它的后面写上一个7,得到一个六位数A,
若在它前面写上一个7,得到一个六位数B,B是A的五倍,求此
五位数.
def is_num(num):
A=int(str(num)+"7")
B=int("7"+str(num))
if(A*5==B):
return True
else:
return False
for i in range(10000,100000):
if(is_num(i)):
print(i)
作业7:求十进制数字的二进制编码:
求十进制数字的二进制编码中的1的数量
def ten_two(num):
s=""
a=num
while True:
if(a%2==0 and a!=0):
s="0"+s
if(a%2==1):
s="1"+s
if a==0:
s='0'+s
break
a=a//2
return s
x=int(input("输入一个数来将他转化成二进制:"))
print(ten_two(x))
短除法求十进制的二进制形式十进制数除以二余一就置1否则就置0
作业8:求1~100之间不能被3整除的数之和
def sum(start,num):
s=0
for i in range(start,num):
if i%3!=0:
s+=i
return s
print(sum(1,100))
作业9:给定一个正整数N,找出1到N(含)之间所有质数的总和
def is_prime(num):
if num==1:
return False
for i in range(2,num//2+1):
if num%i==0 :
return False
return True
#判断是否为质数
def sum_prime(start,end):
s=0
for i in range(start,end):
if is_prime(i):
s+=i
return s
#从start到end 如果这个数是质数 将其加入s中
n=int(input("输入n:"))
print(f"和是{sum_prime(1,n)}")
作业10:计算PI(公式如下:PI=4(1-1/3+1/5-1/7+1/9-1.......)
观察分母 1 3 5 7 9 11.....是奇数 观察分子是+1 -1 +1 -1......
i从零开始 通项是 (-1)^i/2*i+1
def cricle(m):
s=0
for i in range(0,m):
s+=((-1)**i)/(i*2+1)
return s
print(4*cricle(99))
print(4*cricle(999))
print(4*cricle(9999))
作业11:求a+aa+aaa+.......+aaaaaaaaa=?其中a为1至9之中的一个数,项数也要可以指定
import random
def sum_num(n:int):
s=str(random.randint(1,9))
a=0
print(f"a是{s}")
for i in range(1,n):
a+=int(s*i)#字符串乘以一个数n可以得到n个字符串的拼接
return a
m=int((input("请输入n:")))
print(f"和是{sum_num(m)}")
作业12: 找出10000以内能被5或6整除,但不能被两者同时整除的数(函数)
def sixorfive(n):
if(n%5==0 or n%6==0):
if(n%30!=0):
return True
return False
for i in range(0,10000) :
if sixorfive(i):
print(i,end=" ")
作业13:不死兔子和跳楼梯问题
兔子
def rabbit(n,m):
#n代表第几个月
#m代表几个月兔子长大
#假设是三个月长大 1 1 1 2 3 4 6 9 13 19
#假设是四个月长大 1 1 1 1 2 3 4 5 7 10 14 19
#总结规律就是兔子第m月的数目是m-1月的兔子加上m-n月的兔子数
if(n<=m):
return 1
return rabbit(n-1,m)+rabbit(n-m,m)
m=int(input("输入兔子几个月会长大:"))
n=int(input("输入要求兔子数目的月份:"))
print(f"兔子的数目是:{rabbit(n,m)}")
楼梯
'''
上楼梯 等到楼梯剩余两阶台阶时
有两种可能
剩余一阶台阶时
只有一种可能
而上三阶台阶是就是两阶台阶的可能加上三阶台阶的可能
'''
def get_floor(num:int):
if num==1:
return 1
if num==2:
return 2
return get_floor(num-2)+get_floor(num-1)
num=int(input("上楼梯的台阶数是:"))
print(f"{get_floor(num)}种可能")
作业14:汉诺塔问题
def mov(n,a,b,c):
#先把n-1个盘子从a借助c移动到b柱子
#在把剩余的一个盘子从a移动到c柱子
#最后把n-1个柱子从b借助a移到c柱子
if n==1:
print(f"{a}->{c}")
else:
mov(n-1,a,c,b)
mov(1,a,b,c)
mov(n-1,b,a,c)
n=int(input("输入盘子的数目"))
mov(n,"A","B","C")
终止递归的条件是当盘子只剩下一个 只需要移动一次