(头歌作业—python)python第三章作业(初级

第1关:判断是否直角三角形

任务描述
输入三个数a,b,c, 判断能否以它们为三个边长构成直角三角形。若能,输出YES,否则输出NO。

输入格式
输入包括三行,每行是一个数字

输出格式
'YES' 或'NO'

示例
输入:
3
4
5
输出:
YES

# 请补充你的代码
# 读取三个输入的边长
a = float(input())
b = float(input())
c = float(input())


sides = [a, b, c]
sides.sort()


epsilon = 1e-9


if sides[0] + sides[1] > sides[2] and sides[0] > 0 and sides[1] > 0 and sides[2] > 0:
 
    if abs(sides[0] ** 2 + sides[1] ** 2 - sides[2] ** 2) < epsilon:
        print('YES')
    else:
        print('NO')
else:
    print('NO')
    

 

 

第2关:今年多少天?

任务描述
闰年366天,其他年份365天。普通年(不能被100整除的年份)能被4整除的为闰年。(如2004年就是闰年,1999年不是闰年);
世纪年(能被100整除的年份)能被400整除的是闰年。(如2000年是闰年,1900年不是闰年);
用户输入一个正整数,代表年份,输出该年有多少天?

输入格式
输入一个正整数,表示年份

输出格式
该年的天数

示例 1
输入:1999
输出:365

示例 2
输入:2000
输出:366

# 请补充你的代码
year = int(input())

if (year % 100 != 0 and year % 4 == 0) or (year % 100 == 0 and year % 400 == 0):
    print(366)
else:
    print(365)

第3关:判断三角形并计算面积

任务描述
输入三个数a,b,c, 判断能否以它们为三个边长构成三角形。若能,输出YES和三角形面积(结果保留2位小数),否则输出NO。

输入格式
输入包括三行,每行是一个数字

输出格式
如果输入的三个数字能够组成三角形的三边,则输出为两行,分别是'YES' 和面积值(结果严格保留2位小数);如果输入的三边不能组成三角形,则输出为'NO'

示例 1
输入:
3.0
4.0
5.0
输出:
YES
6.00

示例2
输入:
2
5
8
输出:
NO

# 请补充你的代码
import math

a = float(input())
b = float(input())
c = float(input())

if a + b > c and a + c > b and b + c > a:

    s = (a + b + c) / 2
 
    area = math.sqrt(s * (s - a) * (s - b) * (s - c))
    print('YES')
    print(f"{area:.2f}")
else:
    print('NO')
    

第4关:身高测算

任务描述
测算身高,单位为厘米,公式参考下列:
男性身高=(父亲身高+母亲身高)×1.08÷2
女性身高=(父亲身高×0.923+母亲身高)÷2

性别输入"男"或“女”,本题保证所有测试输入身高数据为整型,输出结果取整。如果性别输入不符合要求,则输出“无对应公式”

输入格式
输入三行数据如下:
父亲身高(厘米)
母亲身高(厘米)
性别

输出格式
计算出的身高数据(厘米,取整)

示例
输入:
183
175

输出:
171

# 请补充你的代码
father_height = int(input())
mother_height = int(input())
gender = input()

if gender == '男':
    height = int((father_height + mother_height) * 1.08 / 2)
    print(height)
elif gender == '女':
    height = int((father_height * 0.923 + mother_height) / 2)
    print(height)
else:
    print("无对应公式")
    

第5关:个税计算器

任务描述
目前我国个人所得税计算公式如下:
应纳个人所得税税额= (工资薪金所得 -五险一金 - 个税免征额)×适用税率-速算扣除数

个税免征额为5000元/月,2018年10月1日起调整后,也就是2018年实行的7级超额累进个人所得税税率表如下:

全月应纳税所得额(含税级距)    税率(%)    速算扣除数
x<=3000    3    0
3000<x<=12000    10    210
12000<x<=25000    20    1410
25000<x<=35000    25    2660
35000<x<=55000    30    4410
55000<x<=80000    35    7160
x>80000    45    15160
请编写一个个税计算器,用户输入为应发工资薪金所得扣除五险一金后的金额,输出应缴税款和实发工资,结果保留小数点后两位。当输入数字小于0时,输出“error”。

输入格式
输入一个表示工资的数值,例如12000.0,此数值为已扣除五险一金后的金额。

输出格式
应缴税款490.00元,实发工资11510.00元。

示例 1
输入:
12000
输出:
应缴税款490.00元,实发工资11510.00元。

示例 2
输入:
20000
输出:
应缴税款1590.00元,实发工资18410.00元。

示例 3
输入:
-10
输出:
error

# 请补充你的代码
salary = float(input())

threshold = 5000

if salary < 0:
    print("error")
else:
    taxable_income = salary - threshold
    if taxable_income <= 0:
        tax = 0
    elif taxable_income <= 3000:
        tax = taxable_income * 0.03 - 0
    elif taxable_income <= 12000:
        tax = taxable_income * 0.1 - 210
    elif taxable_income <= 25000:
        tax = taxable_income * 0.2 - 1410
    elif taxable_income <= 35000:
        tax = taxable_income * 0.25 - 2660
    elif taxable_income <= 55000:
        tax = taxable_income * 0.3 - 4410
    elif taxable_income <= 80000:
        tax = taxable_income * 0.35 - 7160
    else:
        tax = taxable_income * 0.45 - 15160

    # 计算实发工资
    actual_salary = salary - tax
    # 输出结果,保留两位小数
    print(f"应缴税款{tax:.2f}元,实发工资{actual_salary:.2f}元。")
    

第6关:判断闰年

任务描述
写一个程序用于判断用户输入的年份是不是闰年,如果是输出True,如果不是输出False。

输入格式
输入一个代表年份的正整数

输出格式
True或False

示例 1
输入:
1900
输出:
False

示例 2
输入:
2000
输出:
True    

# 请补充你的代码
year = int(input())
is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
print(is_leap)    

第7关:分段函数B

任务描述

按照输入的整数x,输出对应的y值。本题保证所有测试用例均在整数范围内。

输入格式
输入一个整数,表示x的值

输出格式
输出y的值(整数类型)

示例1
输入:
-10
输出:
0

示例2
输入:
0
输出:
1

# 请补充你的代码
import math
x = int(input())
if -6 <= x < 0:
    y = abs(x) + 5
elif 0 <= x < 3:
    y = math.factorial(x)
elif 3 <= x <= 6:
    y = x ** (x - 2)
else:
    y = 0
print(y)

    

 

第8关:百分制成绩转换五分制E

任务描述
编写一个学生成绩转换程序,用户输入百分制的学生成绩,成绩大于等于90且小于等于100的输出为“A”,成绩大于或等于80且小于90的输出为“B”,成绩大于或等于70且小于80的输出为“C”,成绩大于或等于60且小于70的输出为“D”,成绩小于60且大于等于0的输出为“E”,如果输出的成绩大于100或小于0,输出'data error!'。

输入格式
输入一个数字,代表百分制成绩。

输出格式
A、B、C、D、E中的一个字母,表示五分制的成绩等级;或输出'data error!'

示例
输入:
88
输出:
B

输入:
-5
输出:
data error!

# 请补充你的代码
score = float(input())

if score < 0 or score > 100:
    print('data error!')
elif 90 <= score <= 100:
    print('A')
elif 80 <= score < 90:
    print('B')
elif 70 <= score < 80:
    print('C')
elif 60 <= score < 70:
    print('D')
else:
    print('E')
    

第9关:正负交错数列前n项和

任务描述
1-1/2+2/3-3/5+4/8-5/13+...的前n项和,n由用户输入(n>0),结果用str.format()方法保留小数点后6位数字输出。

输入格式
一个正整数

输出格式
前n项的和

示例 1
输入:
12
输出:
0.828448

# 请补充你的代码
n = int(input())
total = 0
numerator = 0
denominator1 = 1
denominator2 = 1

for i in range(1, n + 1):
    if i == 1:
        term = 1
    else:
        numerator = i - 1
        denominator1, denominator2 = denominator2, denominator1 + denominator2
        term = (-1) ** (i - 1) * (numerator / denominator2)

    total += term

print("{:.6f}".format(total))
    

 

第10关:求数列前n项的平方和

任务描述
现有数列:1,2,3,4,……,n,计算并输出其前n项的平方和,即求:

1×1+2×2+3×3+……+n×n的和。

输入
输入一个正整数 n

输出
数列前n项的平方和

示例
输入
3
输出
14

# 请补充你的代码
n = int(input())
sum_of_squares = 0
for i in range(1, n + 1):
    sum_of_squares += i * i
print(sum_of_squares)
    

第11关:百钱买百鸡A

任务描述
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何?

输入格式
该题目没有输入

输出格式
每行输出一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出,数字之间用空格分隔;
如果有多组解时,按鸡翁数量由少到多输出;

示例
输出:
x xx xx
x xx xx
xx x xx

# 请补充你的代码
for cock in range(1, 20):
    for hen in range(1, 33):
        chick = 100 - cock - hen
        # 鸡雏数量必须是 3 的倍数,且满足总花费为 100 钱
        if chick % 3 == 0 and 5 * cock + 3 * hen + chick // 3 == 100:
            print(f"{cock} {hen} {chick}")
    

第12关:用户登录C

任务描述
实现用户输入用户名和密码,当用户名为admin或administrator且密码为012345时,显示登录成功,否则显示登录失败,登录失败时允许重复输入三次。

输入格式
用户在两行里分别输入用户名和密码

输出格式
登录成功或登录失败

示例 1
输入:
admin
012345
输出:
登录成功

示例 2
输入:
administrator
012345
输出:
登录成功

# 请补充你的代码
n = 0
while n<3:
    a, b = input(), input()
    if a in ['admin','administrator'] and b=='012345':
        print('登录成功')
        break
    else:
        print("登录失败")
        n += 1

 

第13关:鸡兔同笼

任务描述
大约在1500年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
大概的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚,问笼中各有多少只鸡和兔?
请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾)。如无解则输出Data Error!

参考下面的示例代码,从同一行读入两个数
a, b = input().split() # 将输入的以空格分隔的两个数命名为a和b
a, b = map(int,input().split(',')) # 将输入的以逗号分隔的两个值,转换为整数后命名为a和b

输入格式
输入为一行,以空格分隔的两个整数heads, legs,分别代表鸡兔的总头数和总脚数。

输出格式
若有解输出:
有m只鸡,n只兔
若无解输出:
Data Error!

示例 1
输入:
35 94
输出:
有23只鸡,12只兔

示例 2
输入:
-24 12
输出:
Data Error!

示例 3
输入:
12 35
输出:
Data Error!

# 请补充你的代码
heads, legs = map(int, input().split())
if legs % 2 == 0 and heads >= 0 and legs >= 0:
    rabbits = (legs - 2 * heads) // 2
    chickens = heads - rabbits
    if rabbits >= 0 and chickens >= 0:
        print(f"有{chickens}只鸡,{rabbits}只兔")
    else:
        print("Data Error!")
else:
    print("Data Error!")
    

第14关:今天是第几天

任务描述
输入年/月/日(用斜杠分隔),输出该日期是这一年的第几天?(本题目保证测试使用的年、月、日都是合法输入)

tips:
map()函数可以将多个数据转换成指定数据类型
split()函数可以将字符串按照指定分隔符进行间隔并生成数据列表
a, b, c = map(int, input().split(":"))  
# 上述语句可以将输入格式为 "12:30:05" 的字符串分解成["12", "30", "05"]
# 并将列表中每个数据转换成整型数据并分别赋值给a,b,c三个变量
输入格式
年/月/日

输出格式
某年某月某日是某年第多少天

示例 1
输入:
2018/2/1
输出:
2018年2月1日是2018年第32天

# 请补充你的代码
# 获取用户输入的年/月/日
year, month, day = map(int, input().split("/"))

# 定义每个月的天数列表,平年情况
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

# 判断是否为闰年,如果是闰年,2 月有 29 天
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    days_in_month[1] = 29

# 计算到当前月之前的总天数
total_days = 0
for i in range(month - 1):
    total_days += days_in_month[i]

# 加上当前月的天数
total_days += day

# 输出结果
print(f"{year}年{month}月{day}日是{year}年第{total_days}天")
    

 

第15关:中国古代数学问题——物不知数

任务描述
“物不知数”出自《孙子算经》。题目为
意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。
现假设物品总数不超过n (n<=1000),请编程计算满足条件的物品个数并输出。

输入格式
输入为一个正整数n,题目保证 0 < n <= 1000 。

输出格式
输出不超过n且满足条件的物品个数m,如果有多个解,则分行输出,如果无解则输出No solution!。

示例 1
输入:
10
输出:
No solution!

示例2
输入:
200
输出:
23
128

# 请补充你的代码
n = int(input())
has_solution = False

for i in range(1, n + 1):
    if i % 3 == 2 and i % 5 == 3 and i % 7 == 2:
        print(i)
        has_solution = True

if not has_solution:
    print("No solution!")
    

第16关:中国古代数学问题——二鼠打洞

任务描述
《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文是这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?

这道题的意思是:有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。

请编程求此题的解,要求使用循环来完成,不允许使用幂运算。

输入格式
输入为1个整数wall,代表墙的厚度,单位为尺。

输出格式
输出为两行,第一行输出1个整数,表示相遇时所需的天数
第二行输出 2 个数字,分别为小鼠和大鼠打洞的距离,单位为尺,若计算结果是浮点数保留小数点后 1 位数字。
(提示:本题输出结果时必须使用round函数,注意计算结果可能是整数)

round()函数说明:
当round(f,n)函数对浮点数f保留小数点后n位时,得到的数据值为浮点数数值形式。

round(3.1415,3)  # 结果是3.142
由于返回的是数值形式,因此计算后输出会以最短的浮点数形式输出,如:

round(1.999,2)  # 结果不是2.00,而是2.0
当round(f,n)函数对整数f保留小数点后n位时,得到的数据仍为整数类型。

round(5,4) 
5
示例 1
输入:
10
输出:
4
1.8 8.2

示例2
输入:
2
输出:
1
1 1

wall = int(input())
a = b = time = 1
day = A = B = 0
while wall>0:
    if a+b>wall: 
        time = wall/(b + a) 
    wall = wall - b - a 
    B += time*b
    A += time*a
    a *= 2
    b /= 2
    day += 1
print(day)
print(round(B, 1), round(A, 1))

码字不易,支持的宝子们可以打赏支持一下,你们的支持是我更新的动力!

 

针对《头歌 Python 程序设计》教材第九章的内容,虽然无法直接提供具体的答案或解析,可以给出一些指导性的建议以及如何理解这一章节可能涉及的关键概念和技术要点。 ### 关于第九章的理解 #### 1. 主题概述 通常情况下,《头歌 Python 程序设计》这类书籍的第九章会深入探讨面向对象编程(OOP),这是现代软件开发中的核心范式之一。OOP通过类和对象的概念来模拟现实世界的事物及其相互关系[^3]。 #### 2. 类与对象 - **定义**: 使用`class`关键字创建自定义的数据结构。 - **属性**: 描述对象特征的变量。 - **方法**: 定义在类内部用于操作这些属性的功能函数。 ```python class Rectangle: def __init__(self, width, height): # 初始化方法 self.width = width # 属性设置 self.height = height # 属性设置 def area(self): # 方法定义 return self.width * self.height # 返回面积计算结果 ``` #### 3. 继承机制 继承使得子类能够获取父类的所有特性,并在此基础上扩展新的功能而不必重复编写已有代码。这有助于提高代码重用性和可维护性[^4]。 ```python class Square(Rectangle): def __init__(self, side_length): super().__init__(side_length, side_length) # 调用父类初始化器 ``` #### 4. 多态性 多态允许不同类型的对象被统一处理,即同一个接口可以根据传入的具体实例表现出不同的行为模式。这种灵活性对于构建复杂的应用程序非常重要[^5]。 ```python def draw_shape(shape): shape.draw() # 不同形状有不同的draw实现方式 square = Square(5) circle = Circle(7) for s in [square, circle]: draw_shape(s) # 自动调用相应的方法版本 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值