Python 编程基础:条件判断及常见算法实战解析

一、问答题

(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时,无结果。

流程图:

判断x > 2?
判断y > 2?
计算z = x + y
z is
结束
x is

(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=adbcedbf,y=adbcafec
其中 a d − b c ad-bc adbc 为判别式,如果为零则输出无解

输入输出描述

输入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)

image-20250314093527261

如果两条直线有交点,可以通过解下面的线性等式找出:
( 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 (y1y2)x(x1x2)y=(y1y2)x1(x1x2)y1(y3y4)x(x3x4)y=(y3y4)x3(x3x4)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超链接

题目描述

判断两个矩形之间的关系:包含,重叠,相离

image-20250314093616278

输入输出描述

输入两行,每行四个数据,分别是矩形的中心坐标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("相离")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值