PY学习记录#3

py的max()函数可以完美解决三个数比大小……

x=int(input())
y=int(input())
z=int(input())
print(max(x,y,z))

何必自己造轮子

 

map()

这玩意真血妈好使

x=input()
a,b=map(int,str.split(x))

配合str.split()

可以输入一串然后分配给各个变量

split可把所有的空字符,包括空格,tab,换行符全忽略掉

然后map映射到每一个变量里去

 

if不加括号还要在后面加:

else也要加:

绝了

 

练习题题解

T1判断奇偶数

上课讲过了已经

if else结构最简单的形式

直接上代码

a=int(input())
if a%2==1 :
    print("jishu")
else :
    print("oushu")

 

T2货物托运费

这个其实与上一道题大同小异

程序逻辑框架是一样的

输出部分多点算式而已

上代码

a=int(input())               #输入数据
if a<=50 :                   #如果货物重量在50KG以内
    print(a*2)               #输出货物托运费
else :                       #如果货物重量高于50KG
    print(100+(a-50)*1.5);   #输出总货物托运费,第一段直接加上100,第二段是原重量-50再乘上1.5

 

T3年龄划分

其实跟上面的题目区别也不大

就是在ifelse结构里面多加了很多elif而已

解题过程就是把题干抄一遍

age=int(input())
if age<=44:               #44岁以下
    print("青年")          #是青年
elif age<=59:             #45至59岁
    print("中年人")        #为中年人
elif age<=74:             #60岁至74岁
    print("年轻的老年人")   #为年轻的老年人
elif age<=89:             #75岁至89岁
    print("老年人")        #为老年人
else :                    #90岁以上
    print("长寿的老年人")   #为长寿老人

 

T4判断闰年

这个题目纯用逻辑来写选择嵌套很费脑子

写出来还不一定没漏洞

所以我们可以整点花活

这里我隆重介绍sys库中的sys.exit()函数

这个函数的作用就是使正常运行的程序退出

这个函数的参数只有0和1

0代表正常退出

1代表异常退出

所以我们的代码可以写的非常扁平

上代码

import sys
a=int(input())
if a%4!=0:
print("No")
sys.exit(0)
if a%4000==0:
print("Yes")
sys.exit(0)
if a%1000==0:
print("No")
sys.exit(0)
if a%400==0:
print("Yes")
sys.exit(0)
if a%100==0:
print("No")
sys.exit(0)
if a%4==0:
print("Yes")

但是我们细心观察后发现很多条件根本就是混淆视听的

1000不闰和4000再闰都可以作为100和400这两个条件的子集

这两个条件根本不用管

这样的话要满足的条件就少了两个

代码也可以好看很多了

另外在if语句里不可以用逻辑运算符

绝了

a=int(input())
if a%4==0 and a%100!=0:
    print("Yes")
elif a%400==0:
    print("Yes")
else:
    print("No")

 

T5判断三角形

这题就尼玛离谱

离大谱

说好了选择结构是吧

这题要是写成纯粹的选择结构能成啥样出题人你没点B数吗

你好歹规定以下最长边是谁吧

import sys
a=int(input())
b=int(input())
c=int(input())
if (a<=b and b<=c)or(b<=a and a<=c):
    if a+b>c:
        if a==b:
            if a==b and b==c:
                print("dengbian")
                sys.exit(0)
            print("dengyao")
            sys.exit(0)
        if a*a+b*b==c*c:
            print("zhijiao")
            sys.exit(0)
    else:
        print("yiban")
if (a<=c and c<=b)or(c<=a and a<=b):
    if a+c>b:
        if a==c:
            if a==b and b==c:
                print("dengbian")
                sys.exit(0)
            print("dengyao")
            sys.exit(0)
        if a*a+c*c==b*b:
            print("zhijiao")
            sys.exit(0)
    else:
        print("yiban")
if (b<=c and c<=a)or(c<=b and b<=a):
    if b+c>a:
        if c==b:
            if a==b and b==c:
                print("dengbian")
                sys.exit(0)
            print("dengyao")
            sys.exit(0)
        if b*b+c*c==a*a:
            print("zhijiao")
            sys.exit(0)
    else:
        print("yiban")

这段代码虽然执行效率没啥问题

但是写成这样确实说不过去

所以我们优化一下

这里我们引入自定义函数的概念

通过观察代码结构我们可以发现判断三角形的核心部分三段代码差不多

只有变量名的区别

所以我们可以

把他写进自定义函数里面去

自定义函数的实例看代码

这里是自定义函数的一种使用方式,传进参数然后用return返回参数

更多用法以后正式学习再讲。

def sanjiao (a,b,c):                #注意这里也要加冒号
    if a+b>c:
        if a==b:
            if a==b and b==c:
                return("dengbian")
            return("dengyao")
        if a*a+b*b==c*c:
            return("zhijiao")
    else:
        return("yiban")
x=int(input())
y=int(input())
z=int(input())
if (x<=y and y<=z)or(y<=x and x<=z):
    print(sanjiao(x,y,z))
if (x<=z and z<=y)or(z<=x and x<=y):
    print(sanjiao(x,z,y))
if (y<=z and z<=x)or(z<=y and y<=x):
    print(sanjiao(y,z,x))

但是我们的代码结构没有改变,还是在写代码的时候手动枚举各种情况

如果我们能解决不知道谁是最长边的问题,顺带锁定剩下两条边是谁

这个题最恶心的部分也就解决了

所以我们引入一个叫list的玩意

定义起来很简单

a=[]

这就是一个list,它相当于是一堆变量的集合体。

那我们如何把数据读入进list里面去呢

还记得之前说过的split()函数吗

由于py输入默认字符串的神奇特性

我们可以先读入到一个变量里,然后用split把单个数据分离开

分组导入我们的list里

默认从0位开始排

调用的时候直接调用a[0],a[1]即可

说了好几行实现起来只有两行

x=input()
a=x.split()

list最逆天的就是这玩意自带一些很好用的函数

比如sort函数

这个函数的作用就是把list里的数据排序好

默认升序,加上下面代码里的参数可以改成降序

上代码

import sys
a= []
x=input()
a=x.split()
a[0]=int(a[0])
a[1]=int(a[1])
a[2]=int(a[2])
a.sort(reverse=1)
if a[1]+a[2]>a[0] :
    if a[1]==a[2] :
        if a[0]==a[1]==a[2] :
            print("dengbian")
            sys.exit(0)
        print("dengyao")
        sys.exit(0)
    if a[1]*a[1]+a[2]*a[2]==a[0]*a[0] :
        print('zhijiao')
        sys.exit(0)
    print("yiban")
    sys.exit(0)

 10.8更新

我是傻逼

if a+b>c and a+c>b and b+c>a

 

T6

判断等级

这个题又变简单了

跟前面那个判断年龄的没区别

代码是那个题改的

age=int(input())
if age<60:
    print("E")
elif age<=69:
    print("D")
elif age<=79:
    print("C")
elif age<=89:
    print("B")
else :
    print("A"

 

T7

二元一次方程

上课讲了,逻辑与解数学题一模一样

先看delta是否为0

如果不是就按大于小于分开讨论

这里改进一下复数的处理方法

引入cmath库里的cmath.sqrt()函数

专门用于计算复数开根号的情况

上代码

import math
import cmath
import sys
def formula(a,b,c):
delta=b*b>4*a*c
if delta==0:
print(-(b/(2*a)))
sys.exit(0)
else :
if delta>0:
root=math.sqrt(delta)
else:
root=cmath.sqrt(delta)
x1=(-b+root)/(2 * a)
x2=(-b-root)/(2 * a)
print(x1,x2)

x=float(input())
y=float(input())
z=float(input())
formula(x,y,z)

 

T8

简易计算器

这个题其实很简单

因为题目没有规定输入格式

所以我们完全可以读入三个字符串完事

剩下的就是四个if了

a=int(input())
b=input()
c=int(input())
if b=="+":
    d=a+c
    print(d)
elif b=="-":
    print(a-c)
elif b=="*":
    print(a*c)
elif b=="/":
    print(a/c)
else :
    print("运算符错误,无法计算")​

 

posted @ 2021-09-24 14:24  JS_Pierre  阅读(90)  评论(0编辑  收藏  举报