Demo28 打印数字II
题目描述
利用循环,寻找规律,打印如下数字模式:
# 利用循环,寻找规律,打印如下数字模式:
# 1
# 1 2 1
# 1 2 4 2 1
# 1 2 4 8 4 2 1
# 1 2 4 8 16 8 4 2 1
# 用户输入需要的层数
row = int(input("输入"))
def print_row (row):
for i in range(1,row+1):
print(" "*(row*2-2*i),end="")
num = 1
for j in range(1,i*2):
if j<i:
print(str(num)+" ",end="")
num*=2
else:
print(str(num)+" ",end="")
num = int(num/2)
print()
print_row(row)
Demo29 打印数字III
题目描述
利用循环,寻找规律,打印如下数字模式:
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
1 2 4 8 16 32 64 32 16 8 4 2 1
Demo30 打印菱形I
题目描述
如下所示,是一个高度为9的菱形
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
用户输入菱形高度n,并打印出该高度下的菱形
输入输出描述
输入高度n,n为奇数
输出该高度的菱形
示例
输入:
5
输出:
* * * * * * * * *
# 输出一个高度为9的菱形
# *
# * *
# * * *
# * * * *
# * * * * *
# * * * *
# * * *
# * *
# *
# 用户输入想要打印的层数
row = int (input("输入"))
def print_pic(row):
for i in range(1,row+1):
if i<row//2+1:
print(" "*((row+1)//2-i),end="")
print("* "*i)
else:
print(" "*(i-(row+1)//2),end="")
print("* "*(row+1-i))
print_pic(row)
Demo31 打印菱形II
题目描述
如下所示,是一个高度为9的菱形
*
* *
* *
* *
* *
* *
* *
* *
*
用户输入菱形高度n,并打印出该高度下的菱形
输入输出描述
输入高度n,n为奇数
输出该高度的菱形
示例
输入:
5
输出:
* * * * * * * *
# 打印空心菱形
# *
# * *
# * *
# * *
# * *
# * *
# * *
# * *
# *
# 用户输入打印的行数
row = int(input("输入"))
def print_pic(row):
for i in range(0,row):
if i<row//2+1:
print(" "*(row//2-i),end="")
for j in range(i*2+1):
if j ==0 or j==i*2:
print("*",end="")
else:
print(" ",end="")
else:
print(" "*(i-row//2),end="")
for j in range((row-i)*2-1):
if j==0 or j == (row-i-1)*2:
print("*",end="")
else:
print(" ",end="")
print()
print_pic(row)
Demo33 猜数字
题目描述
计算机随机生成一个[0,100]之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相同
对于用户输入的数字,程序会提示它是过高还是过低
输入输出描述
每次输入一个整数
每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束
示例
输入:50
输出:高了
输入:25
输出:低了
输入:42
输出:高了
输入:39
输出:猜中了!答案就是39
import random
com = random.randint(0, 100) # [0,100] range(0,100) # [0,100)
while True:
# 1
num = int(input("请输入一个数:"))
# 2.1
if num == com:
print("猜对了!答案就是", com)
break
# 2.2
elif num > com:
print("高了")
# 2.3
else:
print("低了")
Demo34 最大公约数I
题目描述
输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8
num_1 = int(input("请输入第一个正整数:"))
num_2 = int(input("请输入第二个正整数:"))
#取小的那个值以下的值进行判断
if num_1 >= num_2 :
for i in range(1 , num_2 + 1) :
#若该数可以同时被这两个数整除,则为公约数
if num_1 % i == 0 and num_2 % i == 0 :
#i逐渐增加,直到达到最大的公约数
num = i
print(f"最大公约数为:{num}")
if num_1 <= num_2 :
for i in range(1 , num_1 + 1) :
if num_1 % i == 0 and num_2 % i == 0 :
num = i
print(f"最大公约数为:{num}")
输入输出描述
输入两个数字
输出最大公约数
示例1
输入:
16 24
输出:
8
示例2
输入:
7 3
输出:
1
Demo36 最小公倍数
题目描述
输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15
num_1 = int(input("请输入第一个正整数:"))
num_2 = int(input("请输入第二个正整数:"))
#取大的那个值后面的数进行判断
if num_1 >= num_2 :
#最多到两数相乘
for i in range(num_1 , num_2 * num_1 + 1) :
if i % num_1 == 0 and i % num_2 == 0 :
#从小的开始判断,满足条件则中断循环,就能拿到最小的那个公倍数
num = i
break
print(f"最小公倍数为:{num}")
elif num_1 <= num_2 :
for i in range(num_2 , num_1 * num_2 + 1) :
if i % num_1 == 0 and i % num_2 == 0 :
num = i
break
print(f"最小公倍数为:{num}")
输入输出描述
输入两个正整数
输出最小公倍数
示例1
输入:
3 9
输出:
9
示例2
输入:
4 6
输出:
12
Demo37 整数的素因子
题目描述
输入一个正整数,然后找出它所有的最小因子,也称之为素因子
# 输入一个正整数,然后找出它所有的最小因子,也称之为素因子
num = int(input("输入"))
def prime(num):
"""
求素因子
"""
arr=[]
i = 2
while i * i <= num :
if num % i == 0:
arr.append(i)
else:
i += 1
if num > 1 :
arr.append(num)
return arr
print(prime(num))
输入输出描述
输入一个正整数
输出多行,每行输出一个素因子
示例1
输入:
120
输出:
2 2 2 3 5
解释:
2 * 2 * 2 *3 * 5 = 120
示例2
输入:
100
输出:
2 2 5 5
Demo38 完全数
题目描述
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1
num = int(input("请输入一个正整数:"))
array = []
#存储输入的值
num_t = num
#定义一个数用来储存因子和
sum = 0
#定义循环变量并循环分解出因子
i = 2
while i <= num :
if num % i == 0 :
array.append(i)
num //= i
else :
i += 1
for i in array :
sum += i
#多加一个1,因为1能被除
if sum + 1 == num_t :
print("yes")
else :
print("no")
输入输出描述
输入一个正整数
输出该数是否为完全数
示例1
输入:
6
输出:
Yes
示例2
输入:
9
输出:
No
Demo40 计算π
题目描述
你可以使用下面的数列近似计算π
当i越大时,计算结果越近似于π
# 计算π
i = int (input("输入"))
def get_π(i):
num = 0
for i in range(1,i+1):
num += (-1)**(i+1)/(2*i-1)
num *= 4
return num
print(get_π(i))
Demo41 计算e
题目描述
你可以使用下面的数列近似计算e
当i越大时,计算结果越近似于e
i= int(input("请输入计算次数:"))
temp = 1
e = 1
for j in range(1 , i + 1) :
for k in range(1 , j + 1) :
temp = temp * k
e = e + 1 / temp
print(e)
Demo43 组合问题I
题目描述
在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
注:组合(a,b)与组合(b,a)算同一种组合,只记录一次
#定义一个数计算总个数
sum = 0
#两个循环,第一个输出前一个数,第二个输出后一个数,输出一次sum+1
for i in range(1 , 8) :
for j in range(i , 8) :
print(i , j)
sum += 1
print(sum)
Demo44 组合问题II
题目描述
有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
# 组合问题II
arr =[1,2,3,4]
count = 0
for i in range(1,len(arr)-1):
for j in range(2,len(arr)):
for p in range(3,len(arr)+1):
if i!=j and j != p:
print(f"[{i} {j} {p}]",end="")
count += 1
print("\n"+str(count))
Demo46 青蛙跳台阶
题目描述
一只青蛙,一次可以跳一个台阶或者两个台阶,现有n个台阶,问该青蛙有多少种不同的跳法?
例如:两个台阶,有两种跳法(1+1,2);四个台阶,有五种跳法(1+1+1+1,2+1+1,1+2+1,1+1+2,2+2)
递归
def frog(n) :
#一阶只有一种跳法
if n == 1 :
return 1
#两阶只有两种跳法
elif n == 2 :
return 2
#多阶,从最后一阶往回计算,跳一阶的数和跳两阶的数之和就是总的方法数
else :
return frog(n - 1) + frog(n - 2)
print(f"一共有{frog(4)}种跳法")
Demo47堆叠相加
题目描述
现有堆叠相加模式$a+aa+aaa+aaaa+aaaaa+......$
例如:$2+22+222+2222+22222$,其中a为2,且有5组数字
num , group = map(int ,input("输入").split())
def get_num(num,group):
sum = 0
for i in range(1,group+1):
sum += int(str(num)*i)
return sum
print(get_num(num,group))
输入输出描述
输入两个数据分别为数字a和组数n
输出按照堆叠相加模式算出的和
示例
输入:
3 4
输出:
3702
解释:
3 + 33 + 333 + 3333 = 3702
Demo48 十进制转二进制
题目描述
输入一个十进制正整数,输出其二进制形式
#循环判断输入的数是否符合条件
while True :
num = int(input("请输入一个正整数:"))
if num % 1 == 0 :
break
temp = []
#拆分为倒序的二进制
while num > 0 :
temp.append(num % 2)
num //= 2
#反转列表为正确的顺序
temp.reverse()
#输出
for i in temp :
print(i , end=" ")
输入输出描述
输入一个十进制正整数
输出二进制字符串
示例
输入:
9
输出:
1001
Demo49 二进制转十进制
题目描述
输入一个二进制字符串,输出其对应的十进制数字
array = list(input('请输入一个二进制数:'))
#定义一个数容纳列表的长度
temp = len(array)
#初始化十进制的数
num_S = 0
#循环使用位阶计算该十进制数(累加)
for i in array :
num_S += int(i) * (2 ** (temp - 1))
temp -=1
print(num_S)
输入输出描述
输入一个二进制字符串
输出十进制数字
示例
输入:
1001
输出:
9
Demo50 十进制转十六进制
题目描述
输入一个十进制正整数,输出其十六进制形式
temp = list(input("请输入一个16进制的数:"))
#初始化十进制数
sum = 0
#计算列表中的元素个数
num = len(temp)
#循环计算,将字符串转换为整型计算
for i in temp :
if i == "a" :
sum += 10 * (16 ** (num - 1))
elif i == "b" :
sum += 11 * (16 ** (num - 1))
elif i == "c" :
sum += 12 * (16 ** (num - 1))
elif i == "d" :
sum += 13 * (16 ** (num - 1))
elif i == "e" :
sum += 14 * (16 ** (num - 1))
elif i == "f" :
sum += 15 * (16 ** (num - 1))
#本来就是整形的直接计算
else :
sum += int(i) * (16 ** (num - 1))
#位阶的幂
num -= 1
print(sum)
输入输出描述
输入一个十进制正整数
输出十六进制字符串
示例
输入:
1233321
输出:
1e1b9
Demo52 最长公共前缀
题目描述
给定两个字符串 s1 和 s2 ,求两个字符串最长的公共前缀串,字符区分大小写
array_1 = list(input("请输入第一个字符串:"))
array_2 = list(input("请输入第二个字符串:"))
temp = []
i = 0
#如果两个列表同一位置的元素相同,则输入到第三个数组
while i < len(array_1) :
if array_1[i] == array_2[i] :
temp.append(array_1[i])
i += 1
#一旦碰到不相同的,结束循环
else :
break
#输出
for i in temp :
print(i , end="")
输入输出描述
输入两行,分别表示s1和s2
输出前缀串
示例
输入:
abcdefg
abcdhko
输出:
abcd
Demo53 子串出现的次数
题目描述
给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配
while True :
s1 = (input("请输入第一个字符串:"))
s2 = (input("请输入第二个字符串:"))
if len(s1) > len(s2) :
break
count = s1.count(s2)
print(count)
输入输出描述
输入两行字符串,分别为s1和s2,s2的长度小于等于s1
输出s2在s1中出现的次数
示例1
输入:
ABCsdABsadABCasdhjabcsaABCasd
ABC
输出:
3
示例2
输入:
AAAAAAAA
AAA
输出:
2
Demo54 最长公共子串
题目描述
给定两个字符串 s1 和 s2 ,求 s1 与 s2 之间的最长公共子串,字符区分大小写
str1 = str(input("请输入str1:"))
str2 = str(input("请输入str2:"))
def find_lcs(str1,str2):
lcs=set()
if len(str1)>len(str2):
str1,str2=str2,str1
for i in range(len(str1),0,-1):
flag=False
for j in range(len(str1)-i+1):
s=str1[j:i+j]
if str2.find(s)>-1:
lcs.add(s)
flag=True
else:
flag=False
if flag:
break
print("最长公共子串为:",lcs)
find_lcs(str1,str2)
输入输出描述
输入两行字符串,分别为s1和s2
输出最长公共子串
示例
输入:
123ABCDEFG83hsad
iughABCDEFG23uy
输出:
ABCDEFG
Demo55 检测密码
题目描述
一些网站会给密码强加一些规则:
(1)密码必须至少有8个字符
(2)密码只能包含英文字母和数字
(3)密码应该至少包含两个数字
(4)密码应该至少包含两个大写字母
如果密码符合规则,输出Yes;否则输出No
password = input("请输入密码:")
#定义两个数用来容纳数组中的大写字母和数字个数
num1 = 0
num2 = 0
#判断大写字母和数字个数
for i in password :
if i.isdecimal() :
num1 += 1
elif i.isupper :
num2 += 1
#判断规则
if len(password) < 8 :
print("No")
elif password.isalnum() == False :
print("No")
elif num1 < 2 :
print("No")
elif num2 < 2 :
print("No")
else :
print("Yes")
print(num1 , num2)
输入输出描述
输入一串密码
输出该密码是否符合规则
示例1
输入:
123456ab
输出:
No
示例2
输入:
123abcABC
输出:
Yes
Demo56 回文素数
题目描述
回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数
输出显示前100个回文素数,每行显示10个
#函数检测素数
def is_sushu(num):
for i in range(2, num // 2 + 1):
if num % i == 0:
return False
return True
#函数检测回文数
def is_huiwenshu(num):
if str(num) == str(num)[::-1]:
return True
#count统计回文数个数
count = 0
#定义用来循环每一个数的数,从2开始
num = 2
while count < 100:
if is_sushu(num) and is_huiwenshu(num):
print("%5d"%num, end=" ")
count += 1
#每10个换行
if count % 10 == 0:
print()
num += 1
Demo57 反素数
题目描述
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数
输出显示前100个反素数,每行显示10个
Demo58 双素数
题目描述
双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数
输出显示小于1000的双素数
#函数检测素数
def is_sushu(num):
for i in range(2, num // 2 + 1):
if num % i == 0:
return False
return True
#定义用来循环每一个数的数,从2开始
num = 2
while num < 1000 :
if is_sushu(num) and is_sushu(num + 2) :
print(f"{num}和{num + 2}是一对双素数")
num += 1
Demo59 梅森素数
如果一个素数可以写成$2^p-1$的形式,其中p是某个正整数,那么这个素数就称作梅森素数
输出p≤31的所有梅森素数
#函数检测素数
def is_sushu(num):
for i in range(2, num // 2 + 1):
if num % i == 0:
return False
return True
# 定于数循环
num = 2
#梅森数,是指形如2p-1的一类数,其中指数p是素数,常记为Mp。如果梅森数是素数,就称为梅森素数。
while num <= 31 :
temp = 2 ** num - 1
if is_sushu(temp) :
print(f"{temp}是一个梅森素数")
num += 1
Demo60 平方根的近似求法
有几种实现开平方$\sqrt{n}$的技术,其中一个称为巴比伦法
它通过使用下面公式的反复计算近似地得到:
当nextGuess和lastGuess几乎相同时,nextGuess就是平方根的近似值
lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为nextGuess是n的平方根的近似值;否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行
编写代码,求解n的平方根的近似值
# nextGuess=(lastGuess+n/lasetGuess)/2
#初始化数据
num = float(input("请输入一个数:"))
nextGuess = 0
lastGuess = 1
# 循环求值
while True :
nextGuess = (lastGuess + num / lastGuess) / 2
if nextGuess - lastGuess < 0.0001 :
print(f"{nextGuess}是{num}的平方根的近似值")
break
lastGuess = nextGuess