武汉理工大学 python实验六

第1关:模拟砍价

任务描述

某电商平台开发出一个新功能:友谊验真器。“是不是朋友,帮忙砍一刀!” 一件商品价格为 price 元,假设每位朋友帮忙砍价都是整数,最少可以砍掉0元,最多只能砍掉不超过商品标价十分之一的价钱,请问每件商品至少要多少人帮忙砍价才能0元拿?

本题使用random函数库,要求使用random.randint()函数生成每次砍价的整数金额

输入格式

在一行中输入用逗号分隔的2个正整数,分别代表商品标价和随机数种子

输出格式

砍价到0元的最少次数

示例

输入:

100,10

输出:

22

# ####随机数种子的设定
# a,b = input().split(',')
 
# import random
 
# random.seed(int(b))
 
# a = int(a)
# b= a
# cnt = 0
# while a>0:
#     a = a- random.randint(0,int(b/10))
#     cnt+=1
# print(cnt)


import random
price,s = map(int,input().split(","))
p = price//10
random.seed(s)
count = 0
while price>0:
    price-=random.randint(0,p)
    count += 1
print(count)

 

第2关:素数求和

任务描述

输入一个正整数n,统计从[0,n]之间的最大的10个素数之和。本题保证测试用例至少有10个满足条件的素数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

本题要求使用自定义函数完成,代码框架参考如下:

 
  1. def isprime(n): #判断素数函数
  2. ......
  3. def f(n): #找小于等于n的素数并求和
  4. ......
  5. ......
  6. p=int(input())
  7. print(f(p))

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入: 31 输出: 3+5+7+11+13+17+19+23+29+31=158

def isprime(n):
    if n<2:
        return False
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
    return True
def f(n):
    count = 0
    ls = []#产生的10个素数
    for i in range(n,1,-1):
        if isprime(i):
            count += 1
            ls.append(i)
        if count ==10:
            ls.sort()
            return '+'.join(list(map(str,ls)))+'='+str(sum(ls))
p = int(input())
print(f(p))

第3关:数据求和

任务描述

本关任务:编写一个能计算符合条件的数求和的小程序。

编程要求

第一行中输入m个正整数,以空格间隔; 在前m-1个整数中找到那些能整除第m个整数的数据,计算并输出符合条件的数据之和以及其中最大值。如果不存在符合条件的数,输出None

测试说明

平台会对你编写的代码进行测试:

测试输入: 1 2 7 21 32 49 14 51 7 预期输出: 和:91 最大值:49

测试输入: 5 1 151 12 22 100 15 预期输出: None

# # 读取第一行输入,得到m个正整数
# input_string = input()
# numbers = list(map(int, input_string.split()))

# # 验证输入是否有效
# if len(numbers) < 2 or numbers[-1] <= 0:
#     print("None")
# else:
#     # 提取数的数量(m)
#     m = len(numbers)
    
#     # 初始化符合条件的数之和和最大值
#     sum_of_divisors = 0
#     max_divisor = -1
    
#     # 遍历前m-1个数,找出能整除最后一个数的数
#     for i in range(m-1):
#         if numbers[i] % numbers[m-1] == 0:
#             sum_of_divisors += numbers[i]  # 累加符合条件的数
#             max_divisor = max(max_divisor, numbers[i])  # 更新最大值
    
#     # 输出符合条件的数之和以及其中最大值
#     if sum_of_divisors > 0:
#         print(f"和:{sum_of_divisors}")
#         print(f"最大值:{max_divisor}")
#     else:
#         print("None")

ls = list(map(int,input().split()))
lss = []
for i in range(len(ls)-1):
    if ls[i]%ls[-1]==0:
        lss.append(ls[i])
if lss!=[]:
    print("和:{}".format(sum(lss)))
    print("最大值:{}".format(max(lss)))
else:
    print("None")

第4关:摩尔斯电码转换

任务描述

摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

编写程序,把输入的英文句子转换成摩尔斯电码并输出电码字符串。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

本题只需要对英文字母(不区分大小写)进行编码转换,其他字符原样输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

下面列表中为26个英文字母对应的摩尔斯电码。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..']

,

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入: How are you? 输出:
....---.-- .-.-.. -.-----..-?

# #字母转ascii码:ord('A')
# ls = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.", "---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
# a = input()
# s  = a
 
# for i in s:
#     if i.isalpha():
#         print(ls[ord(i.lower())-ord('a')],end='')
#     else: 
#         print(i,end="")


import string
lsm = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.", "---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
s = input().lower()
code = ''
for x in s:
    if x in string.ascii_lowercase:
        code += lsm[ord(x)-ord('a')]
    else:
        code += x
print(code)
 

第5关:插入位置

任务描述

对一个有序的整数序列,现在要将一个整数插入进去,并保证该序列仍然有序。请输出这个数要插入的位置‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第一行输入若干个整数,以空格间隔,本题保证用例中输入的数值顺序一定是从小到大,原始列表中无重复数据‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第二行输入一个整数n‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

将整数序列放入列表ls‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

如果ls中已经存在n,则不插入该数,输出 Fail以及ls列表‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

若ls中可以插入n,输出插入位置(从0开始计数),以及插入后的ls列表

示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入: 1 2 3 5 4 输出:
3 [1, 2, 3, 4, 5]

# 最后的特判,新元素比列表中的都大
a = list(map(int,list(input().split())))
b = int(input())
 
if b in a:
    print('Fail')
    print(a)
else:
    for i in range(0,len(a)):
        if a[i]>b:
            print(i)
            a.insert(i,b)
            print(a)
            break
    else:
        print(len(a))
        a.append(b)
        print(a)

第6关:列表删除数据

任务描述

从输入的列表ls中,删除指定的数据n,并保持其他数据顺序不变。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第一行输入一行以空格间隔的整数,并放入列表ls‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第二行输入一个整数n‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

删除整数列表中的所有的n值,并输出删除后的列表‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

如果原输入列表中没有n,则输出NOT FOUND

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入: 1 1 2 2 4 6 1 2

输出: [1, 1, 4, 6, 1]

示例 2‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入: 18 9 0 7 6 -1

输出:
NOT FOUND

# 列表的pop和index
 
ls = list(map(int,list(input().split())))
n = int(input())
 
if n not in ls:
    print('NOT FOUND')
else:
    while n in ls:   #for i in range(ls.count(n))
        ls.pop(ls.index(n))  #ls.remove(n)
    print(ls)

第7关:上课 or 休息

任务描述

本关任务:按照武汉理工大学课表时间安排,编写一个根据输入的时间输出课堂的节数or休息。

相关知识

,

编程要求

按上图所示,根据输入的时间hh:mm,输出第n节课其中1<=n<=13或者休息。 本题中不允许使用eval()转换数据类型,每节课的最后一分钟是上课时间。 测试保证输入的时间格式完整并合法,范围在00:00至23:59

测试说明

平台会对你编写的代码进行测试:

测试输入: 04:35 预期输出: 休息

测试输入: 14:25 预期输出: 第6节课


开始你的任务吧,祝你成功!

hhmm = input()
ls = ["08:00-08:45","08:50-09:35","09:55-10:40","10:45-11:30","11:35-12:20","14:00-14:45","14:50-15:35","15:40-16:25","16:45-17:30","17:30-18:20","19:00-19:45","19:50-20;35","20:40-21:25"]
flag = 0
for x in ls:
    time = x.split("-")
    if time[0]<=hhmm<=time[1]:
        print("第{}节课".format(ls.index(x)+1))
        flag = 1
if flag == 0:
    print("休息")

第8关:买入股票

任务描述

本关任务:编写一个能计算最大买入股票数量的代码

相关知识

股票买入时,交易数量hand必须为100的正整数倍,且交易所及中介机构将收取手续费。本题设定手续费率固定为交易金额price * hand0.1%,且计算过程中不允许使用round()四舍五入。

初始代码如下:

 
    
  1. import randA
  2. s = int(input())
  3. price = randA.randA(s)
  4. #上述代码将随机输出股票名称与价格,不允许修改,否则无法通过评测
  5. #价格price为股票价格,数据类型为float

测试说明

第一行输入一个正整数,初始代码会随机生成并输出某只股票代码,名称和价格price。 第二行输入初始账户金额S_amount,为float型,本题保证输入为正数。 根据股票价格price计算初始账户金额S_amount一次可以买入的股票最大数量hand。 下列条件必须满足

 
    
  1. price * hand * 1.001 <= S_amount
  2. hand100的正整数倍
  3. 最大可交易的hand

输出:将所有可买数量以列表形式输出,无可买数量则输出空列表;输出金额需要使用str.format()或者f_string保留两位小数。

测试输入: 7 20005.86 预期输出: 301225 恒勃股份 29.46 [100, 200, 300, 400, 500, 600] 使用17693.68买入600股,账户余额为2312.18元。

测试输入: 99 100 预期输出: 600599 ST熊猫 10.69 [] 资金不够,至少需要1070.07元。


开始你的任务吧,祝你成功!

import randA
s = int(input())
price = randA.randA(s)
s_amount = float(input())
ls = []
hand = 100
while price*hand*1.001<=s_amount:
    ls.append(hand)
    hand += 100
if ls == []:
    print(ls)
    print("资金不够,至少需要{:.2f}元。".format(price*100*1.001))
else:
    print(ls)
    print("使用{:.2f}买入{}股,账户余额为{:.2f}元。".format(price*ls[-1]*1.001,ls[-1],s_amount-price*ls[-1]*1.001))

  • 14
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值