Demo31:打印菱形 II
![](https://i-blog.csdnimg.cn/blog_migrate/c177fa1005ccca465ecac923a9f50444.png)
n = eval(input())
for i in range(1, n + 1):
for k in range(abs(n // 2 + 1 - i)):
print(" ", end = "")
for j in range(1, i + 1):
if j <= i and i + j <= n + 1:
if j == 1 or j == i or j + i == n + 1:
print("*", end = " ")
else:
print(" ", end = " ")
print()
Demo32:打印菱形 III
n = eval(input())
for i in range(0, n):
for j in range(abs(n // 2 - i)):
print(" ", end = "")
for k in range(1, n + 1):
if k <= 2 * i + 1 and k <= 2 * (n - i) - 1:
print("*", end = "")
print()
Demo33:猜数字
计算机随机生成一个
[0,100]
之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相
同
对于用户输入的数字,程序会提示它是过高还是过低
import random
randNum = random.randint(0 , 100)
usrNum = eval(input())
while randNum != usrNum:
if usrNum < randNum:
print("小了")
elif usrNum > randNum:
print("大了")
usrNum = eval(input())
print("猜对了")
'''
while True:
usrNum = eval(input())
if usrNum < randNum:
print("小了")
elif usrNum > randNum:
print("大了")
else:
print("猜对了")
break
'''
Demo34:最大公约数 I
输入两个数字
输出最大公约数
a, b = map(int,input().split())
num = min(a, b)
for n in range(num, 0, -1):
if a % n == 0 and b % n == 0:
print(n)
break
Demo35:判断素数
输入一个大于
1
的正整数
输出
Yes
表示该数字是素数,否则输出
No
num = eval(input())
flag = True #设置哨兵
for n in range(2, num // 2 + 1):
if num % n == 0:
flag = False
break
if flag:
print("Yes")
else:
print("No")
Demo36:最小公倍数
输入两个正整数
输出最小公倍数
a, b = map(int,input().split())
num = min(a, b)
for i in range(num, 0, -1):
if a % i == 0 and b % i == 0:
break
print(i)
print(a * b // i)
Demo37:整数的素因子
输入一个正整数
输出多行,每行输出一个素因子
num = eval(input(0))
while num != 1:
for n in range(2, num + 1):
if num % n == 0:
print(n, end = " ")
num = num // n
break
Demo38:完全数
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如
6 = 3 + 2 + 1
,
28 = 14 + 7 + 4 + 2 + 1
输入一个正整数
输出该数是否为完全数
num = eval(input())
he = 0
for i in range(1, num // 2 + 1):
if num % i == 0:
he += i
if he == num:
print("Yes")
else:
print("No")
Demo39:前50个素数
打印前50个素数,每打印10个素数换行
num = 2
count = 0
while count != 50:
flag = True
for n in range(2, num // 2 + 1):
if num % n == 0:
flag = False
break
if flag:
print(num, end = "\t")
count += 1
if count % 10 == 0:
print()
num += 1
Demo40:计算π
i = eval(input())
pi = 0
for j in range(1, i + 1):
pi += (-1) ** (j + 1) / (2 * j - 1)
print(pi * 4)
Demo41:计算e
i = eval(input())
he = 1
n = 1
for j in range(1, i + 1):
for k in range(2, j + 1):
n = 1 / k * n
he += n
n = 1
print(he)
Demo42:剪刀石头布 II
利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜 利者
import random
A = 0 #用户的分数
B = 0 #计算机的分数
while True:
print("请输入0、1或2")
a = int(input())
b = random.randint(0,2)
if (a < b) or (a == 2 and b == 0) :
B += 1
elif a == b :
A = A
B = B
else :
A += 1
if A == 3:
print("用户获胜!")
break
elif B == 3:
print("计算机获胜!")
break
Demo43:组合问题 I
在数字范围
[1,7]
之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
a = 0 # 计数器,用于统计组合个数
# 循环生成所有可能的组合
for i in range(1, 8):
for j in range(i + 1, 8):
# 输出组合
print(i," ",j)
a += 1
print("所有组合的个数:" , a)
Demo44:组合问题 II
有
1
、
2
、
3
、
4
这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
a = 0 # 计数器,用于统计满足条件的三位数个数
# 循环生成所有可能的组合
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
# 确保三个数字各不相同
if i != j and j != k and i != k:
# 计算并输出三位数
num = i * 100 + j * 10 + k
print(num)
a += 1
print("满足条件的三位数总共有" , a , "个")
Demo45:水仙花数
for num in range(100, 1000):
#取个位数
a = num % 10
#取十位数
b = num // 10 % 10
#取百位数
c = num // 100
if a ** 3 + b ** 3 + c ** 3 == num:
print(num)
Demo46:青蛙跳台阶
一只青蛙,一次可以跳一个台阶或者两个台阶,现有
n
个台阶,问该青蛙有多少种不同的跳法?
例如:两个台阶,有两种跳法(
1+1
,
2
);四个台阶,有五种跳法(
1+1+1+1
,
2+1+1
,
1+2+1
,
1+1+2
,
2+2
)
n = eval(input())
if n == 1 or n == 2:
print(n)
else :
a = 1
b = 2
c = 0
for i in range(3, n + 1):
c = a + b
a = b
b = c
print(c)
Demo47:堆叠相加
a, n = eval(input())
sum = 0
num = 0
for i in range(n):
num = num * 10 + a
sum += num
print(sum)
Demo48:十进制转二进制
n = eval(input())
x = ""
while n != 0:
m = n % 2
x = str(m) + x
n //= 2
print(int(x))x
Demo49:二进制转十进制
n = input()
length = len(n) - 1
sum = 0
for i in n:
j = int(i)
sum += j * 2 ** length
length -= 1
print(sum)
Demo50:十进制转十六进制
"""
9 ÷ 2 = 4 ~ 1
4 ÷ 2 = 2 ~ 0
2 ÷ 2 = 1 ~ 0
1 ÷ 2 = 0 ~ 1
1001 = 9
123321 ÷ 16 = 7707 ~ 9
7707 ÷ 16 = 481 ~ 11
481 ÷ 16 = 30 ~ 1
30 ÷ 16 = 1 ~ 14 E
1 ÷ 16 = 0 ~ 1
1E189
"""
num = eval(input())
s = ""
while num != 0:
y = num % 16
if y >= 10:
y = chr(ord('A') + y - 10)
s = str(y) + s
num = num // 16
print(s)
Demo51:十六进制转十进制
print("请输入一个十六进制数,字母a-f小写")
a = input()
b = 0
for i in a :
if '0' < i <'9':
b = b * 16 + (ord(i) - ord('0'))
elif 'a' <= i <= 'f' :
b = b * 16 + (ord(i) - ord('A') + 10)
else :
print("输入的不是十六进制数")
print(b)
Demo52:最长公共前缀
给定两个字符串
s1
和
s2
,求两个字符串最长的公共前缀串,字符区分大小写
s1 = input()
s2 = input()
s = ""
min_len = min(len(s1), len(s2))
for i in range(min_len):
if s1[i] == s2[i]:
s += s1[i]
else:
break
print(s)
Demo53:子串出现的次数
给定两个字符串
s1
和
s2
,求
s2
在
s1
中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配
s1 = input()
s2 = input()
count = 0
length = len(s1)
len1 = 0
while len1 < length:
if s1[len1] == s2[0]:
#从当前下标往后取2个包括当前下标数
if s1[len1t:len1 + 3] == s2:
count += 1
len1 += 2
len1 += 1
print(count)
Demo54:最长公共子串
给定两个字符串 s1 和 s2 ,求 s1 与 s2 之间的最长公共子串,字符区分大小写
Demo55:检测密码
一些网站会给密码强加一些规则:
(
1
)密码必须至少有
8
个字符
(
2
)密码只能包含英文字母和数字
(
3
)密码应该至少包含两个数字
(
4
)密码应该至少包含两个大写字母
如果密码符合规则,输出
Yes
;否则输出
No
# 输入密码
password = input("请输入密码:")
# Rule 1: 密码至少有8个字符
if len(password) < 8:
print("No")
else:
# Rule 2: 密码只能包含英文字母和数字
if not password.isalnum():
print("No")
else:
# Rule 3: 密码至少包含两个数字
digit_count = sum(1 for char in password if char.isdigit())
if digit_count < 2:
print("No")
else:
# Rule 4: 密码至少包含两个大写字母
uppercase_count = sum(1 for char in password if char.isupper())
if uppercase_count < 2:
print("No")
else:
print("Yes")
Demo56:回文素数
回文素数是指一个数既是素数又是回文数,例如
131
既是素数也是回文数
输出显示前
100
个回文素数,每行显示
10
个
num = 2
count = 0
while count < 100:
# 将数字转换为字符串以检查是否为回文数
s = str(num)
if s == s[::-1]:
flag = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
flag = False
break
# 如果既是回文数又是素数,则输出并增加计数器
if flag:
count += 1
print(num, end = " ")
# 每10个数字后换行
if count % 10 == 0:
print()
num += 1
Demo57:反素数
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如
17
和
71
都是素数但不是回文数,且反转 后依旧是素数
输出显示前
100
个反素数,每行显示
10
个
num1 = 2
count = 0
while count < 100:
flag1 = True
for n in range(2, int(num1 ** 0.5) + 1):
if num1 % n == 0:
flag1 = False
break
#将数字转化为翻转数
s = str(num1)
num2 = int(s[::-1])
flag2 = True
for n in range(2, int(num2 ** 0.5) + 1):
if num2 % n == 0:
flag2 = False
break
flag3 = True
#判断两个数是否是回文
if num1 == num2:
flag3 = False
if flag1 and flag2 and flag3:
print(num1, end =" ")
count += 1
#每输出十个数换行
if count % 10 == 0:
print()
num1 += 1
Demo58:双素数
双素数是指一对差值为
2
的素数,例如
3
和
5
就是一对双素数,
5
和
7
也是一对双素数
输出显示小于
1000
的双素数
num1 = 3
while num1 < 1000:
for i in range(2, int(num1 ** 0.5) + 1):
if num1 % i == 0:
break
else:
num2 = num1 + 2
for j in range(2, int(num2 ** 0.5) + 1):
if num2 % j == 0:
break
else:
print(num1,num2)
num1 += 1
Demo59:梅森素数
p = 2
while p <= 31:
num = 2 ** p - 1
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
break
else:
print(num)
p += 1
Demo60:平方根的近似求法
![](https://i-blog.csdnimg.cn/blog_migrate/ea8648a710043e6a47163b21c8629231.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a7c674a0e98f0ac346af1180c605db11.png)
n = eval(input())
nextGuess = 0
lastGuess = 1
x = 0
while True:
nextGuess = (lastGuess + n / lastGuess) / 2
if abs(nextGuess - lastGuess) < 0.0001:
x = nextGuess
break
else:
lastGuess = nextGuess
print(x)