数据类型-数字知识点

# 浮点数里面的无穷大 无穷小以及 不是数字

# 无穷大 inf
a = float('inf')
b = float('inf')
c = float('nan')
print("正无穷:",a)
# 无穷小 -inf
print("负无穷:",b)
# 不是数字 NaN
c = float('nan')
print("不是数字:",c)

结果:

正无穷: inf
负无穷: inf
不是数字: nan

课后习题

编程题

1.编写一个 Python 脚本,接收用户输
入的身高(单位:米)和体重(单
位:公斤)。计算并打印身体质量指
数 (BMI)。BMI 计算公式为: BMI =
体重 / (身高 * 身高) 。根据 BMI 值
打印出对应的健康状况:
BMI < 18.5: 过轻
18.5 <= BMI < 24: 正常
24 <= BMI < 28: 过重
BMI >= 28: 肥胖

参考答案:

height_str = input("请输入您的身高 (米): ")
weight_str = input("请输入您的体重 (公斤): ")

height = float(height_str)
weight = float(weight_str)

if height <= 0 or weight <= 0:
    print("身高和体重必须是正数。")
else:
    bmi = weight / (height * height)
    print(f"您的 BMI 指数是: {bmi:.2f}")
    if bmi < 18.5:
    print("健康状况: 过轻")
elif bmi < 24:
    print("健康状况: 正常")
elif bmi < 28:
    print("健康状况: 过重")
else:
    print("健康状况: 肥胖")

我的答案:

height = float(input('请输入身高(单位:米) :'))
weight = float(input('请输入体重(单位:公斤):'))
while height <=0  :
  print("身高不符合要求,请重新输入")
  height = float(input('请输入身高(单位:米) :'))
  break
while weight <= 0:
    print("体重不符合要求,请重新输入")
    weight = float(input('请输入体重(单位:公斤):'))
    break
BMI =weight / (height * height)
print(f"BMI为{BMI:.1f}")
if BMI < 18.5:
    print("过轻")
elif BMI < 24:
     print("正常")
elif BMI < 28:
    print("过重")
else:
    print("肥胖")

总结:

1.我的判断输入是否合规,用while实际只执行了一次,我写了break,我的想法跳出本次循环会继续输入,应该用if好一点,我想过但是逻辑用错了 用的and

2.编写一个 Python 脚本,接收用户输
入的三个浮点数 a , b , c ,代表一
元二次方程 ax^2 + bx + c = 0 的系
数(假设 a 不为 0)。计算并打印
方程的实数根。需要考虑判别式
( delta = b^2 - 4ac ) 的三种情况:
delta > 0 : 两个不相等的实数根
delta = 0 : 两个相等的实数根
delta < 0 : 没有实数根 (可以打印提
示信息,不需要计算复数根)
打印出方程的根。

参考答案:

import math # 导入 math 模块以使用 sqrt 函数

a_str = input("请输入系数 a: ")
b_str = input("请输入系数 b: ")
c_str = input("请输入系数 c: ")

a = float(a_str)
b = float(b_str)
c = float(c_str)

if a == 0:
    print("错误:系数 a 不能为 0,这不是一个一元二次方程。")
else:
    delta = b**2 - 4*a*c # 计算判别式

print(f"方程为: {a}x^2 + {b}x + {c} = 0")
print(f"判别式 delta = {delta}")

if delta > 0:
# 两个不相等的实数根
x1 = (-b + math.sqrt(delta)) / (2a)
x2 = (-b - math.sqrt(delta)) / (2
a)
print(f"方程有两个不相等的实数根:")
print(f"x1 = {x1:.4f}")
print(f"x2 = {x2:.4f}")
elif delta == 0:
# 两个相等的实数根
x = -b / (2*a)
print(f"方程有两个相等的实数根:")
print(f"x1 = x2 = {x:.4f}")
else: # delta < 0
print("方程没有实数根。")

我的答案:

a = float(input('请输入系数a(a!=0):'))
b = float(input('请输入系数b:'))
c = float(input('请输入系数c:'))
delta = b**2 - 4*a*c
match delta:
    case delta if delta< 0:
        print("该方程没有实数根,不需要打印复数根")
    case delta if delta > 0:
        # x1、x2分别为两个实数根
        x1=((-b + delta**1/2) / (2 * a))
        x2 =(-b - delta ** 1/2) / (2 * a)
        print(f"该方程的两个根分别为{x1},{x2}")
    case delta if delta == 0:
        x1=((-b + delta**1/2) / (2 * a))
        print(f"该方程的根为{x1}且x2=x1={x1}")

总结:

1.导入数学包 直接使用开sqrt开平方根函数

2.我的delta ** 1/2 开平方根错误,应该为0.5 实际计算的是后者实际上等于(delta**1)/2),因为幂运算优先级别最高

3.delta == 0:表达式可以直接优化,-b/(2*a)