【Python】基础习题100例(26-50例)_努力做最通俗易懂版本

前言:

Python 100个小测试,用于熟悉和巩固Python基础
例题地址:https://www.runoob.com/python/python-100-examples.html


"""
题目26:利用递归方法求5!。
""" 
分析:25题是累乘,26是简单化了
def mul_sum(n):   # n第几个数
    tmp = 1
    for x in range(1,n+1):  
        tmp *= x
    return tmp 
mul_sum(5) 


"""
题目27:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
""" 
分析: 相反顺序,加个负号即可解决; 
def desc_string(s):
    if(len(s) > 0):
        print(s[-1])         
        desc_string(s[0:-1])    
desc_string("abcde")


"""
题目28:有5个人坐在一起.
       问第五个人多少岁?他说比第4个人大2岁。
       问第4个人岁数,他说比第3个人大2岁。
       问第3个人,又说比第2人大2岁。
       问第2个人,说比第1个人大2岁。
       最后问第一个人,他说是10岁。请问第五个人多大?
""" 
分析: 
递归思想 每前1个人+2岁即可; 
age = 10
for i in range(1,5):
    if i <=4:
        age += 2
    else: 
        age 
print(age)

"""
题目29:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
""" 
分析: 本质考察如何拆解字符串
# 最简单写法 
tmp = input("输入一个数字")
list(tmp)[::-1]    # list可拆解字符串
str(tmp)[::-1]     # str 不拆解

# 普通写法 
n = int(input("请输入一个数:\n"))
a = n%10000     # 万位
b = (n/1000)%10 # 千位 
c = (n/100)%10  # 百位 
d = (n/10)%10   # 十位 
e = (n/1)%10    # 个位 
if a != 0:
    print ("5 位数:",e,d,c,b,a)
elif b != 0:
    print ("4 位数:",e,d,c,b)
elif c != 0:
    print ("3 位数:",e,d,c)
elif d != 0:
    print ("2 位数:",e,d)
else:
    print ("1 位数:",e)

"""
题目30:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
""" 
分析:29def is_hw(tmp):
    tmp = list(tmp)
    if tmp[0] == tmp[4] and tmp[1] == tmp[3]:
        print("是")
    else :
        print("不是")
is_hw("12321")

"""
题目31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
""" 
分析: 
week=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
特殊情况即首字母为T 和S的情况,简单判断即可;  
fir = input("第1个字母:")
if fir == 'M':
    print("周一")
elif fir == 'W':
    print("周三")
elif fir == 'F':
    print("周五")
elif fir == 'T':
    s = input("第2个字母:")
    if s == 'u':
        print("周二")
    elif s == 'h':
        print("周四")
elif fir == 'S':
    s = input("第2个字母:")
    if s == 'a':
        print("周六")
    elif s == 'u':
        print("周日")
else :
    print("输入错误")


"""
题目32:按相反的顺序输出列表的值。
""" 
分析: 同样的考察字符串处理; 
a = ["x","y","z"]
b = a[::-1]

"""
题目33:按逗号分隔列表。
""" 
L = [1,2,3,4,5]

a = ','.join(str(i) for i in L )
print (a)

L = repr(L)[1:-1]
print(L)

"""
题目34:使用函数,输出三次 RUNOOB 字符串。
""" 
分析: 考察def的写法: 
def reo_3():
    for i in range(1,4):
        print("RUNOOB")
reo_3()


"""
题目35:文本颜色设置。
""" 
分析: 这个不会了...啊,好吧.. 系统设定颜色 
class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'
print (bcolors.WARNING + "警告的颜色字体?" + bcolors.ENDC)


"""
题目36:求100之内的素数。
""" 
分析:12题做过如何判断素数,一模一样; 
num = []
for a in range(1,100):
    for b in range(2,a-1):
        if a%b == 0 :
            break 
    else:            # 这里位置不能写错,不然容易陷入无限循环; 
        num.append(a)
print(num) 


"""
题目37:对10个数进行排序。
""" 
分析: 和第五题一样
依次输入10个数字; 
def px_3(a,b,c....):
    num = [a,b,c]
    num.sort()
    return num

同样方法:
num=[] 
for i in range(1,11):
    a=int(input('int%d: '%(i)))
    num.append(a)
num.sort()


"""
题目38:求一个3*3矩阵主对角线元素之和。
""" 
分析: 
1.主对角线元素之和 ---> 知道定义很重要 
  在一个n阶方阵(或是n阶行列式)中,从左上角到右下角这一斜线方向上的n个元素所在的对角线,叫做n阶方阵(或行列式)的主对角线。
2.设置一个双重for循环控制输入二维数组,再将n[i][j]累加后输出.

# 未知矩阵
if __name__ == '__main__':
    a = []
    sum = 0.0
    for i in range(3):
        a.append([])
        for j in range(3):
            a[i].append(float(input("input num:\n")))
    for i in range(3):
        sum += a[i][i]
    print (sum)

# 已知矩阵 
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
sum = 0
for i in range(0, 3):
    sum += m[i][i] 
print(sum)


"""
题目39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
""" 
分析: 题目其实说的不太明确,所以要挖掘隐藏条件: 
     已经排好序则代表按顺序大小排, 新输入的数,也需要从小到大排;
     所以思路整体上就是循环比大小; 
a = [1,2,3,5,6,7]
插入数字 4 
a.append(4)
sorted(a)

但显然题目考察的是希望自己能写这个逻辑,纯循环遇上数字较多的效率会比较低,所以可以折半选取再循环; 
a = [1,2,3,5,6,7]
b = 4
for i in range(len(a)-1):
    if b >= a[i] and b <= a[i+1]:
        a.insert(i+1, b)
        break
    elif i == (len(a)-2):
        a.append(b)
        break
print(a)


"""
题目40:将一个数组逆序输出。
""" 
分析:2932一样,python3中直接可输出;  
a = ["x","y","z"]
b = a[::-1]


"""
题目41:模仿静态变量的用法。
""" 
分析: 官方写法参考 
def varfunc():
    var = 0
    print ('var = %d' % var)
    var += 1
if __name__ == '__main__':
    for i in range(3):
        varfunc()

# 类的属性
# 作为类的一个属性吧
class Static:
    StaticVar = 5
    def varfunc(self):
        self.StaticVar += 1
        print (self.StaticVar)

print (Static.StaticVar)
a = Static()
for i in range(3):
    a.varfunc()


"""
题目42:学习使用auto定义变量的用法。
""" 
分析: 官方写法参考 
num = 2
def autofunc():
    num = 1
    print ('internal block num = %d' % num)
    num += 1
for i in range(3):
    print ('The num = %d' % num)
    num += 1
    autofunc()

"""
题目43:模仿静态变量(static)另一案例。
""" 
分析:41
class Num:
    nNum = 1
    def inc(self):
        self.nNum += 1
        print ('nNum = %d' % self.nNum)

if __name__ == '__main__':
    nNum = 2
    inst = Num()
    for i in range(3):
        nNum += 1
        print ('The num = %d' % nNum)
        inst.inc()


"""
题目44:两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
""" 
X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
Y = [[5,8,1],
    [6,7,3],
    [4,5,9]]

分析:38一样; 
z= []
for i in range(3):
    z.append([])
for i in range(3):
    for j in range(3):
        z[i].append(x[i][j]+y[i][j])
print z

"""
题目45:统计 1 到 100 之和。
""" 
a = 100 
b = 1
sum = (a+b)*50

"""
题目46:求输入数字的平方,如果平方运算后小于 50 则退出。
""" 
while True:
    x = int(input('input a num :'))
    x *= x
    print('结果为:{}'.format(x))
    if x > 50:
        break

def is_50(n):
    if 判断即可; 


"""
题目47:两个变量值互换。
""" 
def exchange(a,b):
    a,b = b,a
    return (a,b)

"""
题目48:数字比较。
""" 
分析: 简单比较3种情况即可
def compare(a,b):
    if a>b:
        ...
        简单比较即可
compare(2,2)


"""
题目49:使用lambda来创建匿名函数。
""" 
分析: 没规定函数内容,任意都可,主要了解lambda 是啥; 
https://www.runoob.com/python/python-functions.html
S = lambda x,y:x+y
print(S(10,20))

"""
题目50:输出一个随机数。
""" 
分析: https://www.runoob.com/python/func-number-random.html
import random
print (random.uniform(10, 20))  #生成 10 到 20 之间的随机数

26-50题如上,大家有什么疑问可以留言讨论。

题外话

希望本文有大家有帮助, 如有错误,欢迎指正。
转载请注明原文链接:
https://blog.csdn.net/weixin_41613094/article/details/122268869

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值