赞
踩
自学python中,此文章目的为记录练习过程,同时督促自己每天练习一道python题目,题目来源于网络,代码由自己书写,初学者,仅为记录,大佬不喜勿喷,尽量书写注释,如有错误,欢迎指正,如果有推荐的题目可以评论
目前感觉对python的基础编程掌握的好一点了,我并不是做代码开发的,所以并不需要过多深入学习语言,所以主要就更新这么多了,不定期会做一两道题巩固语言
- money=float(input("请输入当月利润(单位:万):"))
- money1=[100,60,40,20,10,0]
- # 提成档位
- raters=[0.01,0.015,0.03,0.05,0.075,0.1]
- # 提成比例
- money2=0
- # 提成总金额
- for i in range(len(money1)):
- if money-money1[i]<0:
- # 计算是否达到档位,达到进行计算,未到达则跳过该档位
- continue
- else:
- money2=(money-money1[i])*raters[i]+money2
- # 计算提成金额并且和之前计算的提成金额相加
- money=money-(money-money1[i])
- # 计算剩余金额,以便后续档位计算
- print(f"应发奖金总数为{money2}万元")
-

运行结果如下:
- for i in range(1,10):
- # 设定一个1到9的for循环,步长不写默认为1
- print()
- # 换行
- for j in range(1,i+1):
- # 以当前循环的i为界限设定第二个循环
- print(f"{i}*{j}={i*j}\t",end='')
- # 输出结果
运行结果如下:
原题目链接第十三题
- for i in range(100, 1000):
- s = str(i)
- # 将i转化成字符串类型以便使用函数
- if int(s[-1]) ** 3 + int(s[-2]) ** 3 + int(s[-3]) ** 3 == i:
- print(i)
- else:
- continue
PS:这道题没有想到特别好的思路,想到的几个都比原作者的占用资源,所以我就把原作者的进行了一下改进,节省一点地址空间(一丢丢)
- num = int(input('请输入需要分解的整数\n'))
- # 这里我没写输入验证去判断输入的是不是一个整数,只写功能,不然太冗余了
- num1 = num
- # 讲输入的整数提前存储留作后面做验证
- list1 = []
- # 创建一个列表储存分解出来的质因数
- while True:
- # 不确定有几个质因数,所以创建无限循环并且设置出口
- for i in range(2, num + 1):
- # 从2到当前值判断质因数
- if num % i == 0:
- # 判断当前值是否为因数
- if num // i == 1:
- # 判断当前值是否是本身,是则不改变值,不是则计算出除因数后的值
- num = num
- else:
- num = num // i
- list1.append(i)
- # 将判断出的因数加入列表
- break
- if num == i:
- # 如果当前循环值等于本身则判断目前所有因数之积是否和输入的数字相等
- list2 = 1
- for j in range(len(list1)):
- list2 = list1[j]*list2
- # 用for循环将所有因数相乘
- if list2 == num1:
- break
- # 判断相等即可退出循环
-
- print(list1)
- # 打印列表

运行结果如下:
PS:虽然写了注释,但是思路这个东西不是一句两句可以说清楚的,想弄明白最好自己打个断点多走几遍(大佬就当没看见这句话)
原题目链接第二十题
- high=float(input('请输入高度'))
- count=int(input('请输入弹跳次数'))
- length=0
- for i in range(1,count+1):
- if i!=count:
- # 只计算到最后一次落地时走过的路程,弹起后不算
- length=high*1.5+length
- elif i==count:
- length=high+length
- high=high/2
- print(f"最后的高度是{high},走过的路程是{length}")
运行结果如下:
PS:这道题如果像作者一样用for循环做会很简单,不过就有点浪费这道题了,这是一道很经典的递归问题,所以我打算使用递归思想来做,并且让用户输入天数
原题目链接第二十一题
- def monkey(day):
- if day==1:
- return 1
- # 递归到最后一层设置出口返回1(其实这里把1改成参数,就也使得最后一天剩的数量也可以手动输入了)
- else: peach=(monkey(day-1)+1)*2
- return peach
- day=int(input('请输入猴子吃桃的天数'))
- print(monkey(day))
运行结果如下:(这猴子真能吃,第一天吃了700多)
原题目链接第二十五题(第二十六题就直接把factorial函数单独调用就可以了)
- def add(num):
- # 计算和的函数
- if num==1:
- return 1
- else:
- num1=add(num-1)+factorial(num)
- # 当前数的阶乘加上之前所有数的阶乘和
- return num1
- def factorial(num):
- # 计算阶乘的函数
- if num==1:
- return 1
- else:
- return factorial(num-1)*num
- # 当前数的阶乘
- num=int(input('请输入整数'))
- print(add(num))

输出结果如下:(太大了不好验证,所以使用4)
原题目链接第三十八题
- mat = []
-
- # 创建一个空列表储存矩阵
- def shuru():
- mat1 = []
- # 第二个空列表储存一行矩阵
- while True:
- mat2 = input('请按行输入矩阵,以‘#’结束输入')
- if mat2 == '#':
- break
- mat.append(list(mat2.split(' ')))
- shuru()
- # 调用函数
- result = 0
- # 设置参数储存结果
- for i in range(len(mat)):
- print(mat[i])
- for i in range(len(mat)):
- # 循环每一行矩阵
- try:
- result += int(mat[i][i])
- # 无异常就直接累加
- # 设置这个是防止输入的不全,比如第一行是【1,0,0】结果只输入了【1】
- except:
- result += 0
- # 如果报异常了就直接+0
- print(result)
-

输出结果如下:
原题目链接第四十四题
- mat = []
- matrix = []
- matadd = []
- transitionMat=[]
- # 创建空列表储存矩阵
-
- def shuru(matr):
- num=0
- # 创建一个参数储存最长列数
- mat1 = []
- # 第二个空列表储存一行矩阵
- while True:
- mat2 = input('请按行输入矩阵,回车结束一行输入,‘#’结束矩阵输入')
- if mat2 == '#':
- break
- matr.append(list(mat2.split(' ')))
- for i in range(len(matr)):
- if len(matr[i])>num:
- num=len(matr[i])
- return num
- # 返回最长列数
-
-
- print('请输入第一个矩阵')
- long1 = shuru(mat)
- # 调用函数
- print('请输入第二个矩阵')
- long2 = shuru(matrix)
- # 调用函数
-
- if len(mat) != len(matrix) or long1 != long2:
- # 判断两个矩阵的形状是否相等,相等继续计算,不相等告诉用户不相等
- print('输入的两个矩阵不满足相加的最基本条件,即两个矩阵的形状不同')
- else:
- for i in range(len(mat)):
- # 创建两个for循环以行数和列数作为循环次数创建一个空的相同形状的列表用以接受数据
- for j in range(long1):
- transitionMat.append(0)
- # 用0占位
- matadd.append(transitionMat)
- # 将一行追加到里面
- transitionMat=[]
- # 追加一行后清空中转列表,为什么不用clear函数看昨天的代码的注释
-
- for i in range(len(mat)):
- for j in range(long1):
- try:
- matadd[i][j] = int(mat[i][j]) + int(matrix[i][j])
- # 计算加和,改成'*'就可以变成计算乘积
- except:
- try:
- matadd[i][j] = int(mat[i][j]) + 0
- # 如果用户输入不全则会进入这里,默认为0继续计算
- except:
- matadd[i][j] = 0 + int(matrix[i][j])
- # 如果用户输入不全则会进入这里,默认为0继续计算
- print('输入的第一个矩阵是')
- for i in range(len(mat)):
- print(mat[i])
- print('输入的第二个矩阵是')
- for i in range(len(matrix)):
- print(matrix[i])
- print('最后的结果是')
- for i in range(len(matadd)):
- print(matadd[i])
- # 这一段就是输出结果,没什么好说的

输入结果如下
python挑战 (bugfree.cc)https://bugfree.cc/challenge/Python/AnUaapython挑战答案如下
解释器重写如下
- def rabbit_and_chick():
- head=int(input('请输入头的数量'))
- foot=int(input('请输入脚的数量'))
- # 两个输入
- rabbit=(foot-head*2)/2
- # 兔子比小鸡多两只脚,所以假设兔子和小鸡都抬起两只脚
- # 那么剩下的脚就都是兔子的了,除2之后就是兔子的数量了
- chick=head-rabbit
- # 兔子的数量知道之后小鸡的数量自然也就知道了
- print(f'兔子的个数是{rabbit}')
- print(f'小鸡的个数是{chick}')
- rabbit_and_chick()
运行结果如下
原题目链接第四十九题
- # 题目 使用lambda来创建匿名函数。
- # lambda 函数语法
- # lambda 参数:条件以及结果,lambda函数只能写一行,故需要条件判断可以使用三目运算符
- # 使用lambda函数
- MAX=lambda x,y:x if x>y else y
- MIN=lambda x,y:x if x<y else y
- print(MAX(1,2),MIN(1,2))
运行结果如下
昨天阳了,发烧在床上躺了一天,今天两道题把昨天的补上
算法描述:
获取领先的分数 ,减去3分;
如果目前是领先队控球,则加0.5;否则减0.5(数字小于0则变成0);
计算平方后的结果;
如果得到的结果比当前比赛剩余时间的秒数大,则领先是“安全”的。
原题目链接第二题
- score=int(input('请输入领先的分数'))
- time=int(input('请输入比赛的剩余时间'))
- ball=int(input('请输入是否为领先队伍控球,是:1,否:2'))
- if ball==1:
- score+0.5
- else:score-0.5
- if score<0:score=0
- if score**2>time:
- print('领先队伍是安全的')
- else:print('领先队伍不是安全的')
输出结果:
原题目链接第四题
- soap=2
- toothbrush=5
- shampoo=15
- for i in range(0,int(100/15)):
- for j in range(0,int(100/5)):
- for k in range(0,int(100/2)):
- if 10*1+5*j+2*k==100:print(f'可购买的组合为,洗发水{i}瓶,牙刷{j}把,肥皂{k}块')
输出结果如下
原题目链接第五题
- import random
- while True:
- num=random.randint(0,100)
- for i in range(0,7):
- num1=int(input('请输入猜的数字\n'))
- if num1>num:
- print('大了')
- continue
- elif num1<num:
- print('小了')
- continue
- elif num1==num:
- print('恭喜你猜对了')
- break
- else:print('你输了')
- num2=int(input('是否继续?1是,2否'))
- if num2==2:
- break
- else:continue

昨天忘记了,今天两道
要求:利用递归函数编程实现。
原题目链接第八题
- def duck(num):
- if num==0:
- return 2
- else:return (duck(num-1)+1)*2
- num=int(input('请输入村庄个数'))
- print(duck(num))
运行结果如下:
原题目链接第十四题
- while True:
- num=int(input('请输入一个四位数'))
- if 1000<=num<=9999:
- num=str(num)
- num1=str(int(num[3])*7)
- num2=str(int(num[2])*7)
- num3=str(int(num[1])*7)
- num4=str(int(num[0])*7)
- print(num4[-1]+num3[-1]+num2[-1]+num1[-1])
- break
- else:
- print('输入错误,请重新输入')
- continue
运行结果如下:
输入描述:
第一行输入两个整数p(1<=p<=5000)和q,其中p表示堆积奏章的总数、q表示皇帝钦点重臣数
第二行输入p个数,表示所有按呈递顺序递上来的奏章来自于哪个大臣(大臣编号)
第三行输入q个数,表示皇帝钦点并排好序的重臣编号
输出描述:
输出奏章按指定顺序排好序后,皇帝按大臣编号批阅的顺序
输入样例:
5 3
5 4 3 2 1
3 5 4
输出样例:
3 5 4 1 2
原题目链接第一题
python编程考试题目大全_彭_江南的博客-CSDN博客_python编程题目https://blog.csdn.net/m0_37317411/article/details/124838758?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167167010416800184196162%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167167010416800184196162&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-5-124838758-null-null.142%5Ev68%5Econtrol,201%5Ev4%5Eadd_ask,213%5Ev2%5Et3_esquery_v2&utm_term=python%E9%A2%98%E7%9B%AE&spm=1018.2226.3001.4187我加了个判断后面输入的大臣和奏章的数量是否和之前相等的功能,其实还应该加判断大臣和奏章数量是否大于5000以及奏章和大臣是否重复的功能,不过作者给的答案也没有,我也就懒得写了
- def review():
- num_c_num_p=input('请输入奏章的数量的大臣的数量,使用空格隔开')
- # 接收奏章和大臣的数量
- num_c_num_p=num_c_num_p.split(' ')
- # 接收的字符串以空格分开
- num_c=int(num_c_num_p[0])
- num_p=int(num_c_num_p[1])
- # 将数量分配两个参数存起来并且转换成整型
- num_c_all=input('请输入所有按呈递顺序递上来的奏章来自于哪个大臣,使用空格隔开')
- num_c_all=list(num_c_all.split(' '))
- # 接收奏章编号并且存到列表里
- num_p_all=input('请输入皇帝钦点并排好序的重臣编号,使用空格隔开')
- num_p_all=list(num_p_all.split(' '))
- # 接收大臣编号并且存到列表里
- if len(num_c_all)!=num_c:
- print('您输入的奏章数量和之前输入的不相等')
- return 0
- elif len(num_p_all)!=num_p:
- print('您输入的大臣数量和之前输入的不相等')
- return 0
- # 判断一下相不相等,不相等则提示
- result=[]
- # 创建一个列表储存结果
- for i in num_p_all:
- for j in num_c_all:
- # 以大臣和奏章编号做两个循环
- if i==j:
- # 判断大臣和奏章编号是否相同
- result.append(j)
- # 加入结果集
- num_c_all.remove(j)
- # 移除已经加入结果集的
- else:num_c_all.sort()
- # 循环结束后将剩下的排序
- result.extend(num_c_all)
- # 剩下的加入结果集
- print(result)
- # 打印结果集
- review()

运行结果如下
先是我阳了,养了几天好差不多了,然后我姥爷新冠加脑梗,这些天一直在医院帮忙照顾,好在老爷子挺过来了,然后不知道是因为在医院还是什么原因,我又阳了,只能说我真是老倒霉蛋了,扯远了,好差不多了,继续更新
题目是朋友期末考试的编程题
- num=0
- # 计数器
- for i in range(100,1000):
- j=str(i)
- # int类型转换成str类型方便使用下标读取对应数字
- if int(j[0])+int(j[1])+int(j[2])==9:
- print(i)
- num=num+1
- # 计数器+1
- else:print(num)
运行结果如下
这道题也是期末考试题,c语言的考试题,所以是数组,python就用列表,没啥大差别
- andian=[] # 储存元素的列表
- figure=0 # 记录鞍点的变量
- while True:
- # 整个while True是输入部分,原理和前面矩阵那里基本一样,看不懂可以去看之前的代码的注释
- # 如果想实现题目里的5*5,可以用for循环
- mat=input('请按行输入元素,以空格隔开,以"#"结束输入\n')
- if mat=='#':
- break
- andian.append(mat.split(' '))
- for i in range(len(andian)):
- # 按行进行循环,先找出某行的最大元素,然后去判断这个元素在它所在的列是不是最小的
- for j in range(len(andian[i])):
- # 找出某行的最大元素的循环
- try:
- if andian[i][j]>andian[i][j+1]:
- figure=andian[i][j]
- else:figure=andian[i][j+1]
- # 将最大元素储存进变量figure中
- except:
- break
- for k in range(len(andian)):
- # 根据找到的元素去判断是不是该列最小
- if andian[k][j]<figure:
- # 如果该列有比它更小的那就不需要继续循环,直接打破循环输出没有即可
- print(f'第{i+1}行没有鞍点')
- break
- else:print(f'第{i+1}行的鞍点是{i+1}行{j+1}列,数据为{andian[i][j]}')
- # 循环正常结束证明之前找到的元素是鞍点
- print('输入的元素为')
- for i in range(len(andian)):
- # 最后把输入的元素按行输出呈现给用户,方便用户检查正确与否
- print(andian[i])

运行结果如下
继续做考试题
- def input1(a):
- a.extend(input().split(' '))
- def output(a):
- print(a)
- def sortint(a):
- # a.sort() # 想体验自带排序把这行注释回来就行
- # 其实是可以用自带的排序直接完成的
- # 不过那样今天的量似乎太小了些,还是手动写个排序吧
- for i in range(len(a)): # 简单写个最简单的冒泡排序
- for j in range(len(a)):
- try:
- # 因为“j+1”到最后一位会导致列表索引超出范围
- # 虽然也有别的方法,但是我感觉还是用try简单些
- if a[j] > a[j + 1]:
- a[j], a[j + 1] = a[j + 1], a[j]
- except:
- break
- a = []
- input1(a)
- sortint(a)
- output(a)

运行结果如下
还是做考试题,python我用类做的,想了想反正都做了,不如做大一点,功能稍微全一点,然后就做了两天,倒也不是两天一直在做,只是空闲时间去做然后昨天没做完。。。扯远了,完整代码放在下面,稍微完整一点的解析放在另外一篇文章里了,链接如下
使用python对银行信息管理系统的简单实现_缇友的博客-CSDN博客https://blog.csdn.net/m0_56750162/article/details/128693533
- class account(object):
- # 用户信息类
- def __init__(self, id1, name, tel, money):
- self.id = id1
- # 账户
- self.name = name
- # 姓名
- self.tel = tel
- # 电话
- self.money = money
- # 余额
-
- def __str__(self):
- return f'{self.id},{self.name},{self.tel},{self.money}'
-
-
- class accountmanager(object):
- # 管理系统类
- def __init__(self):
- self.users_list = []
- # 储存信息的列表
-
- def function(self):
- """调用各个函数的函数"""
- # 函数的说明文档,一般用来记录函数的作用
- self.load_users()
- # 将文件里的信息读取出来
- while True:
- self.show_menu()
- menu_num = int(input('请输入需要的功能序号'))
- if menu_num == 1:
- self.add_users()
- elif menu_num == 2:
- self.del_users()
- elif menu_num == 3:
- self.modify_users()
- elif menu_num == 4:
- self.query_users()
- elif menu_num == 5:
- self.show_users()
- elif menu_num == 6:
- self.save_users()
- elif menu_num == 7:
- print('感谢使用,再见')
- break
- else:
- print('输入有误,请重新输入')
- continue
-
- def show_menu(self):
- """展示功能菜单"""
- print('1--添加用户')
- print('2--删除用户')
- print('3--修改用户')
- print('4--查询用户')
- print('5--显示所有用户')
- print('6--保存用户信息')
- print('7--退出系统')
-
- def add_users(self):
- """添加用户"""
- id1 = input('请输入用户账户')
- for i in self.users_list:
- # 增删改查里都有循环用来查找数据然后再进行对应操作
- if i.id == id1:
- print('输入的账户已存在!!!')
- return
- name = input('请输入用户姓名')
- tel = input('请输入用户电话')
- money = input('请输入用户余额')
- # 找到之后对姓名、电话、余额进行更改,可以做到单项更改,但是太麻烦了
- # 账户不做更改,做更改还要判断账户是否重复,我嫌麻烦
- user = account(id1, name, tel, money)
- # 将所有信息放入列表
- self.users_list.append(user)
- # 将列表追加进储存的列表
-
- def del_users(self):
- """删除用户"""
- del_users_id = input('请输入需要删除用户的id')
- for i in self.users_list:
- if i.id == del_users_id:
- self.users_list.remove(i)
- break
- else:
- print('输入的用户不存在')
-
- def modify_users(self):
- """修改用户"""
- modify_users_id = input('请输入需要修改用户的id')
- for i in self.users_list:
- if i.id == modify_users_id:
- print('已查询到用户,下面请按提示输入修改后的信息')
- i.name = input('姓名:')
- i.tel = input('电话:')
- i.money = input('余额:')
- break
- else:
- print('输入的用户不存在')
-
- def query_users(self):
- """查询用户"""
- query_users_id = input('请输入需要查询用户的id')
- for i in self.users_list:
- if i.id == query_users_id:
- print(f'账户:{i.id}\t姓名:{i.name}\t电话:{i.tel}\t余额:{i.money}')
- break
- else:
- print('输入的用户不存在')
-
- def show_users(self):
- """显示所有用户"""
- for i in self.users_list:
- print(f'账户:{i.id}\t姓名:{i.name}\t电话:{i.tel}\t余额:{i.money}')
-
- def load_users(self):
- """加载信息"""
- try:
- information = open('account.dat', 'r')
- except:
- information = open('account.dat', 'w')
- else:
- # 读取数据:文件读取出的数据是字符串还原列表类型;[{}] 转换 [学员对象]
- data = information.read() # 字符串
- if len(data)!=0:
- # 判断读取的数据长度,如果没读到数据依旧运行下一行的代码会导致异常
- # 顺带着也当做优化了,没读取到也就不用运行转换循环了
- new_list = eval(data)
- self.users_list = [account(i['id'], i['name'], i['tel'], i['money']) for i in new_list]
- # 用循环将列表转换成字典形式
- finally:
- information.close()
- # 无论怎样最后都关闭文件
-
- def save_users(self):
- """将信息保存"""
- information = open('account.dat', 'w')
- new_list = [i.__dict__ for i in self.users_list]
- # ___dict___强调储存的是静态属性
- information.write(str(new_list))
- # 以字符串形式写入
- information.close()
- # 关闭文件
-
-
- account_manager = accountmanager()
- # 创建类
- account_manager.function()
- # 运行系统

我不太明白他这个没有最后一个单词是什么意思,是没输入还是只有一个单词哪,我就当做是没输入东西就输出0吧
题目来自于x客网,我就不挂原链接了,不是大佬给的题,是c++或者Java的练习题,没有python的解法
- list1=[]
- list1=input().split(' ')
- print(len(list1[-1]))
运行结果如下,第二张是没输入直接回车的结果
- num0=0
- # 计数器
- num=int(input())
- for i in range(0,num):
- str1=str(i)
- # 转换成字符串类型
- for j in range(0,len(str(i))):
- if int(str1[j])==2:
- num0+=1
- else:print(num0)
运行结果如下
- n = input()
- # 接收输入的数据
- m = []
- # 用于计数的列表,比如aaaa这个字符串
- # 就是往这个列表里依次写入四个a,最后使用len函数统计数量就行了
- j = []
- # 最后结果的储存列表
- for i in range(0, len(n)):
- # 整体思路就是把第一位和最后一位单独列出情况单独判断处理,中间都没啥大差别
- if n[0] != n[1] and i == 0:
- # 判断第一个字符和第二个是否不相等
- # 比如ab,不相等就往结果集里输入a1
- j.append(n[0])
- # 输入a
- j.append(str(1))
- # 输入字符串类型的1,防止结果列表转换成字符串的时候出错
- # 后续输入数字统一用字符串类型的,后面不再强调
- continue
- try:
- # 用try是防止列表索引溢出
- if n[i] == n[i + 1]:
- # 判断当前字符和下一位是否相等
- # 相等就输入到计数列表
- m.append(n[i + 1])
- else:
- j.append(n[i])
- # 不相等就输入这个字符
- j.append(str(len(m) + 1))
- # 统计计数列表的个数然后输入
- m = []
- # 清空计数列表然后方便下一个字符计数
- except:
- if n[i] == n[i - 1]:
- # 判断最后一位字符和前一位是否相等
- # 相等就执行上面else里的操作
- j.append(n[i])
- j.append(str(len(m) + 1))
- break
- else:
- # 不相等这里就把最后一位字符输入,然后输入1
- j.append(n[i])
- j.append(str(1))
- k = ''.join(j)
- # 把结果列表转换成字符串
- if len(k) < len(n):
- # 判断长度,比之前短输出新结果,反之输出原来的结果
- print(k)
- else:
- print(n)

运行结果如下
之前的几道题x客网里面没有python选项,这个有了,所以顺便放一下x客网里运行通过的截图
当然x客里是在函数里的,我上面给的代码是复制到解释器里能直接运行的
先说一下我自己的思路,去除所有符号后然后全部转换成小写字符然后分别取前一半和后一半的逆置然后对比,同时还有考虑字符串只有一个字符的情况,总之比较麻烦,然后我看了看题解部分一位大佬的解法,十分简洁,这里着重记录大佬的思路,大佬代码如下
1.第一行和第二行是自动生成的,方便传参验证代码的部分
2.第三行的作用比较多,首先生成列表“L”,“L”由对字符串s进行for循环得到
3.这里先说一下“isalnum”内置函数的作用,判断一个字符串是否完全由非符号字符组成,完全返回true,不完全返回false
4.因为是for循环,循环字符串中的每一个字符,也就是相当于去判断字符串中的每一个字符是不是符号,不是返回true,是返回false
5.又因为if判断,所以true就执行内置函数“lower”,这个函数是对字符串的操作函数,会将所有大写字符转换成小写,这样一来,所有字母都加入了列表而已都变成了小写
6.最后一行直接对比列表“L”和其逆置列表,因为是回文串所以逆置后应该相等
大佬代码拆开写如下
- def isPalindrome(s):
- l = []
- for x in s:
- if x.isalnum():
- l.append(x.lower())
- return l == l[::-1]
-
-
- s = input()
- print(isPalindrome(s))
下面是我保留自己原有思路的情况下根据大佬思路对自己代码改进后的代码
- def isPalindrome(s):
- punc = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ '
- s = s.lower()
- for ch in punc:
- s = s.replace(ch, '')
- return s==s[::-1]
-
- s = input()
- print(isPalindrome(s))
总结:思路不如大佬有两点原因
一、不知道“isalnum”函数,不过基本知道我估计也想不到这种用法,所以这一点原因只占20%。
二、编程的思路、思想还是有待加强,对与python的一些简便写法、用法不熟练
1.编写一个程序,该程序接受以逗号分隔的4位二进制数字序列作为输入,然后检查它们是否可被5整除。被5整除的数字将以逗号分隔的顺序打印。(2023.4.24)
代码如下
- a = input("请输入多个四位数字,以‘,’隔开")
- a = a.split(',')
- j = 1
- for i in a:
- if int(i) % 5 == 0:
- if j == 1:
- print(i, end='')
- j += 1
- else:
- print(',', i, end='')
输出如下
其实这里要求以逗号分隔打印比较麻烦,不然可以更简单一点,如下
- a = input("请输入多个四位数字,以‘,’隔开")
- a = a.split(',')
- for i in a:
- if int(i) % 5 == 0:
- print(i, end=' ')
结果如下
2.Python挑战的题,easy难度,也很简单,就是for循环的堆叠而已
代码如下,这么简单应该不用写注释了吧
- Rooster = 1
- Hen = 1
- chick = 1
- for i in range(0, 20):
- for j in range(0, 33):
- for k in range(0, 33):
- if 5 * i + 3 * j + k == 100 and i + j + 3 * k==100:
- print(f"公鸡{i}只,母鸡{j}只,鸡雏{3 * k}只")
运行结果如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。