求帮忙编写程序
轨道交通价格调整为:6公⾥(含)内3元;6公⾥⾄12公⾥(含)4元;12公⾥⾄22公⾥(含)5元;22公⾥⾄32公⾥(含)6元;32公⾥以上部分,每增加1元可乘坐20公⾥。使⽤市政交通⼀卡通刷卡乘坐轨道交通,每⾃然⽉内每张卡⽀出累计满
100元以后的乘次,价格给予8折优惠;满150元以后的乘次,价格给予5折优惠;⽀出累计达到400元以后的乘次,不再
享受打折优惠。
+ 要求:
假设每个⽉,⼩明都需要上20天班,使用市政交通⼀卡通刷卡乘坐轨道交通,每次上班需要来回1次,即每天需要乘坐2次同样路线的地铁;编写程序,帮⼩明完
成每⽉乘坐地铁需要的总费⽤
已经写出了部分代码,还有打折及400元以后的乘次需要的地铁总费用代码部分不会写。
s = input("请输入小明每次乘坐地铁的单程距离:")
s = eval(s)
if s<=6:
sum=3
elif s>6 and s<=12:
sum=4
elif s>12 and s<=22:
sum=5
elif s>22 and s<=32:
sum=6
else:
sum=6+ceil((s-32)/20)
print('小明每次每次乘坐地铁的单程费用为%s' %sum) 本帖最后由 匿名 于 2023-6-20 20:04 编辑
占楼 顶 sfqxx_小 发表于 2023-6-20 20:02
顶
{:10_249:} sfqxx_小 发表于 2023-6-20 20:02
顶
。。。。。。。 在原有代码的基础上,可以根据题目给出的要求实现打折和400元以后的乘次需要的地铁总费用。具体实现如下:
import math
s = input("请输入小明每次乘坐地铁的单程距离:")
s = eval(s)
if s <= 6:
sum = 3
elif s > 6 and s <= 12:
sum = 4
elif s > 12 and s <= 22:
sum = 5
elif s > 22 and s <= 32:
sum = 6
else:
sum = 6 + math.ceil((s - 32) / 20)
# 计算累计消费达到的阈值
thresholds =
# 根据阈值进行折扣计算
for i, th in enumerate(thresholds):
if sum * 2 >= th:
if i == 0:
# 消费达到100元时,价格打8折
sum = sum * 2 * 0.8
elif i == 1:
# 消费达到150元时,价格打5折
sum = sum * 2 * 0.5
else:
# 消费达到400元时,不再享受打折优惠
break
print('小明每次乘坐地铁的单程费用为%s元' % sum)
在代码中,我们定义了一个列表 `thresholds`,其中包含了累计消费达到100、150和400元时的阈值。然后我们遍历该列表,根据阈值以及当前费用是否达到阈值来判断是否需要打折,并计算最终的费用。同时,如果消费达到400元,就不再享受打折优惠,因此在该条件下直接退出循环即可。
求最佳答案 isdkz 发表于 2023-6-20 20:03
{:10_321:} 你已经很好地处理了基本的票价计算。接下来,我将帮你完成剩余的打折和400元后的计算部分。注意这段代码假设所有的工作日在同一个月内,并且不跨月。
以下是完整的代码:
import math
# 获取用户输入
s = input("请输入小明每次乘坐地铁的单程距离:")
s = eval(s)
# 计算单次乘车费用
if s <= 6:
fee = 3
elif s > 6 and s <= 12:
fee = 4
elif s > 12 and s <= 22:
fee = 5
elif s > 22 and s <= 32:
fee = 6
else:
fee = 6 + math.ceil((s-32)/20)
# 计算一个月的工作日总乘车次数(上下班各算一次)
times_per_month = 20 * 2
# 计算一个月的总费用
total_fee = 0
discounted_fee = 0
for i in range(times_per_month):
if total_fee < 100:
discounted_fee = fee
elif total_fee >= 100 and total_fee < 150:
discounted_fee = fee * 0.8
elif total_fee >= 150 and total_fee < 400:
discounted_fee = fee * 0.5
else:
discounted_fee = fee
total_fee += discounted_fee
print(f'小明每个月乘坐地铁需要的总费用为{total_fee}')
该代码首先计算小明每次乘车的费用,然后根据月工作日总乘车次数来计算整个月的费用。在计算每次的费用时,都会检查当前的累积总费用,以确定应该应用何种折扣。然后将折扣后的费用添加到总费用中。最后,输出小明每个月需要乘坐地铁的总费用。
请注意,我假定费用在每次乘车后立即从卡中扣除,而不是在乘车后的某个时间扣除。 isdkz 发表于 2023-6-20 20:04
你已经很好地处理了基本的票价计算。接下来,我将帮你完成剩余的打折和400元后的计算部分。注意这段代码假 ...
{:10_249:} sfqxx_小 发表于 2023-6-20 20:05
{:10_294:} isdkz 发表于 2023-6-20 20:04
你已经很好地处理了基本的票价计算。接下来,我将帮你完成剩余的打折和400元后的计算部分。注意这段代码假 ...
range(40)的范围是[0,40),即0~39,是否应该改为range(1,times_per_month+1) 花开半夏—— 发表于 2023-6-20 20:14
range(40)的范围是
实际上,我们在这里并不需要更改range(40) 。Python 的range()函数生成的是一个序列,序列的最后一个元素是range()函数中指定的数值减去1。所以, range(40)生成的序列是 0 到 39,共40个元素,与我们这里需要的一样,因为一个月的工作日总乘车次数为40次(上下班各一次,共20天)。
在range()函数中,我们并不关心序列中的具体元素,我们只关心序列中元素的数量。这里range(40)的意思是我们要循环40次,每次循环代表小明乘坐地铁一次。
另一方面,如果你选择使用range(1, times_per_month+1) ,这也是完全可以的,它会生成从1到40的序列,元素数量仍然是40,对我们这个问题来说,结果是一样的。 isdkz 发表于 2023-6-20 20:22
实际上,我们在这里并不需要更改range(40) 。Python 的range()函数生成的是一个序列,序列的最后一 ...
好吧,谢谢 花开半夏—— 发表于 2023-6-20 20:32
好吧,谢谢
不客气{:5_109:} 我知道了,以后我不回答该用户的问题了,反正也轮不到我
就让 isdkz 来吧 sfqxx 发表于 2023-6-20 21:23
我知道了,以后我不回答该用户的问题了,反正也轮不到我
就让 isdkz 来吧
{:10_275:}
你说得对 sfqxx 发表于 2023-6-20 21:23
我知道了,以后我不回答该用户的问题了,反正也轮不到我
就让 isdkz 来吧
不是,就是感觉isdkz的答案感觉更容易懂,你的代码感觉有点复杂,而且我感觉他的代码更方便阅读{:5_96:}{:5_96:}{:5_96:} sfqxx 发表于 2023-6-20 21:23
我知道了,以后我不回答该用户的问题了,反正也轮不到我
就让 isdkz 来吧
别生气,好吧 花开半夏—— 发表于 2023-6-21 10:40
别生气,好吧
我的代码跟他差不多啊{:10_277:} sfqxx 发表于 2023-6-21 17:46
我的代码跟他差不多啊
for i,th in numerate()看不懂
页:
[1]