【精选】python入门算法题(一)

我们知道学习一门语言最快的方法就是多敲代码,敲一些难度适中的代码可以让我们学的更快,理解的更深,有时候你看书看博客都不明白的一个概念可能你敲一会代码你就明白到底怎么回事了,下面是我精选的python入门的算法题,也有一些小程序,希望可以帮到你

"""
题目:一行代码生成九九乘法表
"""
print('\n'.join([' '.join(['%s*%s=%-2s' % (y, x, x*y) for y in range(1, x+1)]) for x in range(1, 10)]))
"""
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
"""
lst=list(input("请输入一行字符:"))
iLetter=[]
iSpace=[]
iNumber=[]
iOther=[]
for i in lst:
    if ord(i) in range(65,91) or ord(i) in range(97,123):
        iLetter.append(i)
    elif i==" ":
        iSpace.append(" ")
    elif ord(i) in range(48,58):
        iNumber.append(i)
    else:
        iOther.append(i)
print ("英文字母个数:",len(iLetter),iLetter)
print ("空格个数:",len(iSpace))
print ("数字个数:",len(iNumber),iNumber)
print ("其它字符个数:",len(iOther),iOther)
"""
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
"""
a=int(input("请输入数字:"))
count=int(input("请输入几个数相加:"))
res=0
for i in range(1,count+1):
    t=0
    for j in range(0,i):
        t=t+10**j
    res=res+a*t
    print(res)
print ("结果是:%s"%res)

#下面是另一种写法,更为巧妙
a=input("请输入数字:")
count=int(input("几个数字相加:"))
ret=[]
for i in range(1,count+1):
    ret.append(int(a*i))
    print (a*i)
print (sum(ret))
"""
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
三队赛手的名单。 
"""
#暴力for循环
for i in range(ord('x'),ord('z') + 1):
    for j in range(ord('x'),ord('z') + 1):
        if i != j:
            for k in range(ord('x'),ord('z') + 1):
                if (i != k) and (j != k):
                    if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):
                        print ('order is a -- %s\t b -- %s\tc--%s' % (chr(i),chr(j),chr(k)))

#另一种写法
#利用itertools和zip操作
import itertools
team1=["a","b","c"]
team2=["x","y","z"]
check_list = [('a', 'x'), ('c', 'x'), ('c', 'z')]
for i in itertools.permutations(team1, 3):
    f = lambda a, b: len([True for j in zip(a, b) if j not in check_list])
    if f(i, team2) == 3:
        print(i, team2)
"""
字符串反转(三种方式)
"""
#函数
string=list(input("请输入若干字符:"))
string.reverse()
print ("".join(string))

#递归
string=input("请输入若干字符:")
def f(x):
    if x == -1:
        return ""
    else:
        return string[x]+f(x-1)
print (f(len(string)-1))

#切片
string=input("请输入若干字符:")
print(string[::-1])
""""
数字排序(非常基础),也可以自己写排序实现
"""
s=input("请输入10个数字,以空格隔开:")
n=[int(x) for x in s.split(" ")]
n.sort()
print(n)
"""
输入9个数字组成3*3矩阵并计算斜对角线上数字之和(为下面一题打基础)
"""
string=input("请输入9个数字,用空格隔开,以形成3*3矩阵:")
n=[int(i) for i in string.split(" ")]
mx=[]
for i in range(3):
    mt=[]
    for j in range(3):
        mt.append(n[i*3+j])
    mx.append(mt)
    print (mt)
sum1=0
sum2=0
for i in range(3):
    sum1+=mx[i][i]
    sum2+=mx[2-i][i]
print ("\方向之和:%s"%sum1)
print ("/方向之和:%s"%sum2)
"""
输入n**2个数字组成n*n的矩阵并计算斜对角线上数字之和
"""
import math
err =True
while err:
    string=input("请输入n**2个数字,用空格隔开,以形成n*n的矩阵:")
    n=[int(i) for i in string.split(" ")]
    t=math.floor(math.sqrt(len(n)))
    if t==math.sqrt(len(n)) and t != 1:
        err=False
    else:
        print("你输入的数字个数有误,请重试!")
mx=[]
for i in range (t):
    mt=[]
    for j in range(t):
        mt.append(n[i*t+j])
    mx.append(mt)
    print(mt)
sum1=0
sum2=0
for i in range(t):
    sum1+=mx[i][i]
    sum2+=mx[t-1-i][i]
print("\方向的对角线总和:%s"%sum1)
print("/方向的对角线总和:%s"%sum2)

想继续学习的可以看下一篇文章

猜你喜欢

转载自blog.csdn.net/qq_37482202/article/details/82318525