蓝桥杯python组简单题(内含题目、解答和知识点归纳)

第一题:

题目描述

小蓝给学生们组织了一场考试,卷面总分为 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)

知识点归纳

1、循环遍历字符串

甚至连字符串都是可迭代的对象,它们包含一系列的字符:

实例

循环遍历单词 "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

1、count = str(i).count("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不太熟练,勿喷,说说我自己的做法:(小白一个 欢迎指正,互相学习。)

  1. 将数据复制进excel中,点数据中的分列,将文本分成3列

  2. 将折扣那一列文本中的“折”字替换掉,半折替换成5

  3. 再在旁边一列中输入前两个想要的格式如0.88 0.65,选中下一格 按ctrl+e 自动填充得到一列0.88 0.65 0.9等格式的数据。

  4. 最后就是基本的excel公式的运用指定格相乘 最后求和得到结果。

print(5200)

方法三:

import os
import sys
print(input())#我忘了是哪个大神讲的,正确答案最后会拿出来作比较,所以直接等于输入就行

这个真的6,测试通过100%

其余小妙招:

填空题直接输出结果,可以手算、在excel中算,print()结果。

你可能感兴趣的:(Python,蓝桥杯,学习,python)