蓝桥杯 第1天 基本语法训练(1)

目录

 1.这是一道签到题

2.排列式

一.全排列做法

(1)python标准库的全排列函数

(2)解题

(3)全排列的自己实现(深度优先搜索)

3.小飞机

4.乘法表

5.KiKi学程序设计基础

6.疫情死亡率

7.爱因斯坦的名言

8.开学?

9.helloworld

10.a+b

11.反向输出一个四位数

12.计算三角形的周长和面积


 1.这是一道签到题

print("zhe\nshi\nyi\ndao\nqian\ndao\nti")

2.排列式

这叫基本语法训练????

看来一下很多提交成功的,居然是直接把答案输出就行,震惊一年

先贴一些参考了的经验贴的写法

(37条消息) C语言 · 排列数 · 排列式_weixin_34268610的博客-CSDN博客

(37条消息) 【c++】排列式_t0403的博客-CSDN博客

一.全排列做法

(1)python标准库的全排列函数

要用到的是itertools库里面的permutations函数,可以实现排列功能

import itertools
s=[1,2,3]
ans=list(itertools.permutations(s,3))
print(ans)

(2)解题

因为每个数字只会出现一次,所以先全排列生成所有可能的排列

之后就枚举所有的排列情况,通过观察答案可知:

最左边的都是4位数,中间为两位或者一位,右边为三位或者四位

所以对排列之后的元组进行切片,根据位置分出来三个元组,分别将它们通过getvalue换算成数字

这一题用这种方法也还是感觉有点投机取巧,因为将全排列分成三个元组时,是根据答案已给的情况分的,总感觉有点不好

from itertools import permutations#导入全排列函数
def getvalue(lists):#输入一个列表,例如[1,2,3],返回123,也就是将列表转换成数字
    length=len(lists)
    ans=0
    for i in range(length):
        ans = ans*10+lists[i]
    return ans

a=[i for i in range(1,10)]
pa=list(permutations(a))#全排列
length=len(pa)
for i in range(length):
    z=getvalue(pa[i][:4])
    x1=getvalue(pa[i][4:6])
    y1=getvalue(pa[i][6:9])
    x2=getvalue(pa[i][4:5])
    y2=getvalue(pa[i][5:9])
    if x1*y1==z:
        print(z,"=",x1,"x",y1)
    elif x2*y2==z:
        print(z,"=",x2,"x",y2)

(3)全排列的自己实现(深度优先搜索)

def dfs(level):
    if(level==3):
        print(plist)
    for i in range(3):
        if(vis[i]==False):
            vis[i]=True
            plist.append(i)
            dfs(level+1)
            plist.pop()
            vis[i]=False
plist=[]
vis=[False for i in range(3)]
dfs(0)

突然发现Python好像没有C那么严格的引用顺序要求 

3.小飞机

先贴一个关于format总结的比较全的帖子 

(37条消息) Python之format的用法详解_我想我很倔强的博客-CSDN博客_format用法

print("{:^12}".format("**"))
print("{:^12}".format("**"))
print("{}".format(12*"*"))
print("{}".format(12*"*"))
print("{}{}{}".format(4*" ","*  *",4*" "))
print("{}{}{}".format(4*" ","*  *",4*" "))

format的一些左对齐右对齐的黑科技有时候还是挺好用的 

4.乘法表

(1)Python的print是自带换行的,如果不想要它换行,要在print后面加上一个end=""

(2)想要换行时,直接print()即可

(3)注意这里的结果是需要向右对齐的

for i in range(1,10):
    for j in range(1,i+1):
        print("{}*{}={:2d} ".format(j,i,i*j),end="")
    print()

5.KiKi学程序设计基础

这里有一个比较烦人的地方在于输入的内容里有引号,正常输出的话会有bug

需要加上r来使其不转义

print(r'printf("Hello world!\n");')
print(r'cout << "Hello world!" << endl;')

6.疫情死亡率

(1)要用float不能用int,否则会导致一些四舍五入

(2)注意百分号的format使用方法

a,b=map(float,input().split())
print("{:.3%}".format(b/a))

7.爱因斯坦的名言

print('"Genius is 1% inspiration and 99% perspiration."')

如果输出的语句里面包含了双引号,那么有以下几种办法

(1)再外面套上一层单引号

(2)在每个双引号前面加上一个右斜杠

(3)使用r,参考第5题

8.开学?

用好取余的操作,要注意如果今天是星期一,推迟了13天,那就是下个星期天,但是如果直接取余就是0了,要特判7的倍数

a,b=map(int,input().split())
ans=a+b
if(ans%7!=0):
    print(ans%7)
else:
    print(7)

9.helloworld

(1)chr函数可以将数字转换成对应的字符

(2)ord函数可以将字符转换成对应的ASCII码

a="hello world"
for i in a:
    print(chr(ord(i)+1),end="")

10.a+b

依然是format的神奇用法

二进制b

十进制d

八进制o

十六进制x

a,b=map(int,input().split())
print("{:x}".format(a+b))

11.反向输出一个四位数

切片,妙哉

a=input()
print(a[::-1])

12.计算三角形的周长和面积

已知三边,求三角形的面积,记住这个公式

a,b,c=map(int,input().split())
print("circumference={:.2f}".format(a+b+c),end=" ")
s=(a+b+c)/2
print("area={:.2f}".format((s*(s-a)*(s-b)*(s-c))**0.5))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值