第一部分 语法基础
Demo01 摄氏温度转化为华氏温度
题目描述:
输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出
转换的公式为如下:
代码部分:
cel = eval(input())
fah = 9 / 5 * cel + 32
print("%.1f" % fah)
Demo02 计算圆柱体的体积
题目描述:
输入圆柱的半径和高,并利用如下公式计算圆柱体的底面积和体积。
代码部分:
radius,length = eval(input())
area = radius * radius *3.1415926
volume = area * length
print("%.2f" % area)
print("%.2f" % volume)
Demo03 将英尺数转换为米数
题目描述:
输入英尺数然后将它转换为米数,并输出结果,结果保留四位小数点,一英尺等于0.305米
代码部分:
inch = eval(input())
mi = inch * 0.305
print("%.4f" % mi)
Demo04 计算小费
题目描述:
读取小计和酬金率,然后计算小费以及合计金额。例如客户的小计为10元,酬金率为15%,那么小费是 1.5元,合计金额为11.5元
代码部分:
sub,remu = eval(input())
remu *= 0.01
tips = sub * remu
total = sub + tips
print("%.2f" % tips)
print("%.2f" % total)
Demo05 对一个整数中的各位数字求和
题目描述:
读取一个0到1000之间的整数,并计算它各位数字之和
代码部分:
num = eval(input())
ge = num % 10
num //= 10
shi = num % 10
num //= 10
bai = num % 10
nsum = ge + shi + bai
print(nsum)
Demo06 计算年数和天数
题目描述:
输入分钟数,然后将该分钟数转换为年数和天数,假定一年有365天
代码部分:
minutes = eval(input())
hours = minutes // 60
days = hours // 24
years = days // 365
days %= 365
print(years)
print(days)
Demo07 计算能量
题目描述:
水从初始温度加热到最终温度是需要能量的,请计算需要多少能量,公式如下:
这里的M是按千克计的水量,初始温度和最终温度均为摄氏度,热量Q以焦耳计
代码部分:
M = eval(input())
inital = eval(input())
final = eval(input())
Q = M * (final - inital) * 4184
print("%.1f" % Q)
Demo08 分割数字
题目描述:
输入一个四位整数,并以反向顺序显示
代码部分:
num = eval(input())
ge = num % 10
num = num // 10
shi = num % 10
num = num // 10
bai = num % 10
num = num // 10
qian = num % 10
print(ge)
print(shi)
print(bai)
print(qian)
Demo09 计算三角形的面积
题目描述:
输入三角形的三个顶点坐标,并计算其面积,计算公式如下:
代码部分:
x1,y1,x2,y2,x3,y3 = eval(input())
side1 = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
side2 = ((x3 - x2) ** 2 + (y3 - y2) ** 2) ** 0.5
side3 = ((x1 - x3) ** 2 + (y1 - y3) ** 2) ** 0.5
s = (side1 + side2 + side3) / 2
area = (s * (s - side1) * (s - side2) * (s - side3)) ** 0.5
print("%.1f" % area)
Demo10 显示当前时间
Demo11 计算三角形的三个角
Demo12 最小数量的硬币
Demo13 正多边形的面积
Demo14 计算身体质量指数
题目描述:
BMI是根据体重测量健康的方式,通过以千克为单位的体重除以以米为单位的身高的平方计算而出
BMI指数解读如下:
代码部分:
weight,height = eval (input())
BMI = weight / height ** 2
if BMI < 18.5:
print("超轻")
elif BMI < 25.0:
print("标准")
elif Bmi < 30.0:
print("超重")
else:
print("肥胖")
Demo15 判定闰年
题目描述:
一个年份如果能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年
代码部分:
years = eval(input())
if years % 400 == 0:
print("yes")
elif years % 4 == 0 and years % 100 != 0:
print("yes")
else:
print("no")
Demo16 中彩票
题目描述:
随机产生一个两位数数字,然后用户输入一个两位数数字,并根据以下规则判定用户赢得的奖金是多少。
(1)输入的数字和随机产生的数字完全相同(包括顺序),奖金为10000元
(2)输入的数字和随机产生的数字相同(不包括顺序),奖金为3000元
(3)输入的数字和随机产生的数字有一位数相同,奖金为1000美元
(4)输入的数字和随机产生的数字都不相同,没有奖金,0元
代码部分:
import random
randNum = random.randint(10,99)
print(randNum)
userNum = eval(input())
r1 = randNum % 10
r2 = randNum // 10
u1 = userNum % 10
u2 = userNum // 10
if userNum == randNum:
print(10000)
elif u1 == r2 and u2 == r1:
print(3000)
elif r1 == u1 or r1 == u2 or r2 == u1 or r2 == u2:
print(1000)
else:
print(0)
Demo17 解一元二次方程
题目描述:
一元二次方程 的解可以使用下面的公式计算:
其中 称为判别式,如果它为正,则方程有两个实数解;为零,方程只有一个实数解;为负,没 有实数解
代码部分:
a,b,c = eval(input())
delt = b ** 2 - 4 * a * c
if delt > 0:
x1 = (-b + delt ** 0.5) / 2 * a
x2 = (-b - delt ** 0.5) / 2 * a
print("%.2f" % x1)
print("%.2f" % x2)
elif delt == 0:
x1 = b / -2 * a
x2 = x1
print("%.2f" % x1)
else:
print("无实数解")
Demo18 解2×2线程方程
Demo19 未来是周几
Demo20 本年中的第几天
Demo21 剪刀石头布 I
Demo22 三角形的周长
Demo23 一周的星期几
Demo24 直线的交点
Demo25 回文数
Demo26 两个矩形
第二部分 循环语句
Demo27 打印数字 I
题目描述:
利用循环,寻找规律,打印如下数字模式:
代码部分:
print("模式A")
for n in range(1, 7):
for j in range(1, n + 1):
print(j,end = " ")
print()
print("模式B")
for n in range(1, 7):
for j in range(1, 8 - n):
print(j,end = " ")
print()
print("模式C")
for n in range(1, 7):
for k in range(6 - n):
print(" ", end=" ")
for i in range(n, 0, -1):
print(i,end = " ")
print()
print("模式D")
for n in range(1, 7):
for k in range(1, n):
print(" ", end=" ")
for i in range(1, 8 - n):
print(i,end = " ")
print()
Demo28 打印数字 II
题目描述:
利用循环,寻找规律,打印如下数字模式:
代码部分:
for n in range(1, 8):
for k in range(7 - n):
print(" " , end=" ")
for x in range(1 - n, n):
print(abs(x) + 1 , end=" ")
print()
Demo29 打印数字 III
题目描述:
利用循环,寻找规律,打印如下数字模式:
代码部分:
for n in range(1, 8):
for k in range(7 - n):
print(" " , end=" ")
for x in range(1 - n, n):
num = 2 ** (n -abs(x) - 1)
print("%-2d" % num, end=" ")
print()
Demo30 打印菱形 I
题目描述:
如下所示,是一个高度为9的菱形:
用户输入菱形高度n,并打印出该高度下的菱形
代码部分:
num = eval(input())
for n in range(1 - (num+1)//2,(num+1)//2):
x = abs(n)
for k in range(x):
print("" ,end=" ")
for i in range((num+1)//2 - x):
print("*" , end=" ")
print()
Demo31 打印菱形 II
题目描述:
如下所示,是一个高度为9的菱形:
用户输入菱形高度n,并打印出该高度下的菱形
代码部分:
num = eval(input())
for n in range(1, num + 1):
for k in range(abs(num // 2 + 1 - n)):
print("" , end=" ")
for i in range(1, n + 1):
if i <= n and i + n <= num + 1:
if i == 1 or i == n or i + n == num + 1:
print("*" , end=" ")
else:
print(" " , end = " ")
print()
Demo32 打印菱形 III
题目描述:
如下所示,是一个高度为9的菱形
用户输入菱形高度n,并打印出该高度下的菱形
代码部分:
num = eval(input())
for n in range(1 - (num + 1) // 2 , (num + 1) // 2):
for k in range(abs(n)):
print("" , end=" ")
for i in range(num - abs(n) * 2):
print("*" , end="")
print()
Demo33 猜数字
题目描述:
计算机随机生成一个[0,100]之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相同,对于用户输入的数字,程序会提示它是过高还是过低
代码部分:
import random
randNum = random.randint(0,100)
while True:
userNum = eval(input())
if userNum < randNum:
print("小了")
elif userNum > randNum:
print("大了")
else:
print("猜对了")
break
Demo34 最大公约数 I
题目描述:
输入两个正整数,计算其最大公约数
代码部分:
num1, num2 = eval(input())
min_num = min(num1, num2)
for num in range(num1, 0 , -1):
if num1 % num == 0 and num2 % num == 0:
print(num)
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 最小公倍数
题目描述:
输入两个正整数,计算其最小公倍数
例如:4和2的最小公倍数是4,3和5的最小公倍数是15
代码部分:
n1, n2 = eval(input())
min_num = min(n1, n2) #判断输入的最小数,方便后面进行循环判断
#先求出两个数的最大公约数a
for a in range(min_num, 0 , -1):
if n1 % a == 0 and n2 % a == 0:
break
#再求出两个数的最小公倍数b
b = (n1 * n2) // a
print(b)
Demo37 整数的素因子
题目描述:
输入一个正整数,输出多行,每行输出一个素因子(最小因子)
代码部分:
num = eval(input())
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
代码部分:
n = eval(input())
a = n // 2 #先除去自身数值,因为计算因子总值不计算自身
sum = 1 #完全数最后一个数字都为1,在后面的循环语句中没有加上,则总值初始化默认为1
while a != 1: #判断数值的因子
sum += a #因子相加
a = (a + 1) // 2
if sum == n:
print(Yes)
else:
print(No)
Demo39 前50个素数
题目描述:
打印前50个素数,每打印10个素数换行
代码部分:
a = 2 #从2开始计数,判断是否为素数,1不算素数
count = 0 #统计为素数的数量,方便计算和输出前50个素数
while count != 50: #素数的数量不等于50个时,执行循环
flag = True #哨兵,方便判断是否为素数
for i in range(2, a // 2 + 1): #判断是否为素数
if a % i == 0: #该情况下,该数字不是素数
flag = False
break
if flag: #是素数的情况下怎么去处理
print(a, end = " ")
count += 1 #素数数量加1
if count % 10 == 0:
print() #每打印十个素数换行
a += 1
Demo40 计算π
题目描述:
你可以使用下面的数列近似计算π
当i越大时,计算结果越近似于π
代码部分:
i = eval(input()) #用户输入的i值越大,计算结果越近似于π
pai = 0
for i in range(1, i + 1):
pai += ((-1) ** (i + 1)) / (2 * i - 1)
pai = 4 * pai
print(pai)
Demo41 计算e
题目描述:
你可以使用下面的数列近似计算e
当i越大时,计算结果越近似于e
代码部分:
i = eval(input()) #用户输入的i值越大,输出的结果越近似e
e = 1
fac = 1
for i in range(1, i + 1):
e += 1 / (fac * i)
fac = fac * i
print(fac)
print(e)
Demo42 剪刀石头布 II
题目描述:
代码部分:
Demo43 组合问题 I
Demo44 组合问题 II
Demo45 水仙花数
题目描述:
水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身
例如:
编写程序,输出所有的水仙花数
代码部分:
ge = 0
shi = 0
bai = 0
for i in range (100, 1001):
ge = i % 10
shi = i % 100 // 10
bai = i // 100
if i == ge ** 3 + shi ** 3 + bai ** 3:
print(i)
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+aa+aaa+aaaa+aaaaa+......
例如: 2+22+222+2222+22222,其中a为2,且有5组数字
代码部分:
a,n = eval(input())
num = 0
sum = 0
for i in range(n):
num = num * 10 + a
sum += num
print(sum)
Demo48 十进制转二进制
Demo49 二进制转十进制
Demo50 十进制转十六进制
题目描述:
输入一个十进制正整数,输出其十六进制形式
代码部分:
num = eval(input())
s = "" #定义一个s的字符串,方便插入十六进制后的数字
while num != 0:
y = num % 16 #对数字取余,y输出的是十六进制后的数字
if y >= 10: #当y大于10时,要对10~16进行转换
y = chr(ord('A') + y - 10) #利用ASCII码,将大于10的数字转换为字母
s = str(y) + s #对一个个取余的数字进行排列,后取余的数字放前面
num = num // 16
print(s)
Demo51 十六进制转十进制
题目描述:
输入一个十六进制字符串,输出其对应的十进制数字
代码部分:
num = input()
n = 0
sum = 0
a = len(num)
for i in num:
if ord(i) >= 97:
n = ord(i) - ord('a') + 10
else:
n = int(i)
a = a - 1
sum += n * 16 ** a
print(sum)
Demo52 最长公共前缀
Demo53 子串出现的次数
题目描述:
给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配(非贪心)
s1 = input()
s2 = input()
n = 0
i = 0
while i <= len(s1) - len(s2):
if s1[i] == s2[0]:
j = i + 1
for k in range(1, len(s2)):
if s2[k] != s1[j]:
i += 1
break
j += 1
else:
n = n + 1
i = j
else:
i += 1
print(n)
Demo54 最长公共子串
题目描述:
给定两个字符串 s1 和 s2 ,求 s1 与 s2 之间的最长公共子串,字符区分大小写
代码部分:
s1 = input()
s2 = input()
length = len(s2)
while length > 0:
left = 0
right = length - 1
while right < len(s2):
s = s2[left : right + 1]
if s in s1:
print(s)
exit()
left = left + 1
right = right + 1
length = length - 1
Demo55 检测密码
Demo56 回文素数
Demo57 反素数
Demo58 双素数
Demo59 梅森素数
Demo60 平方根的近似求法
第三部分 数组操作
Demo68 豆机器
题目描述:
豆机器,也称为梅花或高尔顿盒子,它是一个统计实验的设备,它是由一个三角形直立板和均匀分布的 钉子构成,如下图所示:
小球从板子的开口处落下,每次小球碰到钉子,它就是50%的可能掉到左边或者右边,最终小球就堆积在板子底部的槽内
编程程序模拟豆机器,提示用户输入小球的个数以及机器的槽数,打印每个球的路径模拟它的下落,然 后打印每个槽子中小球的个数
代码部分:
import random
def creatPath(length): #生成路径的函数
path = ""
for i in range(length):
if random.randint(0,1) == 0:
path += "R"
else:
path += "L"
return path
def countR(path): #判断路径R个数的函数
count = 0
for i in path:
if i == "R":
count += 1
return count
def main():
s = input().split(" ")
balls = int(s[0]) #球数
slots = int(s[1]) #槽子数
box = [0] * slots #槽子数组
for i in range(balls):
path = creatPath(slots - 1)
print(path)
n = countR(path)
box[n] += 1
print(box)
if __name__ == "__main__":
main()
Demo72 猜单词游戏
题目描述:
随机产生一个单词,然后提示用户一次猜一个字母,如下示例所示。单词中的每个字母都显示为一个# 号,当用户猜测正确时就会显示确切的字母,当用户完成一个单词时,显示失误的次数并询问用户是否继续玩游戏
创建一个数组存储备选单词,然后随机从中抽取进行游戏
代码部分:
import random
def creatPassWord(word, state):
passWord = ""
for i in range(len(word)):
if state[i]:
passWord += "#"
else:
passWord += word[i]
return passWord
def isChangeState(word, state, c):
for i in range(len(word)):
if c == word[i]:
if state[i]:
state[i] = False
else:
return False
return True
def main():
words = ["banana", "beautiful", "apple", "person", "online"]
while True:
word = words[random.randint(0, len(words) - 1)]
state = [True] * len(word)
passWord = creatPassWord(word, state)
misseds = 0
while True in state:
c = input(f"Enter a letter in word {passWord} > ")
if c in word:
if isChangeState(word, state, c):
passWord = creatPassWord(word, state)
else:
print(f"{c} is already in the word")
else:
misseds += 1
print(f"{c} is not in the word")
print(f"The word is {word}. You missd {misseds} time.")
choice = input("Do you want to guess another word? Enter y or n >")
if choice == "n":
break
if __name__ == "__main__":
main()