【小白向】蓝桥杯练习系统——基础练习部分python语句解析


本文定位是面向小白(我本人),梳理一些在蓝桥杯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进制输出
2,10,8,16进制

十六进制转十进制

与上一题同理啦

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的,没想到混了个奖哈哈哈哈哈哈!很满足,感激自己刷题的时光,大家加油
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值