一、问答题
(1)怎样生成一个满足条件10 ≤ i ≤ 50的随机整数?
在 Python 中,可以使用
random
模块来生成满足条件的随机整数。示例代码如下:
import random
random_number = random.randint(10, 50)
print(random_number)
random.randint(a, b)
函数会返回一个在a
(包含)到b
(包含)之间的随机整数。
(2)如果number分别是30和35,那么a中的代码和b中的代码的输出结果是什么?
# 代码a
if number % 2 == 0:
print(number,"is even.")
print(number,"is odd.")
# 代码b
if number % 2 == 0:
print(number,"is even.")
else
print(number,"is odd.")
- 代码 a:
- 当
number = 30
时,输出30 is even.
后继续输出30 is odd.
。- 当
number = 35
时,输出35 is odd.
。- 代码 b:
- 当
number = 30
时,输出30 is even.
。- 当
number = 35
时,输出35 is odd.
(3)如果是下面的代码中,假设x=3而且y=2,显示它的结果。如果x=3而且y=4,那么结果是什么?如果x=2而且y=2,那么结果是什么?请为这段代码绘制一个流程图。
if x > 2:
if y > 2:
z = x+y
print("z is”,z)
else:
print("x is",x)
x=3,y=2时,结果:x is 3
x=3,y=4时,结果:z is 7
x=2,y=2时,无结果。
流程图:
(4)下面的代码错在哪里?
if score >= 60.0:
grade='D'
elif score >= 70.0:
grade ='C'
elif score >= 80.0:
grade ='B'
elif score >= 90.0:
grade = 'A'
else:
grade ='F'
如果成绩为98,会直接进入if>60,grade =D。应从高分到低分进行判断。
(5)下面的代码有哪些错误?
# 代码A
if i > 0:
x = 0
y = 1
else:
y = 0
z = 0
# 代码B
if i > 0:
x = 0
y = 1
else:
y = 0
z = 0
# 代码C
if i > 0:
x = 0
y = 1
else:
y = 0
z = 0
# 代码D
if i > 0:
x = 0
y = 1
else:
y = 0
z = 0
代码B、C、D都存在 Python 语法的缩进问题
(6)如果number分别为14、15和30,那么下面代码的结果是什么?
# 代码A
if number % 2 == 0:
print(number,"is even")
if number % 5 == 0:
print(number,"is multiple of 5”)
# 代码B
if number % 2 == 0:
print(number,"is even")
elif number % 5 == 0:
print(number,"is multiple of 5”)
代码 A :
- 当 number 为 14 时
14 % 2 == 0
条件成立,会输出14 is even
。14 % 5 != 0
,不会输出14 is multiple of 5
。- 当number 为 15 时:
15 % 2 != 0
,不会输出15 is even
。15 % 5 == 0
,会输出15 is multiple of 5
。- 当 number 为 30 时:
30 % 2 == 0
,会输出30 is even
。30 % 5 == 0
,会输出30 is multiple of 5
。代码 B:
- 当 number 为 14 时:
14 % 2 == 0
条件成立,会输出14 is even
,后面的elif
条件不会再判断。- 当 number 为15时:
15 % 2 != 0
,继续判断elif
条件,15 % 5 == 0
成立,会输出15 is multiple of 5
。- 当 number 为 30 时:
30 % 2 == 0
条件成立,会输出30 is even
,后面的elif
条件不会再判断。
(7)下面两条语句相同吗?
# 代码A
if income <= 10000:
tax = income * 0.1
elif income <= 20000:
tax = 1000 + \
(income - 10000) * 0.15
# 代码B
if income <= 10000:
tax = income * 0.1
elif income > 10000 and income <= 20000:
tax = 1000 + \
(income -10000) * 0.15
代码 A 和代码 B 的功能是相同的。
代码 A 中,第一个
if
判断income <= 10000
,满足时计算tax
;不满足则进入elif
,判断income <= 20000
,默认是大于 10000的。
(8)下面的代码错在哪里?
income = 232323
if income <= 10000:
tax = income *0.1
elif income > 10000 and income <= 20000:
tax = 1000 + (income - 10000) * 0.15
print(tax)
当
income > 20000时
,会直接执行print(tax)
,但没有给tax
赋值,会直接报错。
(9)假设 x=1,显示下面布尔表达式的结果。
True and (3 > 4)
not (x > 0) and (x > 0)
(x > 0) or (x < 0)
(x != 0) or (x == 0)
(x >= 0) or (x < 0)
(x != 1) == not (x == 1)
False、False、True、True、True、True
(10)假设 x=4,y=5,显示下面的布尔表达式的结果。
x >= y >= 0
x <= y >= 0
x != y == 5
(x != 0) or (x == 0)
False、True、True、True
(11)下面的表达式是否等价?
(x >= 1) and (x < 10)
(1 <= x < 10)
等价。都表示 x >= 1 并且 x < 10
(12)假设当你运行下面的程序,从控制台输入 2,3,6 那么输出结果是什么?
x, y, z = eval(input("Enter three numbers:"))
print("(x < y and y < z) is",x < y and y < z)
print("(x < y or y < z) is",x < y or y < z)
print("not(x < y) is",not(x < y))
print("(x < y < z) is",x < y < z)
print("not(x < y < z) is",not(x < y < z))
输出的结果为:
(x < y and y < z) is True
(x < y or y < z) is True
not(x < y) is False
(x < y < z) is True
not(x < y < z) is False
(13)假设你在运行下列程序时,从控制台输入2、3、6。结果是什么?
x, y, z = eval(input("Enter three numbers:"))
print("sorted" if x < y and y < z else "not sorted')
当输入2、3、6时,x = 2,y = 3,z = 6,x < y 成立,y < z 成立,x < y and y < z 成立,所以输出sorted。
(14)使用if-else语句改写下面的条件表达式。
score = 3 * scale if x > 10 else 4 * scale
tax = income * 0.2 if income > 10000 else income * 0.17 + 1000
print(i if number % 3 == 0 else j)
改写的代码为:
if x > 10:
score = 3 * scale
else:
score = 4 * scale
if income > 10000:
tax = income * 0.2
else:
tax = income * 0.17 + 1000
if number % 3 == 0:
print(i)
else:
print(j)
(15)计算下面的表达式
2 * 2 - 3 > 2 and 4 - 2 > 5
2 * 2 - 3 > 2 or 4 - 2 > 5
False、False
二、编程题
(16)解2×2线程方程
题目描述
如有一个2×2的线程方程组:
a
x
+
b
y
=
e
c
x
+
d
y
=
f
ax+by=e \\ cx+dy=f
ax+by=ecx+dy=f
你可以使用克莱姆法则解该线性方程:
x
=
e
d
−
b
f
a
d
−
b
c
,
y
=
a
f
−
e
c
a
d
−
b
c
x=\frac{ed-bf}{ad-bc},y=\frac{af-ec}{ad-bc}
x=ad−bced−bf,y=ad−bcaf−ec
其中
a
d
−
b
c
ad-bc
ad−bc 为判别式,如果为零则输出无解
输入输出描述
输入a、b、c、d、e、f六个数据,数据之间用空格分隔
输出两行,第一行x的解,第二行y的解,保留一位小数
示例1
输入:
9.0 4.0 3.0 -5.0 -6.0 -21.0
输出:
-2.0
3.0
示例2
输入:
1.0 2.0 2.0 4.0 4.0 5.0
输出:
无解
#输入六个数据
a, b, c, d, e, f =map(float,input().split(" "))
#如果判别式为0输出误解
if a * d - b * c == 0:
print("无解")
#不为0根据公式计算xy
else:
x = (e * d - b * f) / (a * d - b * c)
y = (a * f - e * c) / (a * d - b * c)
#输出x y
print(f"{x:.1f}")
print(f"{y:.1f}")
(17)未来是周几
题目描述
输入表示今天是一周内哪一天的数字(星期天是0,星期一是1,…,星期六是6)
并输入今天之后到未来某天的天数,然后输出该天是星期几
输入输出描述
输入两个数据,分别表示今日星期几的数字和未来某天的天数,数据之间用空格分隔
输出未来某天是星期几
示例1
输入:
1 3
输出:
星期四
示例2
输入:
0 31
输出:
星期三
#输入代表今天的数字 、 几天后
today, future = map(int, input().split(" "))
#计算未来那天是星期几
xq = (today + future) % 7
#输出
if xq == 0:
print("星期日")
elif xq == 1:
print("星期一")
elif xq == 2:
print("星期二")
elif xq == 3:
print("星期三")
elif xq == 4:
print("星期四")
elif xq == 5:
print("星期五")
else:
print("星期六")
(18)三角形的周长
题目描述
输入三角形三边的长度,如果输入合法则计算周长并输出结果;否则输出非法
如果任意两边之和大于第三边则输入都是合法的
输入输出描述
输入三个数据表示三边,数据之间用空格分隔
输出三角形的周长,如果非法则输出非法
示例1
输入:
1 1 1
输出:
3
示例2
输入:
1 3 1
输出:
非法
#1.输入三边abc
a, b, c = map(int,input().split(" "))
#2.如果两边长大于第三边则合法
if a + b > c and b + c > a and a + c > b:
#3.计算周长并输出
round = a + b + c
print(round)
#小于第三边输出非法
else:
print("非法")
(19)一周的星期几【录屏讲解】
**视频链接:**https://meeting.tencent.com/crm/l5nXmwkpfb超链接
题目描述
泽勒的一致性是一个由泽勒开发的算法,用于计算一周的星期几,公式如下:
h
=
(
q
+
⌊
26
(
m
+
1
)
10
⌋
+
k
+
⌊
k
4
⌋
+
⌊
j
4
⌋
+
5
j
)
%
7
h=(q+\lfloor\frac{26(m+1)}{10}\rfloor+k+\lfloor\frac{k}{4}\rfloor+\lfloor\frac{j}{4}\rfloor+5j) \% 7
h=(q+⌊1026(m+1)⌋+k+⌊4k⌋+⌊4j⌋+5j)%7
(1)
h
h
h是指一周的星期几(0表示星期六、1表示星期天、…、6表示星期五)
(2) q q q是一个月的哪一天
(3) m m m是月份(3表示三月、4表示四月、…、12表示十二月),其中一月和二月都是按照前一年的13月和14月来计数的,所以还得把年份改为前一年
(4) j j j是世纪数,即 ⌊ y e a r 100 ⌋ \lfloor\frac{year}{100}\rfloor ⌊100year⌋
(5) k k k是一个世纪的某一年,即 y e a r % 100 year \% 100 year%100
(6) ⌊ ⌋ \lfloor\rfloor ⌊⌋为向下取整符号
输入输出描述
输入年、月、日三个数据,数据之间用空格分隔
输出该日是周几
示例1
输入:
2013 1 25
输出:
星期五
示例2
输入:
2012 5 12
输出:
星期六
#输入
y, m, d = map(int,input().split(" "))
#计算对应数字 (3~12) (1、2)
if m == 1 or m == 2:
m += 12
y -= 1
k = y % 100
j = y // 100
h = (d +(26 *(m + 1) // 10) + k + (k // 4) +(j // 4) + 5 * j ) % 7
#转换数字输出
if h == 0:
zhou = "六"
elif h == 1:
zhou = "天"
elif h == 2:
zhou = "一"
elif h == 3:
zhou = "二"
elif h == 4:
zhou = "三"
elif h == 5:
zhou = "四"
else:
zhou = "五"
print("星期"+zhou)
(20) 直线的交点【录屏讲解】
**视频链接:**https://meeting.tencent.com/crm/NQ4DRVqyb6超链接
题目描述
直线A上的两个点是 ( x 1 , y 1 ) (x1,y1) (x1,y1)和 ( x 2 , y 2 ) (x2,y2) (x2,y2),直线B上的两个点是 ( x 3 , y 3 ) (x3,y3) (x3,y3)和 ( x 4 , y 4 ) (x4,y4) (x4,y4)

如果两条直线有交点,可以通过解下面的线性等式找出:
(
y
1
−
y
2
)
x
−
(
x
1
−
x
2
)
y
=
(
y
1
−
y
2
)
x
1
−
(
x
1
−
x
2
)
y
1
(
y
3
−
y
4
)
x
−
(
x
3
−
x
4
)
y
=
(
y
3
−
y
4
)
x
3
−
(
x
3
−
x
4
)
y
3
(y_1-y_2)x-(x_1-x_2)y=(y_1-y_2)x_1-(x_1-x_2)y_1 \\ (y_3-y_4)x-(x_3-x_4)y=(y_3-y_4)x_3-(x_3-x_4)y_3
(y1−y2)x−(x1−x2)y=(y1−y2)x1−(x1−x2)y1(y3−y4)x−(x3−x4)y=(y3−y4)x3−(x3−x4)y3
如果没有解,则表示两条直线平行
输入输出描述
输入八个数据,分别为x1 y1 x2 y2 x3 y3 x4 y4,数据之间用空格分隔
如有交点则输出交点的坐标x y,否则输出两条直线平行
示例1
输入:
2 2 5 -1 4 2 -1 -2
输出:
2.89 1.11
示例2
输入:
2 2 7 6 4 2 -1 -2
输出:
两条直线平行
#输入
x1, y1, x2, y2, x3, y3, x4, y4 = map(float,input().split(" "))
#计算斜率
k1 = (y2 - y1) / (x2 - x1)
k2 = (y4 - y3) / (x4 - x3)
#平行关系 输出平行
if k1 == k2:
print("两条直线平行")
#相交 计算交点
else:
a = y1 - y2
b = x1 - x2
c = y3 - y4
d = x3 - x4
x = (a * d * x1 - b * d * y1 - b * c * x3 + b * d * y3) / (a * d - b * c )
y = (a * c * x1 - b * c * y1 - a * c * x3 + a * d * y3) / (a * d - b * c )
print(f'{x:.2f} {y:.2f}')
(21)两个矩形【录屏讲解】
**视频链接:**https://meeting.tencent.com/crm/ld1gRDj4f0超链接
题目描述
判断两个矩形之间的关系:包含,重叠,相离
输入输出描述
输入两行,每行四个数据,分别是矩形的中心坐标x、y和矩形的宽、高
输出两者的关系
示例1
输入:
2.5 4 2.5 43
1.5 5 0.5 3
输出:
包含
示例2
输入:
1 2 3 5.5
3 4 4.5 5
输出:
重叠
示例3
输入:
1 2 3 3
40 45 3 2
输出:
相离
#输入
x1, y1, w1, h1 = map(float,input().split(" "))
x2, y2, w2, h2 = map(float,input().split(" "))
#计算矩形间横纵距离
heng = abs(x1 - x2)
zong = abs(y1 - y2)
#判断关系
if heng <= (w1 - w2) / 2 and zong <= (h1 - h2) / 2:
print("包含")
elif heng < (w1 + w2) / 2 and zong <( h1 + h2) / 2:
print("重叠")
else:
print("相离")