本文定位是面向小白(我本人),梳理一些在蓝桥杯python中 常用的语句和用法知识点等,以期加深印象,避免看得懂写不出来的情况。
基础练习代码参考了以下文章:
蓝桥杯 2020 基础练习 python
蓝桥杯 基础练习Python答案(含VIP试题)
蓝桥杯
Python解答蓝桥杯省赛真题之从入门到真题
蓝桥杯Python这一篇就够了-训练系统题库合集(包括VIP试题)&数据结构与算法
在文章开头首先表达诚挚的谢意!
以下语句按 蓝桥杯练习系统出现前后顺序整理
如果你感到吃力:系统学习python:菜鸟教程-python3
数列排序
n = eval(input())
l = list(map(int,input().split()))
l.sort()
for i in range(n):
print("{}".format(l[i]),end=' ')
n = eval(input())
最简单的一个获取输入,将input获得的字符串通过eval函数去掉" "变成数字保存在n中l = list(map(int,input().split()))
map:根据前一个参数的功能对后一个参数的内容进行处理
split(str):将字符串按指定字符分隔,str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
list是列表,因此本句的作用是:
将用户输入的以空格为间隔的一个数列,拆分为一个个元素,每一个元素都转化为整形,然后构造一个列表存在其中。
对于列表,可以使用l.sort()进行排序for i in range(n): print("{}".format(l[i]),end=' ')
format是格式化字符串函数,可以将format函数中的参数一一对应打印到{}所在的位置
例如:print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
本句的作用,就是通过循环访问下标,一次打印排好序的列表中的一个元素,并在元素后面end补充打印一个空格,这样循环n次,以输出整个排好序的列表
十六进制转八进制
n = eval(input())
for i in range(n):
s = input()
s = "0x"+s
t = eval(s)
print("{:o}".format(t))
首先输入n是告诉系统后面要输入n行,接下来就可以循环输入n行,s = "0x"+s
是对其增加16进制标记,然后去掉双引号,利用.format格式化输出达到直接将16进制转换8进制的目的
其中{:o}
是8进制输出
十六进制转十进制
与上一题同理啦
s = input()
s = "0x"+s
t = eval(s)
print("{:d}".format(t))
还可以通过int函数和指定输入字符串的进制进行变化:
n = input()
s = "0x"+n
print(int(s,16))
十进制转十六进制
同理,但是发现蓝桥评测系统要大写的X才行!
n = eval(input())
print("{:X}".format(n))
特殊回文数
切片:
[开始:结束:步进]
n = int(input())
for num in range(10000, 1000000):
temp = str(num)
if temp[0:] == temp[::-1]: #判断是否是回文数
if sum(list(map(int, temp))) == n:
print(num)
str()将数字转换为字符串,[0:]指正序字符串,[::-1]指逆序字符串,倒着步进嘛
然后用sum将temp字符串转换为整形再转换为列表再求和看是不是等于输入的n,是就打印
原作者真聪明!
回文数
逻辑同上
for num in range(1000, 10000):
temp = str(num)
if temp[0:] == temp[::-1]: #判断是否是回文数
print(num)
特殊的数字
for num in range(100, 1000):
temp = str(num)
baihe=(num//100)*(num//100)*(num//100)
shihe=(num%100//10)*(num%100//10)*(num%100//10)
gehe=(num%100%10)*(num%100%10)*(num%100%10)
if baihe+shihe+gehe==num: #判断是否是回文数
print(num)
%是取余,//是除
15%10==5
15//10==1
杨辉三角形
其中的主要思想是:
- 用一个二维的列表作为数据结构,存储整个三角形,没有数据的地方就赋值为0
- 每一个元素来自于它上面左右两个元素的和
- 然后两重循环进行赋值和打印
s = [[0 for i in range(n)] for j in range(n)]
是指初始化一个二维列表s,其中i在n范围内赋值为0,j在n范围内赋值为0
详细可以搜索“列表推导式”
n = int(input())
s = [[0 for i in range(n)] for j in range(n)]
for num in range(n):
s[num][0] = 1
for i in range(n):
for j in range(i+1):
s[i][j] = s[i-1][j-1] + s[i-1][j]
for i in range(n):
for j in range(n):
if s[i][j] != 0:
print(s[i][j],' ', end = '')
print('')#是为了打印完一行换行
查找整数
n=eval(input())
l = list(map(int,input().split()))
f=eval(input())
if f in l:
print(l.index(f)+1)#+1是因为位置从1开始编号
break
else:
print(-1)
这题有一个可以用的知识点就是in,可以直接判断一个数在不在列表中存在,然后index可以获取这个数在列表中的下标位置
如果不懂这两个函数,还可以遍历:
n=eval(input())
l = list(map(int,input().split()))
f=eval(input())
for i in range(n):
if f==l[i]:
print(i+1)
break
else:
print(-1)
数列特征
(python真香)
n = eval(input())
l = list(map(int,input().split()))
print(max(l))
print(min(l))
print(sum(l))
字母图形
abs是返回绝对值
能想到这个规律原作者真是小天才……
n,m = map(eval,input().split())
l = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
for i in range(n):
for j in range(m):
s = abs(j-i)
print(l[s],end = '')
print()
01字串
这题就是得对format格式输出足够熟悉啊
#print(int(0b11111)) 31
for i in range(32):
print("{:0>5b}".format(i))
{:0>5b}:数字补零 (填充左边, 宽度为5),b代表二进制写法,将32从大到小,转换为二进制也是从大到小
闰年判断
闰年:可整除4且不可整除100
或可整除400
n = eval(input())
if n%4==0 and n%100!=0 or n%400==0:
print("yes")
else:
print("no")
Fibonacci数列
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
说实话我半懂不懂
# feibonacci
def feibonacci(i):
f1 = f2 = f3 = 1
for num in range(2, i):
f3 = (f1 + f2) % 10007
f1 = f2
f2 = f3
return f3
x = int(eval(input()))
print(feibonacci(x))
圆的面积
%是打印占位符
PI = 3.14159265358979323
r = int(input())
s = PI * r * r
print("%.7f" % s)
序列求和
x = int(input())
total = int((1+x)*x/2)
print(total)
这里是直接使用了等差数列求和公式,哈哈哈哈哈哈太强了
A+B问题
m,n =map(int,input().split())
print(m+n)
end
2021.5.3更新:泪目,本非cs专业渣渣混了一个第十二届蓝桥杯省三,本来只是单纯想报个比赛督促我接触算法和复习python的,没想到混了个奖哈哈哈哈哈哈!很满足,感激自己刷题的时光,大家加油