24上学年python程序设计学习笔记

目录

python速查卡

​编辑

实验题回顾

输入

输出

提醒

数字进制转换

复数

chr()和ord()函数

判断回文字符

最大公约数和最小公倍数

判断素数(质数)

无限循环,记得一定要加上跳出条件

求数字字符串各位数之和

输出三角形字符矩阵,注意v的妙用

任意钱任意鸡问题

二维数组

1.求维度 

2.矩阵转置 

3.求最大列 

4.列交换   

求阶乘(复习递归)

统计电话号码中的数字出现次数:

排序:itemgetter

递归实现斐波那契数列

扑克牌排序

6174问题

抄袭查找(函数)

一帮一(条件排列问题)

字典的运用

杨辉三角第N行


  • python速查卡

  • 实验题回顾

输入

常见

n=int(input())   #最普遍  int可换成其他数据类型 适用于单行单个输入

a,b=input().split()     #适用于单行多个 
a,b=input().split(',')  # ‘’内可替换为其他符号

n=list(map(int,input().split()))   #单行多个 int处可转换为其他数据类型

for i in int(input()):      #适用于多行输入
    n=int(input())

for i in range(n):          #可指定输入n行
    m=input()

n=eval(input())      #可识别输入的类型

输出

常见

print('Hello world')    #最普遍的单行输出

print()      #换行

print('hello',end=' ')     #不换行输出
print('world',end=' ')

print('{}'.format(n))     #最常用的format输出,可变换多种形式
print('{:.2f}'.format(n))     #保留两位小数

print(' '.join(lst))    #间隔输出列表lst中的内容,注意列表lst中的值要为str类型

正则化输出

https://blog.csdn.net/m0_64336020/article/details/122460013icon-default.png?t=N7T8https://blog.csdn.net/m0_64336020/article/details/122460013

提醒

  • 计算小数记得把类型转换成float
  • 查找字符可用index方法
n=input()
m=input()
t=len(m)
m=m[::-1]
s=m.index(n)
print('index','=',t-s-1)
  • 数字进制转换

打印时不输出前缀可以使用 print(s[2:])

例题如下

def count(x, y):
    a = bin(x)[2:]
    b = bin(y)[2:]
    len1 = max(len(a), len(b))
    a = a.zfill(len1)
    b = b.zfill(len1)
    d = 0
    for i in range(len1):
        if a[i] != b[i]:
            d += 1
    return d
def total(n):
    t = 0
    for i in range(len(n)):
        for j in range(i+1, len(n)):
            t += count(n[i], n[j])
    return t
n=input().split()
lst=[]
for i in n:
    lst.append(int(i))
print(total(lst))
  • 复数
  1. 虚数不能单独存在,它们总是和一个值为 0.0 的实数部分一起构成一个复数
  2. 复数由实数部分和虚数部分构成
  3. 表示虚数的语法:real+imagej
  4. 实数部分和虚数部分都是浮点数
  5. 虚数部分必须有后缀j或J

a,b,c=map(complex,input().split())
m=a+b+c
n=a*b*c
m1=int(m.real)
n1=int(n.real)
m2=int(m.imag)
n2=int(n.imag)
print("{}{:+d}i".format(m1,m2))
print("{}{:+d}i".format(n1,n2))
  • 数字的操作有时候转换成字符串会简单一点,并合理运用切片功能
  • chr()和ord()函数
  1. ord()函数就是用来返回单个字符的ascii值(0-255)或者unicode数值()
  2. 相反地,chr()函数是输入一个整数【0,255】返回其对应的ascii符号
  3. 数字判断也可使用,即判断其ASCII码范围

n=str(input())
print(ord('0') <= ord(n[0]) <= ord('9') and ord('0') <= ord(n[1]) <= ord('9') and ord('0') <= ord(n[2]) <= ord('9'))
  • 判断回文字符
a=input()
print(a)
print(a[::-1]==a)

判断三角形,尤其注意顺序

a=float(input())
b=float(input())
c=float(input())
if a+b>c and a+c>b and b+c>a:
    if a==b==c:
        print('等边三角形')
    elif a==b or b==c or a==c:
        if a*1.414==b==c*1.414 or a*1.414==c==b*1.414 or b*1.414==a==c*1.414:
            print('等腰直角三角形')
        else:
            print('等腰三角形')
    else:
        print('普通三角形')
else:
    print('非三角形')
  • 计算两时间的差值,注意输出时的补零操作
a1,a2,a3=input().split(':')
b1,b2,b3=input().split(':')
a1,a2,a3,b1,b2,b3=int(a1),int(a2),int(a3),int(b1),int(b2),int(b3),
if a3>=b3:
    c3=a3-b3
else:
    c3=a3-b3+60
    a2=a2-1
if a2>=b2:
    c2=a2-b2
else:
    c2=a2-b2+60
    a1=a1-1
c1=a1-b1
print('{:0>2}:{:0>2}:{:0>2}'.format(c1,c2,c3))
  • 最大公约数和最小公倍数
  1. 求两个给定正整数的最大公约数和最小公倍数。
  2. 求m, n的最大公约数可以用辗转相除法,描述如下:A.取m做除数,n做被除数  B.用m除n,如果余数为0,则n为这两个数的最大公约数,结束。C.如果余数不为0,令m = n, n 等于上一步计算出的余数,回到B
  3. 最小公倍数等于两数乘积除以最大公约数
m,n=input().split()
m,n,a,b=int(m),int(n),int(m),int(n)
if m>=n:
    while m%n!=0:
        c=m%n
        m=n
        n=c
    else:
        print(c,a*b//c)
else:
    while n%m!=0:
        c=n%m
        n=m
        m=c
    else:
        print(c,a*b//c)
  • 判断素数(质数)

与之相反的是合数    !!!重要内容

if num%2 == 0:
    continue
for i in range(3,num):
    if num%i == 0:
        break
else:
    print(num,'是质数')

或 

def isPrime(num):
    if num == 2:
       return True
    if num%2 == 0:
       return False
    for i in range(3,num):
      if num%i == 0: 
         return False
    else: 
      return True

 或

def is_prime(n):
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    while i * i <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
    return True
  • 无限循环,记得一定要加上跳出条件

如下题

while True:
    a,b=input().split()
    c=0
    m=0
    if a=='0' and b=='0':
        break
    else:
        for i in range(2,-1,-1):
            m=int(a[i])+int(b[i])+m
            if m>9:
                c+=1
                m=1
            else:
                m=0
        print(c)
  • 求数字字符串各位数之和
total = 0
str1 = "123456"
for i in str1:      #逐一考虑字符串str1中的每个元素
    total += int(i)      #将每个元素转化成整型然后加起来
print(total)
  • 输出三角形字符矩阵,注意v的妙用

n=int(input())
m=n
v=0
for j in range(n,0,-1):
    for i in range(1,m+1):
        print('{}'.format(chr(64+i+v)),end=' ')
    print( )
    m=m-1
    v=v+j
  • 任意钱任意鸡问题

def cxk1(m,n):
    a,b=m,n
    num=[]
    for i in range(1,a//5+1):
        for j in range(a//3+1):
            k=a-i-j
            if k>=0 and i*5+j*3+k//3==n and k%3==0:
                num.append((i,j,k))
    l=len(num)
    return l
def cxk2(m,n):
    a,b=m,n
    num=[]
    for i in range(1,a//5+1):
        for j in range(a//3+1):
            k=a-i-j
            if k>=0 and i*5+j*3+k//3==n and k%3==0:
                num.append((i,j,k))
    return num            
for i in range(int(input())):
    a,b=input().split()
    a,b=int(a),int(b)
    print(cxk1(a,b))
    for i in cxk2(a,b):
        print(*i,sep=' ')
  • 二维数组
1.求维度 

 输入上面格式的矩阵M,输出矩阵M的维度 例如, M=[[1,2],[3,4],[5,6] ] 返回 [3, 2]。

l=[]
while True:
    m=input()
    if m=='end':
        break
    m=m.split()
    n=[]
    for i in m:
        n.append(int(i))
    l.append(n)
print(len(l),len(l[0]))

2.矩阵转置 

 输入上面格式的矩阵M,输出矩阵M的转置。例如, M=[[1,2],[3,4],[5,6] ] ,转职为 [[1,3,5], [2,4,6]]。

l=[]
while True:
    m=input()
    if m=='end':
        break
    m=m.split()
    n=[]
    for i in m:
        n.append(int(i))
    l.append(n)
k=[[l[j][i] for j in range(len(l))] for i in range(len(l[0]))]
for i in k:
    print(' '.join(str(j) for j in i))

3.求最大列 

 输入上面格式的矩阵M,寻找矩阵M中元素总和最大的列,  如上面矩阵中第三列元素的总和最大,则输出12(7+5=12)。

l=[]
while True:
    m=input()
    if m=='end':
        break
    m=m.split()
    n=[]
    for i in m:
        n.append(int(i))
    l.append(n)
k=[[l[j][i] for j in range(len(l))] for i in range(len(l[0]))]
w=[]
s=0
for i in k:
    for j in i:
        s+=j
    w.append(s)
    s=0
print(max(w))

4.列交换   

 输入上面格式的矩阵M,交换矩阵M的第i列和第j列,输出新的矩阵。

l=[]
while True:
    m=input()
    if m=='end':
        break
    m=m.split()
    n=[]
    for i in m:
        n.append(int(i))
    l.append(n)
i,j=input().split()
i,j=int(i),int(j)
for a in l:
    a[i-1],a[j-1]=a[j-1],a[i-1]
for i in l:
    print(' '.join(str(j) for j in i))
  • 往字符串前补零到n位     s.zfill(n)      s为字符串 
  • 判断是否为字母  s.isalpha() 可以判断「字符串」是否只包含[字母],包括大小写
  • 求阶乘(复习递归)
def fac(num):
    if num == 1:
        return 1
    else:
        return num*fac(num-1
  • 统计电话号码中的数字出现次数:

• 输入tel_num为11位电话号码,输出一个字典保存数字0~9出现的次数,字典的键为 数字,值为出现的次数。

• 例子:输入18689499171, 输出字典 {1:3, 4:1, 6:1, 7:1, 8:2, 9:3}

num = input() #输入电话号码
digits = {} #首先创建空字典

for i in num:
    if i in digits: #如果字典里已经有该数字的键,则更新值
        digits[i]+=1
    else: #如果字典里没有该数字的键,则添加键值对
        digits[i]=1 

print(digits)
  • 排序:itemgetter

>>>phonebook='Linda':'7750'.'Bob':'9345'.'Carol':'5834'

>>>from operator import itemgetter
>>>sorted(phonebook.items().key=itemgetter(l))#按字典中元素值进行排序

[('Carol','5834').('Linda'.'7750'.('Bob','9345')]

>>>sorted(phonebook.items().key=itemgetter(0))#按字典中元素的键进行排序

[('Bob','9345'),('Carol','5834'),('Linda'.'7750')]

>>> gameresult = [['Bob', 95.0. 'A’]. ['Alan'. $6 0. 'C’], ['Mandy'. 83 5. 'A']. ['Rob', 89 3. 'E’]]
>>>sorted(gameresull.key=itemgeter(0,1))#按姓名升序,姓名相同按分数升序排序

[['Alan'. s6 0. ']. ['Bob'. 95.0. 'A'], ['Mandy'. 83 5. 'A']. ['Rob'. 89.3.'E']]
>>>sored(gameresull.key=itemgeller(1,0))#按分数升序,分数相同的按姓名升序排序

[['Mandy'. s3 5. 'A']. ['Alan'. $6 0. 'C']. ['Rob'. 89 3. 'E']. ['Bob'. 95.0. 'A']]
>>>sored(gameresulr,key=itemgerer(2,0))#按等级升序,等级相同的按姓名升序排序

[['Bob'. 95 0. 'A']. ['Mandy'. 83 5.'A'], ['Alan'. 86.0.'C']. ['Rob'. 89 3.'E']]

练习
>pvonresult =[{'name':'Tom', 'exam': 80, 'lab': 70, 'grade': 75.0},

                      {'name':'David', 'exam': 70, 'lab': 80, 'grade': 75.0},

                      {'name':'Lucy', 'exam': 50, 'lab': 62, 'grade': 56.0},

                      {'name':'Bill', 'exam': 80, 'lab': 80, 'grade': 80}]
>sored(pythonresult .key=itemgerter( 'grade','exam'))
#按‘grade'升序,该值相同的按'exam'升序排序
[{'name': 'Lucy', 'exam': 50, 'lab': 62, 'grade': 56.0}

{'name': 'David', 'exam': 70,'lab':80, 'qrade': 75.0}

{'name': 'Tom', 'exam': 80,'lab':70. 'grade': 75.0}

{'name':'Bill', 'exam': 80, 'ab': 80,'grade': 80}]

例题如下

lst=[]
lst2=[]
for i in range(int(input())):
    x=list(input().split())
    lst.append(x)
from operator import itemgetter  #记得引入
lst1=sorted(lst,key=itemgetter(0,1,2))
for j in lst1[1]:
    lst2.append(str(j))
print('-'.join(lst2))
  • 输出全排列

def swap(num, i, j):
    for x in range(j, i, -1):
        tmp = num[x]
        num[x] = num[x-1]
        num[x-1] = tmp
def swapback(num, i, j):
    for x in range(i, j):
        tmp = num[x]
        num[x] = num[x+1]
        num[x+1] = tmp    
def permutation(numbers, start):
    if start == len(numbers) - 1:
        print("".join(numbers))
    else:
        for i in range(start, len(numbers)):
            swap(numbers, start, i)
            permutation(numbers, start + 1)
            swapback(numbers, start, i)
def func():
    num = int(input())
    numbers = []
    for i in range(1, num + 1):
        numbers.append(str(i))
    permutation(numbers, 0)
func()
  • 递归实现斐波那契数列
def fib(n):
    if n==1 or n==2:
        return 1
    elif n==0:
        return 0
    else:
        return fib(n-1)+fib(n-2)
for i in range(int(input())):
    print(fib(int(input())))
  • 扑克牌排序

for i in range(int(input())):
    n=int(input())
    lst=list(map(str,input().split()))
    lst1=[x for x in lst if x == '大王']
    lst2=[x for x in lst if x == '小王']
    lst3=[x for x in lst if x[:2] == '黑桃']
    lst4=[x for x in lst if x[:2] == '红桃']
    lst5=[x for x in lst if x[:2] == '梅花']
    lst6=[x for x in lst if x[:2] == '方块']
    lst0=['A','K','Q','J','1','9','8','7','6','5','4','3','2']
    lst11=[lst3,lst4,lst5,lst6]
    lsts=[]
    for k in lst11:
        for o in k:
            k=sorted(k,key=lambda o:lst0.index(o[2]))   #注意这一个排序,关键!!!
        lsts.extend(k)
    lstt=lst1+lst2+lsts
    print(' '.join(lstt))
  • 6174问题

def circle(num):
    count = 0
    while True:
        digits = [int(d) for d in str(num)]
        digits.sort(reverse=True)
        a = int(''.join(map(str, digits)))
        b = int(''.join(map(str, sorted(digits))))
        num = a - b
        if len(str(num)) < 4:
            num *= 10
        count += 1
        if num == 0 or num == 6174:
            count+=1
            break
    return count
n = int(input())
for _ in range(n):
    print(circle(int(input())))
  • 抄袭查找(函数)

def f1(m,n):
    num=0
    s=min(len(m),len(n))
    for i in range(s):
        if m[i]==n[i]:
            num+=1
    if num/s>=0.9:
        return True
    else:
        return False
def f2(a,b):
    for i in range(1,4):
        if f1(a[i],b[i])==True:
            print('{} {} {}'.format(a[0],b[0],i))
lstt=[]
l=int(input())
for i in range(l):
    lst=[]
    for k in range(4):
        lst.append(str(input()))
    lstt.append(lst)
for i in range(l):
    for j in range(i+1,l):
        f2(lstt[i],lstt[j])
  • 一帮一(条件排列问题)

注意不同列表的运用

lst0=[]
lst1=[]
lst3=[]
l=int(input())
for i in range(l):
    x,y=input().split()
    if x=='0':
        lst0.append(y)
    elif x=='1':
        lst1.append(y)
    lst3.append(y)
p=int(l/2)
lst3=lst3[:p]
for j in lst3:
    if j in lst0:
        s=j+' '+lst1[-1]
        print(s)
        lst1.remove(lst1[-1])
    elif j in lst1:
        s=j+' '+lst0[-1]
        print(s)
        lst0.remove(lst0[-1])
  • 字典的运用

例题1

a=int(input())
o=input()
b=int(input())
if o=='/' and b==0:
    print('divided by zero')
else:
    dic={'+':a+b,'-':a-b,'*':a*b,'/':a/b}
    print('{:.2f}'.format(dic[o]))  #字典值的获取

例题2

a=input().split()
b=input().split()
s1=set()
s2=set()
for i in a:
    s1.add(int(i))
for i in b:
    s2.add(int(i))
o=input()
dic={'|':s1|s2,'&':s1&s2,'-':s1-s2,'^':s1^s2}
if dic[o]==set():
    print('None')
else:
    lst=[]
    for i in sorted(list(dic.get(o))):  #好用的方法
        lst.append(str(i))
    print(','.join(lst))
  • 杨辉三角第N行

def sheep(n):
    row = [1]
    for i in range(n):
        row = [x + y for x, y in zip([0] + row, row + [0])]
    return row
n=int(input())
s=' '.join(str(i) for i in sheep(n-1))
print('{} '.format(s))
  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值