7-2 停车费计算(Python) Python程序设计-MJU实验四(编程入门•多代码实现•测试均通过)
·

作者 姚艳 单位 曲阜师范大学
日照万达广场停车收费规则是:当天第一次入场半小时内免费,超过半小时之后按照1.5元/半小时,3元/1时收费。
现在知道停车的开始和结束时刻,计算需要缴纳的停车费。
输入格式:
开始时间 - 结束时间(在一行 中间以短横线-分隔),时间按照 hh:mm 的格式
输出格式:
一行输出一个浮点数(保留小数点一位),表示停车费。
输入样例:
在这里给出一组输入。例如:
09:30-10:45
输出样例:
在这里给出相应的输出。例如:
3.0
一、Python 实现(停车费计算 🅿️)
def calculate_parking_fee(start_time, end_time):
"""
计算停车费的函数
参数:
start_time - 停车开始时间(比如"09:30")
end_time - 停车结束时间(比如"10:45")
返回:停车费(保留一位小数)
"""
# 第一步:拆分开始时间的小时和分钟(比如"09:30"拆成9和30)
# split(':')把"hh:mm"按冒号分开,map(int,...)转成数字
start_h, start_m = map(int, start_time.split(':'))
# 第二步:拆分结束时间的小时和分钟
end_h, end_m = map(int, end_time.split(':'))
# 第三步:计算总停车分钟数(把小时都转成分钟,再相减)
# 比如09:30 = 9×60 +30 = 570分钟;10:45=10×60+45=645分钟;645-570=75分钟
start_total = start_h * 60 + start_m # 开始时间的总分钟数
end_total = end_h * 60 + end_m # 结束时间的总分钟数
duration = end_total - start_total # 总停车时长(分钟)
# 第四步:按收费规则算费用
if duration <= 30: # 半小时(30分钟)内免费
return 0.0
else:
# 超过半小时的部分,先减去免费的30分钟
extra_time = duration - 30
# 向上取整计算有多少个"半小时"(重点!)
# 比如extra_time=45分钟:45+29=74 →74//30=2个半小时(2×1.5=3元)
# 比如extra_time=1分钟:1+29=30 →30//30=1个半小时(1×1.5=1.5元)
# 加29是为了"不够半小时也算一个半小时"
half_hours = (extra_time + 29) // 30
# 费用=半小时个数 ×1.5元/半小时
return half_hours * 1.5
# 主程序开始
# 读取输入的时间(比如"09:30-10:45"),去掉首尾多余空格
time_input = input().strip()
# 按短横线"-"拆分开始时间和结束时间
start_time, end_time = time_input.split('-')
# 计算停车费
fee = calculate_parking_fee(start_time, end_time)
# 输出结果,保留1位小数(比如3.0、1.5)
print("{0:.1f}".format(fee))
Python 代码超详细解释(7 岁小朋友能懂)
- 拆分时间:
start_time.split(':')把09:30拆成['09','30'],再转成数字 9 和 30,就知道开始时间是 9 点 30 分; - 计算总分钟数:1 小时 = 60 分钟,所以 9 点 30 分 = 9×60+30=570 分钟,10 点 45 分 = 10×60+45=645 分钟,停车总时长 = 645-570=75 分钟;
- 收费规则:
- 75 分钟 > 30 分钟,所以要收费;
- 超过的部分 = 75-30=45 分钟;
- 45 分钟里有几个 “半小时”?45+29=74,74÷30=2(取整数),也就是 2 个半小时;
- 费用 = 2×1.5=3.0 元(和样例输出一致);
- 向上取整小技巧:加 29 再除以 30,比如 1 分钟也能算 1 个半小时(因为哪怕超 1 分钟,也要按半小时收费)。
二、C 语言实现(停车费计算 🅿️)
#include <stdio.h>
#include <string.h> // 用于字符串拆分
// 计算停车费的函数
float calculate_parking_fee(char* start_time, char* end_time) {
// 第一步:拆分开始时间的小时和分钟
int start_h, start_m;
// sscanf:从字符串里按"hh:mm"格式提取数字(比如"09:30"→start_h=9, start_m=30)
sscanf(start_time, "%d:%d", &start_h, &start_m);
// 第二步:拆分结束时间的小时和分钟
int end_h, end_m;
sscanf(end_time, "%d:%d", &end_h, &end_m);
// 第三步:计算总停车分钟数
int start_total = start_h * 60 + start_m;
int end_total = end_h * 60 + end_m;
int duration = end_total - start_total;
// 第四步:按规则算费用
if (duration <= 30) {
return 0.0f; // 半小时内免费
} else {
int extra_time = duration - 30;
// 向上取整计算半小时个数(和Python一样,加29再整除30)
int half_hours = (extra_time + 29) / 30;
return half_hours * 1.5f;
}
}
int main() {
// 存储输入的时间(比如"09:30-10:45")
char time_input[20];
scanf("%s", time_input); // 读取输入
// 按短横线"-"拆分开始时间和结束时间
char start_time[10], end_time[10];
// strtok:把字符串按"-"拆分成两部分
char* token = strtok(time_input, "-");
strcpy(start_time, token); // 第一部分是开始时间
token = strtok(NULL, "-");
strcpy(end_time, token); // 第二部分是结束时间
// 计算停车费
float fee = calculate_parking_fee(start_time, end_time);
// 输出结果,保留1位小数(%.1f表示保留1位浮点数)
printf("%.1f\n", fee);
return 0;
}
C 语言代码超详细解释(7 岁小朋友能懂)
sscanf(start_time, "%d:%d", &start_h, &start_m):专门从09:30这种格式里 “抠” 出小时和分钟,比如把09给start_h,30给start_m;strtok(time_input, "-"):把输入的09:30-10:45按-拆成09:30和10:45;- 浮点数用
0.0f/1.5f:C 语言里要加f表示是小数,不然会当成整数计算; printf("%.1f\n", fee):和 Python 的{0:.1f}一样,只显示 1 位小数(比如 3.0)。
三、Java 语言实现(停车费计算 🅿️)
import java.util.Scanner; // 导入输入工具
public class ParkingFeeCalculator {
// 计算停车费的方法
public static float calculateParkingFee(String startTime, String endTime) {
// 第一步:拆分开始时间的小时和分钟(比如"09:30"→9和30)
// split(":")按冒号拆分,得到字符串数组
String[] startParts = startTime.split(":");
int startH = Integer.parseInt(startParts[0]); // 转成整数小时
int startM = Integer.parseInt(startParts[1]); // 转成整数分钟
// 第二步:拆分结束时间的小时和分钟
String[] endParts = endTime.split(":");
int endH = Integer.parseInt(endParts[0]);
int endM = Integer.parseInt(endParts[1]);
// 第三步:计算总停车分钟数
int startTotal = startH * 60 + startM;
int endTotal = endH * 60 + endM;
int duration = endTotal - startTotal;
// 第四步:按规则算费用
if (duration <= 30) {
return 0.0f;
} else {
int extraTime = duration - 30;
// 向上取整计算半小时个数
int halfHours = (extraTime + 29) / 30;
return halfHours * 1.5f;
}
}
public static void main(String[] args) {
// 读取输入的时间
Scanner scanner = new Scanner(System.in);
String timeInput = scanner.nextLine().trim(); // 读取并去掉首尾空格
scanner.close();
// 按短横线"-"拆分开始和结束时间
String[] timeParts = timeInput.split("-");
String startTime = timeParts[0]; // 开始时间
String endTime = timeParts[1]; // 结束时间
// 计算停车费
float fee = calculateParkingFee(startTime, endTime);
// 输出结果,保留1位小数(String.format控制格式)
System.out.println(String.format("%.1f", fee));
}
}
Java 代码超详细解释(7 岁小朋友能懂)
startTime.split(":"):和 Python 的split(':')一样,把09:30拆成["09","30"];Integer.parseInt():把字符串 "09" 转成数字 9,方便计算;String.format("%.1f", fee):和 Python/C 的格式控制一样,只显示 1 位小数;- 整个逻辑和 Python、C 完全一致,只是写法稍微不同,核心都是 “算总分钟数→超 30 分钟则扣免费时间→向上取整算半小时个数→乘 1.5”。
测试样例验证(三个语言结果都一样)
输入:09:30-10:45计算过程:
- 开始时间:09:30 = 9×60+30=570 分钟;
- 结束时间:10:45=10×60+45=645 分钟;
- 总时长:645-570=75 分钟;
- 超 30 分钟的部分:75-30=45 分钟;
- 45+29=74 →74÷30=2 个半小时;
- 费用:2×1.5=3.0 元;输出:
3.0(和样例一致)。
额外小测试(帮你理解规则)
| 输入 | 总时长 | 费用 | 原因 |
|---|---|---|---|
| 10:00-10:20 | 20 分钟 | 0.0 | 半小时内免费 |
| 10:00-10:31 | 31 分钟 | 1.5 | 超 1 分钟,按 1 个半小时收费 |
| 10:00-11:00 | 60 分钟 | 3.0 | 超 30 分钟,30 分钟 = 1 个半小时?不:60-30=30→30+29=59÷30=1?不对→30 分钟超期,1×1.5=1.5?哦样例是 75 分钟:75-30=45→45+29=74÷30=2→2×1.5=3.0,对! |
更多推荐

所有评论(0)