小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
输入的第一行包含一个整数 � (1≤�≤104)n (1≤n≤104),表示考试人数。
接下来 �n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
示例
输入
7
80
92
56
74
88
100
0
输出
71%
43%
import os
import sys
n = int(input())
jige = 0
youxiu = 0
for i in range(n):
a = int(input())
if a>=60:
jige += 1
if a>=85:
youxiu += 1
jigelv = round(jige/n * 100) #ROUND 函数将数字四舍五入到指定的位数。
youxiulv = round(youxiu/n * 100)
print(f'{jigelv}%') # f' '格式化字符串,{}里为替换内容
print(f'{youxiulv}%')
1、ROUND 函数:将数字四舍五入到指定的位数
ROUND(number, num_digits)
ROUND 函数语法具有下列参数:
number 必需。 要四舍五入的数字。
num_digits 必需。 要进行四舍五入运算的位数。
如果 num_digits 大于 0(零),则将数字四舍五入到指定的小数位数。
如果 num_digits 等于 0,则将数字四舍五入到最接近的整数。
如果 num_digits 小于 0,则将数字四舍五入到小数点左边的相应位数。
若要始终进行向上舍入(远离 0),请使用 ROUNDUP 函数。
若要始终进行向下舍入(朝向 0),请使用 ROUNDDOWN 函数。
若要将某个数字四舍五入为指定的倍数(例如,四舍五入为最接近的 0.5 倍),请使用 MROUND 函数。
复制下表中的示例数据,然后将其粘贴进新的 Excel 工作表的 A1 单元格中。 要使公式显示结果,请选中它们,按 F2,然后按 Enter。 如果需要,可调整列宽以查看所有数据。
公式 |
说明 |
结果 |
=ROUND(2.15, 1) |
将 2.15 四舍五入到一个小数位 |
2.2 |
=ROUND(2.149, 1) |
将 2.149 四舍五入到一个小数位 |
2.1 |
=ROUND(-1.475, 2) |
将 -1.475 四舍五入到两个小数位 |
-1.48 |
=ROUND(21.5, -1) |
将 21.5 四舍五入到小数点左侧一位 |
20 |
=ROUND(626.3,-3) |
将 626.3 四舍五入为最接近的 1000 的倍数 |
1000 |
=ROUND(1.98,-1) |
将 1.98 四舍五入为最接近的 10 的倍数 |
0 |
=ROUND(-50.55,-2) |
将 -50.55 四舍五入为最接近的 100 的倍数 |
-100 |
2、格式化字符串f()用法
f-string在形式上是以 f
或 F
修饰符引领的字符串(f'xxx'
或 F'xxx'
),以大括号 {}
标明被替换的字段;f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。
f-string用大括号 {}
表示被替换字段,其中直接填入替换内容:
>>> name = 'Eric'
>>> f'Hello, my name is {name}'
'Hello, my name is Eric'
>>> number = 7
>>> f'My lucky number is {number}'
'My lucky number is 7'
>>> price = 19.99
>>> f'The price of this book is {price}'
'The price of this book is 19.99'
错误代码反思总结:
import os
import sys
# 请在此输入您的代码
n = int(input())
jige = 0
youxiu = 0
for i in range(n):
a = int(input())
if a>=60:
jige += 1
jigelv = int(jige/n * 100)
if a>=85:
youxiu += 1
youxiulv = int(youxiu/n * 100)
print(str(jigelv) + '%')
print(str(youxiulv) + '%')
INT()函数,是VFP数值函数的一种,是将一个要取整的实数(可以为数学表达式)向下取整为最接近的整数。利用INT函数可以返回一个小数的整数,如4.323,返回4,它不是四舍五入,而是舍尾法,即使4.987,也是返回4,而不是5 。
所以该种方法测试通过率仅30%。
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
示例 1
输入
lanqiao
输出
a
2
示例 2
输入
longlonglongistoolong
输出
o
6
import os
import sys
# 请在此输入您的代码
word = input()
a = 0
b = []
for i in word:
c = word.count(i)
if c >= a:
a = c
for j in word:
if word.count(j) == a:
b.append(j)
b.sort()
print(b[0])
print(a)
甚至连字符串都是可迭代的对象,它们包含一系列的字符:
循环遍历单词 "banana" 中的字母:
for x in "banana": print(x)
for循环运用和示例:Python For 循环 (w3school.com.cn)
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝要为一条街的住户制作门牌号。
这条街一共有 20202020 位住户,门牌号从 11 到 20202020 编号。
小蓝制作门牌的方法是先制作 00 到 99 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、71、0、1、7,即需要 11 个字符 00,22 个字符 11,11 个字符 77。
请问要制作所有的 11 到 20202020 号门牌,总共需要多少个字符 22?
import os
import sys
count = 0
for i in range(1,2021):
a = str(i)
for j in a:
if j == '2': #不能写成 j==2
count += 1
print(count)
【注意】这里最开始出现一个错误,if条件写成 j==2,但此处是字符类型,故要用单引号加以区别。
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有很多数字卡片,每张卡片上都是数字 00 到 99。
小蓝准备用这些卡片来拼一些数,他想从 11 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 11 拼到多少。
例如,当小蓝有 3030 张卡片,其中 00 到 99 各 33 张,则小蓝可以拼出 11 到 1010,
但是拼 1111 时卡片 11 已经只有一张了,不够拼出 1111。
现在小蓝手里有 00 到 99 的卡片各 20212021 张,共 2021020210 张,请问小蓝可以从 11 拼到多少?
提示:建议使用计算机编程解决问题。
import os
import sys
#分析:1肯定是消耗最快的数字,所以只需要统计1出现的次数是否小于2021即可
count=0 #计数
i=1 #设置初值,循环累加遍历数列
while True:
count=str(i).count("1")+count #通过统计1的个数是不是达到了2021个就行,因为1肯定是消耗的最快的数字
# print(count)
if count==2021:
print(i)
break
i=i+1
统计字符串中指定字符出现的次数
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
请计算这次考试的最高分、最低分和平均分。
输入的第一行包含一个整数 � (1≤�≤104)n (1≤n≤104),表示考试人数。
接下来 �n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出三行。
第一行包含一个整数,表示最高分。
第二行包含一个整数,表示最低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。
示例
输入
7
80
92
56
74
88
99
10
输出
99
10
71.29
import os
import sys
n = int(input())
list = []
for i in range(n):
num = int(input())
list.append(num)
a = max(list)
b = min(list)
c = sum(list)/n
print(a)
print(b)
print("{:.2f}".format(c))
此处注意format格式化输出的方式,保留两位小数:print("{:.2f}".format(c))
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。
这不,大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。
取款机只能提供 100100 元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。
以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折
需要说明的是,8888 折指的是按标价的 8888 计算,而 88 折是按 8080 计算,余者类推。 特别地,半价是按 5050 计算。
请输出小明要从取款机上提取的金额,单位是元。
import math
data = '''
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折
'''
data = data.split()
sum = 0
for i in range(0,len(data),3):
price = float(data[i+1])
discount = data[i+2]
if len(discount) == 2:
if discount == "半价":
discount = 0.5
else:
discount = float(discount[:-1])*0.1
else:
discount = float(discount[:-1])*0.01
sum += price*discount
print(math.ceil(sum/100)*100)
用excel对数据处理一下,求和很快出结果,对office不太熟练,勿喷,说说我自己的做法:(小白一个 欢迎指正,互相学习。)
将数据复制进excel中,点数据中的分列,将文本分成3列
将折扣那一列文本中的“折”字替换掉,半折替换成5
再在旁边一列中输入前两个想要的格式如0.88 0.65,选中下一格 按ctrl+e 自动填充得到一列0.88 0.65 0.9等格式的数据。
最后就是基本的excel公式的运用指定格相乘 最后求和得到结果。
print(5200)
import os
import sys
print(input())#我忘了是哪个大神讲的,正确答案最后会拿出来作比较,所以直接等于输入就行
这个真的6,测试通过100%
其余小妙招:
填空题直接输出结果,可以手算、在excel中算,print()结果。