问题分析:根据闰年的定义,能被4整除不能被100整除的或能被400整除的为闰年,根据此可以编写ifelse语句来判断。
year = int(input("请输入一个年份:"))
if (year % 4) == 0 and (year % 100) !=0 or (year % 400) == 0:
print("%s年是闰年" % year)
else:
print("%s年不是闰年" % year)
问题分析:三位数的自然数想要知道其个、十、百位上的数字,可以先让他除以100,得到一个余数和商,这个商就是百位的数字,再用余数除以10,得到一个商和余数,这个商是十位的数字,余数为个位的数字。
代码:
x = input('请输入一个三位数:')
x = int(x)
a, b = divmod(x, 100)
b, c = divmod(b, 10)
#函数把除数和余数运算结果结合起来,
#返回一个包含商和余数的元组(a // b, a % b)。
print(a, b, c)
问题分析:根据素数的定义:只能被 1 和它本身整除的数叫做素数,来编写函数,运用ifelse语句进行判断,先判断是否大于1,大于1则继续判断,否则推出,确定大于1后再判断是否能被大于等于2的数整除,不能则为素数,能的话就不是素数。
代码:
n = int(input("请输入一个正整数n:"))
if n < 2: #判断是否大于1的整数,且1不是素数
print("%d不是素数!"%n)
else:
for i in range(2,n):
if n % i == 0: #判断2——i是否有能被整除
print("%d不是素数!"%n)
break
else:
print("%d是素数!"%n)
问题分析:
可以看出该问题就是要运用python计算阶乘,根据阶乘的计算公式,可以定义一个函数,如果i=0的话结果为1,如果不等于0,则结果为i乘以该函数的参数为i-1时的值,相当于循环调用,最后得出结果,再取结果分之一,为题中要求结果。
代码:
def jiecheng(n):
if n == 0:
return 1
else:
return n * jiecheng(n - 1)
i = int(input("请输入i:"))
print(1/jiecheng(i))
问题分析:求解最大公约数的具体步骤为:1.整数A对整数B进行取整, 余数用整数C来表示,即C = A % ;2.如果C等于0,则C就是整数A和整数B的最大公约数;3.如果C不等于0, 将B赋值给A, 将C赋值给B ,然后进行 1, 2 两步,直到余数为0, 则可以得知最大公约数。根据该过程进行编写函数
代码:
def fun(num1, num2): # 定义一个函数, 两个形参
if num1 < num2: # 判读两个整数的大小,目的为了将大的数作为除数,小的作为被除数
num1, num2 = num2, num1 # 如果if条件满足,则进行值的交换
vari = num1 % num2 # 对2个整数进行取余数
while vari != 0: # 判断余数是否为0, 如果不为0,则进入循环
num1 = num2 # 重新进行赋值,进行下次计算
num2 = vari
vari = num1 % num2 # 对重新赋值后的两个整数取余数
print("最大公约数为:%d" % num2) # 输出
fun(12,18)
问题分析:根据定义字典的知识将题中给的信息录入并输出结果。
代码:
stu1 = {'海航':{'20200322':'未交','20200401':'已交'}}
stu2 = {'国航':{'20200322':'已交','20200401':'已交'}}
print(stu1)
print(stu2)
grade1={‘刘达’:89,‘王尔’:95,‘李珊’:67,‘陈思’:75}
grade2={‘刘达’:75,‘王尔’:79,‘李珊’:79}
grade1={‘李珊’:87,‘陈思’:91,‘张悟’:75}
grade1={‘刘达’:89,‘王尔’:86,‘张悟’:99}
问题分析:先将已知条件录入字典,然后运用for循环进行遍历,遍历过程中进行判断和计算学生平均成绩。
代码:
grade1 = {"刘达": 89, "王尔": 95, "李珊": 67, "陈思": 75}
grade2 = {"刘达": 75, "王尔": 79, "李珊": 79}
grade3 = {"李珊": 87, "陈思": 91, "张悟": 75}
grade4 = {"刘达": 89, "王尔": 86, "张悟": 99}
grade = [grade1, grade2, grade3, grade4]
b = []
nsum = 0
n = 0
a = str(input("输入姓名:"))
for i in grade:
for key, value in i.items():
if a == key:
nsum += value
n = n+1
b.append(nsum/n)
print(nsum/n)
问题分析:
根据输入的行数和列数,进行while循环,当i<=m时继续循环,在第一个循环里嵌套一个j<=n的一个循环用来书写列上的“*”,当j>n时循环结束,输出四边形。
代码:
i = 1
m=int(input('请输入行数:'))
n=int(input('请输入列数:'))
while i <= m:
j = 1
while j <= i-1:
print(" ", end=" ")
j += 1
j = 1
while j <= n:
print(end=" ")
j += 1
print()
问题分析:逆向思维思考,设后一天的桃子数量为x,则前一天剩余的桃子数量为(x+1)×2,据此运用for循环进行编写函数。
代码:
x = 1
day = 7
for i in range(6):
day = day-1
x = (x+1)*2
print ('第%d天的桃子数为%d个'%(day, x))
问题分析:
已知1900年1月1日是星期一
1.先输出提示语句,接受用户输入年、月。
2.根据输入的年份判断是否是闰年。
3.根据月份判断月的天数。
4.循环计算输入的年份距1900年1月1日的总天数。
5.循环计算输入的月份距输入年份的1月1日共有多少天。
6.相加4与5的天数得到总天数
7.用总天数计算输入月份的第一天是星期几
8.格式化显示这个月的日历
代码:
def isLeapYear(year):#判断是否是闰年
return True if (year % 100 != 0 and year % 4 == 0) or year % 400 ==0 else False
def monthDay(year,month):#判断当前月天数
li = [31,28,31,30,31,30,31,31,30,31,30,31]
if isLeapYear(year):
li[1] = 29
return li[month-1]
def totalDay(year, month):#距1900年1月1日的天数
days = 0
for index_year in range(1900, year):
days += 366 if isLeapYear(index_year) else 365
for index_month in range(1, month):
days += monthDay(year, index_month)
return days
def Calender(): #显示当前月
year,month = eval(input("输入年份、月份:"))
space_num = totalDay(year, month) % 7 + 1
#print("空格数",space_num)
#print("星期",totalDay(year, month) % 7 + 1,"开始")
print("星期日\t一\t二\t三\t四\t五\t六")
for i in range(1, monthDay(year,month) + 1):
if (i == 1):
for j in range(space_num % 7):
print("\t",end="")
print("\t%2d"%i,end="")
if (i + space_num) % 7 == 0:
print()
Calender()
问题分析:运用random.randint语句随机生成数,然后再运用sorted语句进行排序。
代码:
import random
x = [random.randint(0,100)for i in range(20)]
print(x)
x[:10] = sorted(x[:10])
x[10:] = sorted(x[10:],reverse=True)
print(x)
问题分析:兔子的规律为数列1,1,2,3,5,8,13,21…,实际上就是斐波拉契数列。
代码:
f1 = 1
f2 = 1
for i in range(1,22):
print('%12ld %12ld' % (f1,f2),end=' ')
if (i % 3) == 0:
print()
f1 = f1 + f2
f2 = f1 + f2
health.txt
<18.5:“过轻”
<24:“正常”
<27:“过重”
<32:“肥胖”
》32:"非常肥胖"
问题分析:根据题中要求编写health.tex文件,然后在python中调用,再运用if-else语句进行判断就可以了。
def health(weight, height):
if height == 0:
print("身高输入异常")
else:
BMI = weight/(height**2)
print("BMI为:",BMI)
if BMI < 18.5:
print("偏瘦")
elif BMI < 24:
print("正常")
elif BMI < 27:
print("偏胖")
elif BMI < 32:
print("肥胖")
elif BMI > 32:
print("过度肥胖")
def main():
m, n = map(float, input("输入的体重(kg)和高度(m):").split())
health(m, n)
with open('health.txt', 'r', encoding='utf-8') as f:
print(f.read())
for line in f:
print(line, end='')
print()
if __name__ == '__main__':
main()
问题分析:每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的。创建一个RandomWalk雷,随机的选择前进的方向,一共有三个属性一个是存储随机漫步次数的变量,其他两个是列表,分别存储随机漫步经过的每个点的x和y坐标。
代码:
from random import choice
class RandomWalk():
"一个生成随机漫步数据的表"
def __init__(self, num_points = 5000):
"""初始化随机漫步的属性"""
self.num_points = num_points
# 所有随机漫步都起始于(0, 0)
self.x_values = [0]
self.y_values = [0]
def fill_walk(self):
"""计算随机漫步包含的所有点"""
# 不断漫步,直到列表达到指定的长度
while len(self.x_values) < self.num_points:
# 决定前进的方向以及沿这个方向前进的距离
x_direction = choice([-1, 1])
x_distance = choice([0, 1, 2, 3, 4])
x_step = x_distance * x_direction
y_direction = choice([-1, 1])
y_distance = choice([0, 1, 2, 3, 4])
y_step = y_distance * y_direction
# 拒绝原地踏步
if x_step == 0 and y_step == 0:
continue
# 计算下一个点的x和y值
next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step
self.x_values.append(next_x)
self.y_values.append(next_y)
# 不断的模拟随机漫步
while True:
# 创建一个RandomWalk实例,将其包含的点绘制出来
rw = RandomWalk()
rw.fill_walk()
point_numbers = list(range(rw.num_points))
plt.scatter(rw.x_values, rw.y_values, c = point_numbers, cmap = plt.cm.Blues,
edgecolor = 'none', s = 5
# 突出起点和终点
plt.scatter(0, 0, c='green', edgecolors = 'none', s = 100)
plt.scatter(rw.x_values[1], rw.y_values[-1], c = 'red', edgecolors = 'none', s = 100)
# 隐藏坐标轴
# plt.axes().get_xaxis().set_visible(False)
# plt.axes().get_yaxis().set_visible(False)
plt.show()
keep_running = input("Make another walk? (y/n): ")
if keep_running.lower().startswith('n'):
break
问题分析:按照题目要求生成列表,然后运用for循环进行遍历,在遍历过程中判断是否是奇数,即是否可以整除2,不能整除就是奇数,将其删除。
代码:
import random
x = [random.randint(0,100)for i in range(20)]
print(x)
for i in range(len(x))[::-1]:
if x[i]%2 ==1:
del x[i]
print(x)
问题分析:
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天。
代码:
date = input("输入年月日(yyyy-mm-dd):")
y,m,d = (int(i) for i in date.split('-'))
sum=0
special = (1,3,5,7,8,10)
for i in range(1,int(m)):
if i == 2:
if y%400==0 or (y%100!=0 and y%4==0):
sum+=29
else:
sum+=28
elif(i in special):
sum+=31
else:
sum+=30
sum+=d
print("这一天是一年中的第%d天"%sum)