目录
5.22 day03作业
1. 变量
1. 声明一个整数类型的变量,名为num,并将其赋值为10。
num = 10
2. 创建一个字符串类型的变量,名为name,并将其赋值为"John"。
name = "John"
3. 定义一个布尔类型的变量,名为is_true,并将其赋值为True。
is_true = True
4. 定义一个浮点数类型的变量,名为price,并将其赋值为99.99。
price = 99.99
5. 创建一个变量,名为counter,并将其初始值设为0。然后通过递增操作将其值增加1。
counter = 0
counter += 1
6. 声明一个变量,名为my_var,并将其赋值为另一个变量的值(例如x = y)。
x = 8
my_var = x
7. Python中的变量命名规则是什么?
'''
2个要求: 是标识符;不是关键字
标识符-所有的名字必须由字母、数字或者下划线组成,并且数字不能开头。
3个规范: a.见名知义(看到变量名就大概知道这个变量中保存的是什么数据)
b.如果名字由多个单词组成,单词和单词之间用下划线隔开(也可以使用驼峰式命名)
c.不使用系统函数名(例如:print、input)、类名(int、float、str...)或者模块名
'''
2. 运算符
1. 编写一个程序,计算两个数的和、差、积和商。
a = 2
b = 3
sum1 = a + b
difference = a - b
product = a * b
quotient = a / b
2. 编写一个程序,计算一个圆的面积和周长。提示:使用半径和圆周率π(取3.14159)进行计算。
pi = 3.14159
r = 2
s = pi * r * r
c = 2 * pi * r
3. 编写一个程序,将摄氏温度转换为华氏温度。提示:使用华氏温度 = (摄氏温度 * 9/5) + 32 进行计算
temp = 35
F = (temp * 9 / 5) + 32
4.编写一个程序,判断一个数是否大于0并且小于10,并输出结果。
num1 = 8
print('num1是否大于0并且小于10:', 0 < num1 < 10)
5.编写一个程序,输入一个三位数的整数,将其个位、十位和百位数分别输出。
num2 = int(input('请输入一个整数:'))
print('num2的个位:', num2 % 10)
print('num2的十位:', num2 // 10 % 10)
print('num2的百位:', num2 // 100 % 10)
3. 分支结构
1.编写一个程序,输入一个整数,判断该数是正数、负数还是零,并输出相应的提示信息。
num3 = int(input('请输入一个整数:'))
if num3 == 0:
print('num3是0')
elif num3 > 0:
print(num3, '是一个正数')
else:
print(num3, '是一个负数')
2.编写一个程序,输入三个数,判断这三个数是否能构成一个三角形,并输出相应的提示信息。如果能构成三角形,则判断它是等边三角形、等腰三角形还是一般三角形。
print('请输入三个数:')
a = int(input())
b = int(input())
c = int(input())
if a + b > c and a + c > b and b + c > a:
print('这三个数能构成三角形')
if a == b and a == c and b == c:
print('该三角形是等边三角形')
elif a != b and a != c and b != c:
print('该三角形是一般三角形')
else:
print('该三角形是等腰三角形')
else:
print('这三个数不能构成三角形')
3.编写一个程序,输入一个三位数的整数,判断该数是否为水仙花数,并输出相应的提示信息。水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
num4 = int(input("请输入一个三位数的整数来判断是否为水仙花数:"))
ge = num4 % 10
shi = num4 // 10 % 10
bai = num4 // 100 % 10
if ge ** 3 + shi ** 3 + bai ** 3 == num4:
print('num4是水仙花数')
else:
print('num4不是水仙花数')
4.编写一个程序,输入一个年龄,判断该年龄属于儿童(0-12岁)、青少年(13-18岁)、成年人(19-60岁)还是老年人(60岁以上),并输出相应的提示信息。
year = int(input('请输入您的年龄:'))
if 0 < year <= 12:
print('您的年龄属于儿童(0-12岁)')
elif year <= 18:
print('您的年龄属于青少年(13-18岁)')
elif year <= 60:
print('您的年龄属于成年人(19-60岁)')
else:
print('您的年龄属于老年人(60岁以上)')
5.编写一个程序,输入一个月份,判断该月份属于哪个季节,并输出相应的提示信息。
month = int(input('请输入一个月份:'))
if 3 <= month <= 5:
print('您输入的月份属于春季')
elif 6 <= month <= 8:
print('您输入的月份属于夏季')
elif 9 <= month <= 11:
print('您输入的月份属于秋季')
else:
print('您输入的月份属于冬季')
4. 循环结构
1.编写一个程序,使用循环打印出1到10之间的所有整数。
for i in range(1, 11):
print(i)
2.编写一个程序,使用循环计算并输出1到100之间所有整数的和。
sum1 = 0
for j in range(1, 101):
sum1 += j
print(sum1)
3.编写一个程序,使用循环计算并输出1到100之间所有偶数的和。
sum2 = 0
for k in range(2, 101, 2):
sum2 += k
print(sum2)
4.编写一个程序,使用循环计算并输出1到100之间所有奇数的和。
sum3 = 0
for a in range(1, 101, 2):
sum3 += a
print(sum3)
5.编写一个程序,使用循环计算并输出1到100之间所有能被3整除的数的和。
sum4 = 0
for b in range(3, 101, 3):
sum4 += b
print(sum4)
6.编写一个程序,使用循环计算并输出1到100之间所有能被3整除且能被5整除的数的和。
sum5 = 0
for c in range(1, 101):
if c % 3 == 0 and c % 5 == 0:
sum5 += c
print(sum5)
7.编写一个程序,使用循环计算并输出10的阶乘。
ans = 1
for d in range(1, 11):
ans *= d
print(ans)
8.编写一个程序,使用循环计算并输出1到100之间所有数字的平方。
for e in range(1, 101):
print(e ** 2)
5.23 day04列表作业
1.编写一个程序,创建一个空列表,并向其中添加5个整数元素。
ls1 = []
for i in range(5):
ls1.append(i)
print(ls1)
2.编写一个程序,创建一个包含5个字符串的列表,并打印出列表中的每个元素。
movies = ['肖生克的救赎', '沉默的羔羊', '绿皮书', '霸王别姬', '战狼']
for i in movies:
print(i)
3.编写一个程序,创建一个包含10个整数的列表,并计算列表中所有元素的和。
ls = [90, 87, 61, 36, 45, 55, 66, 34, 88, 42]
print(sum(ls))
4.编写一个程序,创建一个包含10个整数的列表,并找出列表中的最大值和最小值。
ls = [90, 87, 61, 36, 45, 55, 66, 34, 88, 42]
print('max = ', max(ls))
print('min = ', min(ls))
5.编写一个程序,创建一个包含10个整数的列表,并计算列表中所有偶数元素的和。
ls = [90, 87, 61, 36, 45, 55, 66, 34, 88, 42]
sum1 = 0
for i in ls:
if i % 2 == 0:
sum1 += i
print(sum1)
6.编写一个程序,创建两个列表,分别包含5个整数,然后将这两个列表合并为一个新列表。
ls1 = [0, 1, 2, 3, 4]
ls2 = [5, 6, 7, 8, 9]
ls3 = ls1 + ls2
print(ls3)
7.编写一个程序,创建一个包含10个整数的列表,并移除列表中的所有偶数元素。
ls = [90, 87, 61, 36, 45, 55, 66, 34, 88, 42]
new_ls = [90, 87, 61, 36, 45, 55, 66, 34, 88, 42]
for i in ls:
if i % 2 == 0:
new_ls.remove(i)
print(new_ls)
8.编写一个程序,创建一个包含10个整数的列表,并计算列表中大于等于5的元素的个数。
ls = [0, 5, 1, 36, 45, 4, 66, 34, 88, 2]
count = 0
for i in ls:
if i >= 5:
count += 1
print(count)
9.编写一个程序,创建一个包含10个整数的列表,并计算列表中所有元素的平均值
ls = [90, 87, 61, 36, 45, 55, 66, 34, 88, 42]
print('average = ', sum(ls) / 10)
10.编写一个程序,创建一个包含10个整数的列表,并找出列表中的第一个负数
ls = [0, -5, 1, 36, -45, 4, 66, 34, -88, 2]
for i in ls:
if i < 0:
print('列表中的第一个负数:', i)
break
11.已经一个排好序的的列表(从小到到排序),编写程序提示用户输入一个数字,将输入的数字添加到列表中,要求添加以后列表仍然按照从小到大的方式排序
ls = [0, 1, 2, 4, 5, 34, 36, 45, 66, 88]
x = int(input('请输入一个数字:'))
for i in range(len(ls)):
if ls[i] >= x:
ls.insert(i, x)
break
elif x > ls[len(ls)-1]:
ls.append(x)
print(ls)
5.24 day05字典和字符串作业
1. 字典
1. 创建一个空字典
dict1 = {}
2. 创建一个包含3个键值对的字典
stu = {'name': '小明', 'age': 18, '性别': '男'}
print(stu)
3. 创建一个字典保存一个订单的数据,然后修改其中价格对应的键值对的值为100
order = {'name': '火鸡面', 'price': 3.5, 'count': 10, 'discount': 0.8}
order['price'] = 100 # 这里修改价格是有意而为之
print(order)
4. 统计列表中每个元素的个数,以字典的形式返回(键是元素,值是对应的元素的个数)
ls = [1, 2, 3, 4, 5, 1, 1, 2, 4, 6]
dic = {}
for i in ls:
dic.setdefault(i, 0)
dic[i] += 1
print(dic)
5. 定义一个列表,在列表中保存多个学生的信息(学生信息中包括:姓名、年龄、成绩(单科)、电话、性
别(男、女、不明) )
1)统计不及格学生的个数
2)打印不及格未成年学生的名字和对应的成绩
3)求所有男生的平均年龄
4)打印手机尾号是8的学生的名字
5)打印最高分和对应的学生的名字
6)删除性别不明的所有学生
students = [
{'name': 'stu1', 'age': 17, 'gender': '男', 'score': 54, 'tel': '122334'},
{'name': 'stu2', 'age': 28, 'gender': '女', 'score': 99, 'tel': '29838'},
{'name': 'stu3', 'age': 22, 'score': 65, 'tel': '22223'},
{'name': 'stu4', 'age': 22, 'gender': '男', 'score': 77, 'tel': '6544'},
{'name': 'stu5', 'age': 21, 'gender': '男', 'score': 46, 'tel': '664328'},
{'name': 'stu6', 'age': 16, 'gender': '女', 'score': 82, 'tel': '12278334'}
] # 性别‘不明’是不知道性别的意思
# 1)统计不及格学生的个数
count = 0
for stu in students:
if stu['score'] < 60:
count += 1
print(f'不及格学生的个数:{count}')
# 2)打印不及格未成年学生的名字和对应的成绩
for stu in students:
if stu['score'] < 60 and stu['age'] < 18:
print(f'名字:{stu["name"]} 分数:{stu["score"]}')
# 3)求所有男生的平均年龄
sum1 = 0
count1 = 0
for stu in students:
# 此处只能用.get()的方法,因为前面列表中某些字典没有'gender'这个键
if stu.get('gender') == '男':
sum1 += stu['age']
count1 += 1
print(f'所有男生的平均年龄:{sum1/count1}')
# 4)打印手机尾号是8的学生的名字
print('打印手机尾号是8的学生的名字:')
for stu in students:
if stu['tel'][-1] == '8':
print(stu['name'])
# 5)打印最高分和对应的学生的名字
# 方法1:
scores = []
for stu in students:
scores.append(stu['score'])
max_score = max(scores)
for stu in students:
if stu['score'] == max_score:
print('最高分 ', max_score, stu['name'])
# 方法2
max_score = 0
max_score_student = ""
for stu in students:
if stu['score'] > max_score:
max_score = stu['score']
max_score_student = stu['name']
elif stu['score'] == max_score:
max_score_student += stu['name']
print('最高分', max_score, max_score_student)
# 6)删除性别不明的所有学生
new_students = students
for stu in students:
if stu.get('gender') != None:
new_students.append(stu)
print(new_students)
2. 字符串
1.编写一个程序,创建一个字符串变量,并打印出该字符串的长度。
str1 = 'abcdefg'
print('字符串长度:', len(str1))
2.编写一个程序,创建一个字符串变量,并检查该字符串是否为空。
# 方法1:
str1 = ''
str2 = 'a'
print('字符串是否为空:', str1 == '')
print('字符串是否为空:', str2 == '')
# 方法2:
if str1:
print('非空字符串')
else:
print('空字符串')
3.编写一个程序,创建一个字符串变量,并打印出该字符串的第一个字符。
str1 = 'abcdefg'
print(str1[0])
4.编写一个程序,创建一个字符串变量,并打印出该字符串的最后一个字符。
str1 = 'abcdefg'
print(str1[-1])
5.编写一个程序,创建一个字符串变量,并打印出该字符串的倒序。
str1 = 'abcdefg'
for x in range(len(str1)-1,-1,-1):
print(str1[x])
6.编写一个程序,创建一个字符串变量,并检查该字符串是否以某个指定的子字符串开头。
str1 = 'abcdefg'
str2 = 'ab'
str3 = 'cd'
print(str2 == str1[0: len(str2)])
print(str3 == str1[0: len(str2)])
7.编写一个程序,创建一个字符串变量,并检查该字符串是否以某个指定的子字符串结尾。
str1 = 'abcdefg'
str2 = 'fg'
str3 = 'cd'
print(str2 == str1[-len(str2):])
print(str3 == str1[-len(str2):])
8.编写一个程序,创建一个字符串变量,并检查该字符串是否只包含字母字符。
str1 = 'abc1235你我'
str2 = 'abcdefg'
for i in str1:
if not ('a' <= i <= 'z' or 'A' <= i <= 'Z'):
print('该字符串不只包含字母字符')
break
else:
print('该字符串只包含字母字符')
5.28 excel.xlsx作业
将data2.xlsx文件中所有不及格的分数的值变成红色,补考变成绿色字体
import openpyxl
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment
# 读入工作簿中的工作表
wb = openpyxl.load_workbook('files/data2.xlsx')
sheet = wb['Sheet1']
# 创建字体对象
font1 = Font(
# green
color='006633',
size='14'
)
font2 = Font(
color='CC3333', # red
size='14'
)
max_r = sheet.max_row
max_c = sheet.max_column
# 遍历表格
for row in range(2, max_r + 1):
for col in range(2, max_c):
if sheet.cell(row, col).value == '补考':
sheet.cell(row, col).font = font1
elif sheet.cell(row, col).value < 60:
sheet.cell(row, col).font = font2
# 保存
wb.save('files/data2.xlsx')
5.29 excel.xls作业(颜色对照表)
import xlwt
# 准备工作表
wb = xlwt.Workbook()
sheet = wb.add_sheet('颜色对照表')
# 准备数据
dic = xlwt.Style.colour_map
ls = []
color = list(dic.keys())
num = list(dic.values())
ls.append(color)
ls.append(num)
header = ['颜色', '颜色单词', '颜色值']
m_r = len(color) + 1
m_c = len(header)
# 设置行高
for i in range(m_r):
sheet.row(i).height_mismatch = True
sheet.row(i).height = 10 * 60
# 设置列宽
for i in range(m_c):
sheet.col(i).width = 20 * 256
# 创建样式
style1 = xlwt.XFStyle() # 标题
style2 = xlwt.XFStyle() # 正文
style3 = xlwt.XFStyle() # 颜色块
# 设置字体
# 表头
font1 = xlwt.Font()
style1.font = font1
font1.name = '黑体'
font1.bold = True
font1.height = 18 * 18
# 正文
font2 = xlwt.Font()
style2.font = font2
font2.height = 15 * 15
# 设置边框
borders1 = xlwt.Borders()
style1.borders = borders1
style2.borders = borders1
style3.borders = borders1
borders1.top, borders1.top_colour = 2, 8
borders1.bottom, borders1.bottom_colour = 2, 8
borders1.left, borders1.left_colour = 2, 8
borders1.right, borders1.right_colour = 2, 8
# 设置对齐方式
alignment1 = xlwt.Alignment()
style1.alignment = alignment1
style2.alignment = alignment1
style3.alignment = alignment1
alignment1.vert = xlwt.Alignment.VERT_CENTER
alignment1.horz = xlwt.Alignment.HORZ_CENTER
for i in range(len(header)):
sheet.write(0, i, header[i], style=style1)
# 填入数据
# 方法1
for y in range(2):
col = y + 1
for x in range(len(color)):
row = x + 1
col_value = ls[y]
sheet.write(row, col, col_value[x], style2)
# # 方法2 + 填充
# row = 1
# for key in dic:
# # 获取每一行的颜色信息
# value = dic[key]
# # 填充
# pattern1 = xlwt.Pattern()
# style3.pattern = pattern1
# pattern1.pattern = xlwt.Pattern.SOLID_PATTERN
# pattern1.pattern_fore_colour = value
# # 将颜色数据写入单元格中
# sheet.write(row, 0, '', style=style3) # 填入第一列空值
# sheet.write(row, 1, key, style=style2) # 填入第二列颜色单词
# sheet.write(row, 2, value, style=style2) # 填入第三列颜色值
# # 设置行高,但是注意要单独设置第一行
# sheet.row(row).height_mismatch = True
# sheet.row(row).height = 10 * 60
#
# row += 1
for j in range(len(num)):
row = j + 1
# 填充背景颜色
pattern1 = xlwt.Pattern()
style3.pattern = pattern1
pattern1.pattern = xlwt.Pattern.SOLID_PATTERN
pattern1.pattern_fore_colour = num[j]
sheet.write(row, 0, style=style3)
wb.save('files/颜色.xls')
5.30 pyecharts制图作业
导入包
from pyecharts import options
from pyecharts.charts import Map
from pyecharts.charts import Pie
from pyecharts.charts import Bar
import openpyxl
作业1:
# 1. 使用地图显示前100名大学在各省份的分布情况
# 准备数据
wb = openpyxl.load_workbook('files/2020年中国大学排名.xlsx')
sheet = wb['Sheet1']
m_c = sheet.max_column
m_r = sheet.max_row
dic1 = {}
for row in range(2,m_r+1):
value = sheet.cell(row, 3).value
if value == '北京' or value == '重庆' or value == '上海' or value == '天津':
key = value +'市'
else:
key = value + '省'
dic1[key] = dic1.get(key, 0) + 1
print(dic1)
data = []
for i in dic1:
temp = (i, dic1[i])
data.append(temp)
print(data)
# 创建地图对象
map1 = Map()
# 添加数据
map1.add(
'大学数量',
data,
# 限制缩放比例
min_scale_limit=0.5,
max_scale_limit=3,
# 默认显示的缩放比例
zoom=1.6,
# 设置地图位置
pos_top=150
)
# 添加配置
map1.set_global_opts(
title_opts=options.TitleOpts(
title='中国前100名大学在各省份的分布情况',
pos_left='300'
),
legend_opts=options.LegendOpts(
is_show=False
),
# 添加视觉地图
visualmap_opts=options.VisualMapOpts(
is_show=True,
min_=0,
max_=20,
is_piecewise=True
)
)
# 制图
map1.render('charts/作业1-分布情况.html')
作业2:
# 2. 使用饼图显示前100名大学中各种类型学校的占比
# 准备数据
dic2 = {}
running_dic = {}
subject_dic = {}
resource_dic = {}
for row in range(2,m_r+1):
key = sheet.cell(row,4).value
dic2[key] = dic2.get(key,0) +1
running_dic[key] = running_dic.get(key,0) + sheet.cell(row,6).value
subject_dic[key] = subject_dic.get(key, 0) + sheet.cell(row, 7).value
resource_dic[key] = resource_dic.get(key, 0) + sheet.cell(row, 8).value
# 饼图各类型学校占比数据
data2 = []
for i in dic2:
temp = (i,dic2[i])
data2.append(temp)
# 创建饼图对象
pie1 = Pie()
# 添加数据
pie1.add('占比',
data2,
# 设置内圆半径和外圆半径
radius=(60, 150),
# 让外半径的大小和数据占比相关联
rosetype='radius'
)
# 添加配置
pie1.set_global_opts(
legend_opts=options.LegendOpts(
is_show=False
),
title_opts=options.TitleOpts(
title='中国前100名大学中各种类型学校的占比',
pos_left='280'
)
)
pie1.set_series_opts(
label_opts=options.LabelOpts(
# {b} - 名称
# {d} - 比例值
# 默认没有%存在,所以注意添加
formatter='{b}({d}%)'
)
)
# 制图
pie1.render('charts/作业2-类型占比.html')
作业3:
# 3. 使用柱状图显示不同类型学校的平均办学层次得分、平均学科水平得分、平均办学资源得分
# 准备数据
x_data = list(dic2.keys())
for i in running_dic:
running_dic[i] /= dic2[i]
running_dic[i] = round(running_dic[i], 2)
for i in subject_dic:
subject_dic[i] /= dic2[i]
subject_dic[i] = round(subject_dic[i], 2)
print(subject_dic[i])
for i in resource_dic:
resource_dic[i] /= dic2[i]
resource_dic[i] = round(resource_dic[i], 2)
print(resource_dic[i])
# 创建柱状图对象
bar = Bar()
# 添加数据
# x轴数据只能有一个,y轴可以有多个,但是y轴数据必须和x轴对应
# 添加x轴数据
bar.add_xaxis(x_data)
# 添加y轴数据
# 单独设置特殊标记点也在数据内部设置
bar.add_yaxis('平均办学层次得分',
list(running_dic.values()),
color='#c0ebd7',
# bar_width=60, # 柱子宽度(单独设置这一个数据宽度时可能会导致另一个柱子不显示)
# bar_max_width=60, # 缩放时柱子的最大、最小宽度
# bar_min_width=60,
)
bar.add_yaxis('平均学科水平得分',
list(subject_dic.values()),
color='#b0a4e3'
)
bar.add_yaxis('平均办学资源得分',
list(resource_dic.values())
)
# 添加配置
# 1)全局配置
bar.set_global_opts(
# a.标题配置
title_opts=options.TitleOpts(
# 设置标题内容和标题点击跳转的网址
title='不同类型学校的各项平均得分', # 主标题
# title_link='https://www.baidu.com',
# subtitle='办学层次得分、平均学科水平得分、平均办学资源分', # 副标题
# subtitle_link='https://www.taobao.com',
# 设置标题位置
pos_left='300',
# pos_right='260',
# 设置对齐方式
# text_align='center', # right,left,center
),
# b.图例配置
legend_opts=options.LegendOpts(
is_show=True, # 图例展示/隐藏
pos_right=100, # 图例位置
pos_top=30,
item_width=10 # 图例大小
),
# c.x轴和y轴的配置
xaxis_opts=options.AxisOpts(
name='学校类型'
),
yaxis_opts=options.AxisOpts(
name='得分',
# 设置起始最小值、最大值
min_=0,
max_=35,
),
# d.添加数据缩放工具(数据多,柱子挤的时候用)
datazoom_opts=options.DataZoomOpts(
is_show=True, # 默认显示中间部分
# 更改默认的显示部分
range_start=0,
range_end=50
)
)
# 2)系列配置(针对图上的内容)
bar.set_series_opts(
# a.设置数据标记
label_opts=options.LabelOpts(
is_show=False, # 柱状图上的数字是否显示
),
# b.标记点(标记特殊点)
markpoint_opts=options.MarkPointOpts(
data=[
# 注意数据的类型
options.MarkPointItem(name='最大值',
type_='max',
# itemstyle_opts=options.ItemStyleOpts(border_color='#000000')
),
# options.MarkPointItem(name='最小值',type_='min')
]
),
markline_opts=options.MarkLineOpts(
data=[
options.MarkLineItem(name='平均值', type_='average')
]
)
)
bar.set_series_opts(
# 特殊标记点
markline_opts=options.MarkLineOpts(
data=[
# type_的值:max,min,average
options.MarkLineItem(name='平均值',type_='average')
]
)
)
# 制图
bar.render('charts/作业3-平均得分.html')
6.19 运算符作业
1. 编写程序提示⽤户输⼊两个整数,并且打印它们的乘积、和、差、商和余数。
a = int(input('请输入第一个整数:'))
b = int(input('请输入第二个整数:'))
print('积:', a * b)
print('和:', a + b)
print('差:', a - b)
print('商:', a / b)
print('余数:', a % b)
2. 以下代码会输出什么? 6.0
x = 5
x += 3
x *= 2
x -= 4
x /= 2
print(x)
3. 提示⽤户输⼊⼀个正整数,判断这个数的个位数和⼗位数是否相等
num = int(input('请输入一个正整数:'))
ge = num % 10
shi = num % 100 // 10
print(num, '的个位数和十位数是否相等:', ge == shi)
4. 提示⽤户输⼊三个数字:num、start、end。写程序判断num是否在start和end之间。
num = float(input('请输入num数字:'))
start = float(input('请输入start数字:'))
end = float(input('请输入end数字:'))
print('num是否在start和end之间:', start < num < end or end < num < start)
5. 提示⽤户输⼊三⻆形的三个边的值,判断这三个值是否能够构成⼀个三⻆形(即任意两边之和⼤于第三边)
a = float(input('请输入第一条边:'))
b = float(input('请输入第二条边:'))
c = float(input('请输入第三条边:'))
print('这三个值是否能够构成⼀个三⻆形:', a + b > c and a + c > b and b + c > a)
6. 提示⽤户输⼊华⽒温度值,然后写程序将华⽒温度转换成摄⽒温度(C = 5×(F- 32)/9)
F = float(input('请输入华氏温度:'))
print('摄氏温度为:', 5*(F - 32)/9)
7. 提示⽤户输⼊⼀个整数,写出判断这个整数是否是⼀个三位数的条件
num = int(input('请输入一个整数:'))
print('这个整数是否是⼀个三位数:', 100 <= num <= 999 or -999 <= num <= -100)
8. 提示⽤户输⼊身⾼(m)和体重(kg),写出判断这个⼈的身材是否正常。(标准身材:体重/(身⾼的平⽅)在18.5到24.9之间算正常)
height = float(input('请输入身高(m):'))
weight = float(input('请输入体重(kg):'))
print('这个⼈的身材是否正常:', 18.5 < weight / height ** 2 < 24.9)
9. 假设上课时间为23589秒,将上课时间转换成"x时x分x秒"的时间格式
t = 23589
hour = t // 3600
minute = t % 3600 // 60
second = t % 60
print(f"上课时间为{hour}时{minute}分{second}秒")
6.20 分支和循环作业
1. 基础题
1.判断一个数是否为水仙花数。
num = int(input('请输入一个三位正整数:'))
ge = num % 10
shi = num // 10 % 10
bai = num // 100
if ge**3+shi**3+bai**3 == num:
print(f'num {num} 是一个水仙花数')
else:
print(f'num {num} 不是一个水仙花数')
2.输入一个整数,判断其正负
num = int(input('请输入一个整数:'))
if num > 0:
print('正数')
elif num == 0:
print("0 既不是正数,也不是负数")
else:
print('负数')
3.输入一个年份,判断是否为闰年
year = int(input('请输入一个年份:'))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print(year, '是闰年')
else:
print(year, '不是闰年')
4.输入一个月份,判断其季节(春夏秋冬)
month = int(input('请输入一个月份:'))
if month == 3 or month == 4 or month == 5:
print(month, '月是春季')
elif month == 6 or month == 7 or month == 8:
print(month, '月是夏季')
elif month == 9 or month == 10 or month == 11:
print(month, '月是秋季')
elif month == 12 or month == 1 or month == 2:
print(month, '月是冬季')
5.输入一个年龄,判断其属于哪个年龄段(儿童、青少年、成年人、老年人)。
year = int(input('请输入您的年龄:'))
if 0 < year <= 12:
print('您的年龄属于儿童(0-12岁)')
elif year <= 18:
print('您的年龄属于青少年(13-18岁)')
elif year <= 60:
print('您的年龄属于成年人(19-60岁)')
else:
print('您的年龄属于老年人(60岁以上)')
6.打印1到10的数字。
for i in range(1, 11):
print(i)
7.计算1到100的和
sum1 = 0
for i in range(101):
sum1 += i
print(sum1)
8.打印1到100的所有偶数
for i in range(2, 101, 2):
print(i)
9.计算1到100的平方和
sum1 = 0
for i in range(101):
sum1 += i ** 2
print(sum1)
10.打印所有的水仙花数
for num in range(100, 1000):
ge = num % 10
shi = num // 10 % 10
bai = num // 100
if ge**3+shi**3+bai**3 == num:
print(num)
# 153 370 371 407
11.提供任意一个数字列表,判断其中是否有负数
# 方法1
ls1 = [1, -2, 3, 23, 45, -89, 19, 0, 5]
for i in ls1:
if i < 0:
print('该数字列表有负数')
break
else:
print('该数字列表没有负数')
# 方法2
ls1 = [1, -2, 3, 23, 45, -89, 19, 0, 5]
count = 0
for i in ls1:
if i < 0:
count += 1
if count:
print('该数字列表有负数')
else:
print('该数字列表没有负数')
2. 进阶题
1.判断一个数是否为质数。
# 方法1
num = int(input('请输入一个自然数:'))
if num <= 1:
print(num, 'num既不是质数,也不是合数')
elif num <= 3:
print('num是质数')
else:
for i in range(2, int(num ** 0.5)+1):
if num % i == 0:
print('num不是质数')
break
else:
print('num是质数')
# 方法2
num = int(input('请输入一个自然数:'))
count = 0
for i in range(2, int(num ** 0.5)+1):
if num % i == 0:
count += 1
if count == 0:
print('num是质数')
else:
print('num不是质数')
2.打印斐波那契数列的前20个数字
# 0, 1, 1, 2,3,5,8,13,21,34,55,89……
# temp front now
# temp front now
front = 1
temp = 0
for i in range(20):
print(front)
now = front+temp
temp = front
front = now
3.打印1到100的所有质数
for num in range(2, 101):
if 1 < num <= 3:
print(num)
else:
for i in range(2, num):
if num % i == 0:
break
else:
print(num)
4.计算1到100的阶乘和
ans = 1
sum1 = 0
for i in range(1, 101):
ans *= i
sum1 += ans
print(sum1)
5.计算1到100的所有质数的乘积
ans = 1
for num in range(2, 101):
if 1 < num <= 3:
print(num)
ans *= num
else:
for i in range(2, num):
if num % i == 0:
break
else:
ans *= num
print(num)
print(ans)
6.打印九九乘法表
for i in range(1, 10):
for j in range(1, i+1):
print(f'{j}*{i}={i*j}\t', end=' ')
print()
6.21 循环练习题
1. 基础题
1. 编写一个程序,输入一个年份和一个月份,输出该月份的天数。考虑闰年的情况。
year = int(input('请输入一个年份:'))
month = int(input('请输入一个月份:'))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
if month == 2:
print('29天')
else:
if month == 2:
print('28天')
if month in [1, 3, 5, 7, 8, 10, 12]:
print('31天')
elif month in [4, 6, 9, 11]:
print('30天')
2.使用循环计算并输出1到100之间所有能被3整除的数的和。
sum1 = 0
for i in range(3, 100, 3):
sum1 += i
print(sum1)
3.编写一个程序,输入三个数,判断这三个数是否能构成一个三角形,并输出相应的提示信息
side1 = float(input('请输入第1条边:'))
side2 = float(input('请输入第2条边:'))
side3 = float(input('请输入第3条边:'))
if side1 + side2 > side3 and side1 + side3 > side2 and side2 + side3 > side1:
print('这三个数能构成三角形')
else:
print('这三个数不能构成三角形')
4.编写一个程序,输入三个数,判断它们是否能构成一个等腰三角形,并输出相应的提示信息。
side1 = float(input('请输入第1条边:'))
side2 = float(input('请输入第2条边:'))
side3 = float(input('请输入第3条边:'))
if side1 + side2 > side3 and side1 + side3 > side2 and side2 + side3 > side1:
if side1 == side2 == side3:
print('这三个数不能构成一个等腰三角形')
elif side1 == side2 or side1 == side3 or side2 == side3:
print('这三个数能构成一个等腰三角形')
else:
print('这三个数不能构成一个等腰三角形')
else:
print('这三个数不能构成一个三角形')
5.编写一个if语句,判断一个变量是否为数字数据,如果是,则打印"是数字”;否则,打印"不是数字”
value = 4
if type(value) == int:
print('是数字')
else:
print('不是数字')
6.编写一个程序,使用for和while循环计算并输出1到100之间所有奇数的和。
# for循环:
ans1 = 0
ans2 = 0
for i in range(1, 100, 2):
ans1 += i
print(ans1)
# while循环
x = 1
while x <= 100:
if x % 2 != 0:
ans2 += x
x += 1
print(ans2)
7.编写一个程序,使用for和while循环计算并输出1到100之间所有能被3整除且能被5整除的数的和。
# for循环:
ans1 = 0
ans2 = 0
for i in range(15, 100, 15):
ans1 += i
print(ans1)
# while循环
x = 1
while x <= 100:
if x % 3 == 0 and x % 5 == 0:
ans2 += x
x += 1
print(ans2)
8.编写一个程序,使用循环打印出以下图形
n = int(input('请输入你想要打印的行数:'))
for i in range(1, n + 1):
print("*" * i)
9.编写程序判断num对应的整数是否是素数(使用for-else结构)
num = int(input('请输入一个整数:'))
if num < 2:
print('num不是素数')
else:
for i in range(2, num):
if num % i == 0:
print('num不是素数')
break
else:
print('num是素数')
10.统计100以内个位数是2并且能够被3整除的数的个数
count = 0
for i in range(2,100):
if i % 10 == 2 and i % 3 == 0:
count += 1
print(count)
11. 提示用户输入一个整数,写程序判断这个数是一个几位数。
value = input('请输入一个整数:')
count = 0
for i in value:
count += 1
if int(value) < 0:
count -= 1
print(f'这个数是 {count} 位数')
2. 进阶题
1.编写一个程序,使用循环打印出以下图形:
n = int(input('请输入你需要打印图形的行数:'))
for i in range(n, 0, -1):
print("*" * i)
2. 编写一个程序,输入一个年、月、日三个日期信息,计算该日期是该年的第几天
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
day = int(input('请输入天数:'))
num_day = 0
if year % 400 == 0:
for i in range(1, month):
if i in [1, 3, 5, 7, 8, 10, 12]:
num_day += 31
elif i == 2:
num_day += 29
else:
num_day += 30
elif year % 4 == 0 and year % 100 != 0:
for i in range(1, month):
if i in [1, 3, 5, 7, 8, 10, 12]:
num_day += 31
elif i == 2:
num_day += 28
else:
num_day += 30
num_day += day
print(num_day)
3.编写一个程序,使用循环打印出以下图形:
n = int(input('请输入你想打印图形的行数:'))
num = 1
space = n - 1
for i in range(n):
print(' ' * space, end='')
print('*' * num)
num += 2
space -= 1
6.22-6.23 周末循环练习
1. 判断101-200之间有多少个素数,并输出所有素数。
count = 0
for num in range(101, 201):
for i in range(2, num):
if num % i == 0:
break
else:
print(num, end=' ')
count += 1
print(f'\n101-200之间共有 {count} 个素数')
2. 求整数1~100的累加值,但要求跳过所有个位为3的数。
ans = 0
for num in range(1, 101):
if num % 10 != 3:
ans += num
print(ans)
3. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的第20个分数
fen_mu = 1
fen_zi = 2
for i in range(1, 20):
temp = fen_zi
fen_zi += fen_mu
fen_mu = temp
print(f'{fen_zi}/{fen_mu}') # 17711/10946
4. 写程序计算 n 的阶乘 n! 的结果
n = int(input('请输入需要计算阶乘的n值:'))
ans = 1
for i in range(1, n + 1):
ans *= i
print(ans)
5. 求1+2!+3!+...+20!的和
sum1 = 0
ans = 1
for i in range(1, 21):
ans *= i
sum1 += ans
print(sum1)
6. 写程序求表达式 a + aa + aaa + aaaa+ ... 的结果,其中a是1~9的数字,求和的项数⽤n来控制。(a和n可以⽤变量来表示)
例如: a 为 3 , n 为 5 的时候: 3 + 33 + 333 + 3333 + 33333
# 方法1:
a = int(input('请输入一个数字(1~9):'))
n = int(input('请输入求和项数n:'))
value = 0
for i in range(1, n+1):
ans = 0
for j in range(i):
value += a * 10**j
print(value)
# 方法2:
a = int(input('请输入一个数字(1~9):'))
n = int(input('请输入求和项数n:'))
value = 0
for i in range(1, n+1):
ans = 0
for j in range(i):
temp = a * 10**j
ans += temp
# print(ans)
value += ans
print(value)
7. 控制台输出三⻆形
# a:
n = int(input('请输入n的值:'))
for i in range(n, 0, -1):
print(i * '*')
# b:
n = int(input('请输入n的值(奇数):'))
space = (n - 1) // 2
for i in range(1, n + 1, 2):
print(" " * space, end='')
space -= 1
print("*" * i)
# c:
n = int(input('请输入n的值:'))
space = n - 1
for i in range(1, n + 1):
print(" " * space, end="")
space -= 1
for j in range(1, i):
print(j, end="")
for k in range(i, 0, -1):
print(k, end="")
print()
8. ⼩明单位发了100元的购物卡,⼩明到超市买三类洗化⽤品,洗发⽔(15元),⾹皂(2元),⽛刷(5元)。要把100元正好花掉,可有哪些购买结合?
count = 0
v_shampoo, v_soap, v_brush = 15, 2, 5
# 洗发水
for num_shampoo in range(100 // 15 + 1):
area1 = 100 - num_shampoo * v_shampoo
# 牙刷
for num_brush in range(area1 // v_brush + 1):
area2 = area1 - num_brush * v_brush
# 香皂
for num_soap in range(area2 // v_soap + 1):
if v_shampoo * num_shampoo + v_soap * num_soap + v_brush * num_brush == 100:
print(f'洗发水:{num_shampoo},牙刷:{num_brush},香皂:{num_soap}')
count += 1
print(f'总共有{count}种购买组合') # 44
9. ⼀张纸的厚度⼤约是0.08mm,对折多少次之后能达到珠穆朗玛峰的⾼度(8848.13⽶)?
h_peak = 8848.13*1000
n = 1
while True:
if 0.08*2**n >= h_peak:
print(f'需要对折{n}次')
break
n += 1
10. 古典问题:有⼀对兔⼦,从出⽣后第3个⽉起每个⽉都⽣⼀对兔⼦,⼩兔⼦⻓到第三个⽉后每个⽉⼜⽣⼀对兔⼦,假如兔⼦都不死,问(前20个)每个⽉的兔⼦总数为多少?
f1 = 0
f2 = 2
for i in range(1, 21):
print(f'第{i}个月的兔子总数为:{f2}')
value = f1 + f2
f1 = f2
f2 = value
11. 将⼀个正整数分解质因数。例如:输⼊90,打印出90=2x3x3x5。
12. 某个公司采⽤公⽤电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后⽤和除以10的余数代替该数字,再将第⼀位和第四位交换,第⼆位和第三位交换。求输⼊的四位整数加密后的值
num = input('请输入四位整数:')
one = (int(num[0]) + 5) % 10
two = (int(num[1]) + 5) % 10
three = (int(num[2]) + 5) % 10
four = (int(num[3]) + 5) % 10
one, four = four, one
two, three = three, two
print(one, two, three, four)
13. 将⼀个正整数分解质因数。例如:输⼊90,打印出90=2x3x3x5。
14. 本⾦10000元存⼊银⾏,年利率是千分之三。每过1年,将本⾦和利息相加作为新的本⾦。计算5年后,获得的本⾦是多少。
money = 10000
rate = 0.003
for i in range(5):
money += money * rate
print(money)
15. 输⼊⼀个整数,计算它各位上数字的和。(注意:输⼊的整数可以是任意位)
money = 10000
rate = 0.003
for i in range(5):
money += money * rate
print(money)
16. 求两个数的最⼤公约数和最⼩公倍数。(提示:公约数⼀定⼩于等于两数中的⼩的那个数,且能同时被两个数整除;公倍数⼀定⼤于等于两数中的⼤数,且是⼤数的倍数⼜能被两数中的⼩数整除)
# 两个数的乘积 = 最大公约数 * 最小公倍数
a = int(input('请输入第一个数:'))
b = int(input('请输入第二个数:'))
max_value = max(a, b)
min_value = min(a, b)
max_division = 1
# 公约数方法一:暴力求解
for i in range(min_value, 0, -1):
if a % i == 0 and b % i == 0:
max_division = i
break
print('最大公约数', max_division)
# 公约数方法二:更相减损法
# max_division = max_value - min_value
# while 1:
# if max_division == min_value:
# break
# if max_division < min_value:
# max_division, min_value = min_value, max_division
# max_division -= min_value
# print('最大公约数', max_division)
print('最大公约数', a * b // max_division)