python入门经典100题

入门经典100题

1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
_=0
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):

            if i ==j or i == k or j == k:
                continue
            else:
                print(100*i+10*j+k)
            _ += 1
print(_)
2.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
for i in range(100):
    for j in range(100):
        if i**2-j**2==168:
            x=j**2-100
            print(x)

python入门经典100题_第1张图片

3.判断101-200之间有多少个素数,并输出所有素数。

素数就是在大于1的自然数中,除了1和它本身不再有其他因数的数。

num = []
for i in range(101,200):
    for j in range(2,i):
        if i%j == 0:
            break
    else:
        num.append(i)
print(num)

在这里插入图片描述

4.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

方法一

for i in range(1,10):
#三位数的百位
    for j in range(0,10):
    #三位数的十位
        for k in range(0,10):
        #三位数的个数
            if i*100+j*10+k == i**3+j**3+k**3:
                print(i*100+j*10+k)

python入门经典100题_第2张图片

方法二

敲黑板 !!! 如何取一个数字的个位十位和百位呢

for i in range(100,1000):
    gewei  = i%10
    shiwei = i//10%10
    baiwei = i//100
    if i == gewei **3 +shiwei **3 +baiwei **3:
        print(i)
5.将一个正整数分解质因数。
#join()函数
#语法:
‘sep’.join(seq)
#参数说明  
#sep:分隔符。可以为空
#seq:要连接的元素列表、字符串、元组、字典
# 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

m =int(input("请输入一个正整数:"))
n = m
a = []
while m >1:
    for i in range(2,m+1):
        if m%i == 0:
            m = m // i
            #除法结果向下取整
            a.append(str(i))
            #把i转换为字符串类型,并放入列表a中
            break
if len(a) == 1:
    print(n,'=','1*',n)
else:
    b = '*'.join(a)
    print(n,'=',b)

封装 try try鸭~~

# 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
def zhiyin():
    m =int(input("请输入一个正整数:"))
    n = m
    a = []
    while m >1:
        for i in range(2,m+1):
            if m%i == 0:
                m = m // i
                #除法结果向下取整
                a.append(str(i))
                break
    if len(a) == 1:
        print(n,'=','1*',n)
    else:
        b = '*'.join(a)
        print(n,'=',b)
if __name__  == "__main__":
    zhiyin()
6.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下 的用C表示。

封装下哈

def main():
    score =int(input("请输入学习成绩:"))
    if score >= 90:
        grade = 'A'
    elif score >=60:
        grade = 'B'
    else:
        grade = 'C'
    print  (grade)
if __name__ =="__main__":
    #调用呀
    main()
7.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
import string
def main():
    a = input("请输入一行字符:")
    zimu = 0
    kongge = 0
    shuzi = 0
    qita = 0
    for i in a:
        if i.isalpha():
            zimu +=1
        elif i.isspace():
            kongge +=1
        elif i.isdigit():
            shuzi +=1
        else:
            qita +=1
    print("这一行字符中有"+str(zimu)+"个字母"+','
          +str(kongge)+"个空格"+','+str(shuzi)+"个数字"
          +','+str(qita)+"个其他")
if __name__ == "__main__":
    main()

print()也可以这样写。

%s 格式化字符串

%d 整型

%f 浮点型

print('这一行字符中有 %d 个字母,%d个空格,'
      '%d个数字,%d个其他' % (zimu,kongge,shuzi,qita))
8.求s=a+aa+aaa+aaaa+aa…a的值

例如2+22+222+2222+22222(此时共有5个数相加)

主要思想:后一项等于前一项乘10加a(第一项)的结果

for循环和自加实现

def main():
    a = 0
    sum = 0
    a = int(input("请输入数字:"))
    b = int(input("请输入位数:"))
    c = []
    e = a
    for i in range(b):
        if b == 1:
            print(str(a)+'='+str(a))
        else:
            c.append(str(a))
            a = a*10 +e
            sum += a
            d ='+'.join(c)
            print(str(sum) +'='+d)
if __name__ =='__main__':
    main()

python入门经典100题_第3张图片

9.一个数如果恰好等于它的因子之和,这个数就称为“完数”。

题目分析

#例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
#编程输入一个数字,判断它是否为完数:
 
sum = 0
a =int( input("请输入:"))
for j in range(1,a):
    if a % j == 0:
        sum += j
if sum == a :
    print(str(a)+'是个完数')
else:
    print(str(a)+'不是个完数')
#编程序找出N之内的所有完数,并按下面格式输出其因子:
sum = 0
for a in range(2,1000):
    #判断2-1000内有多少个完数
    for j in range(1,a):
        if a % j == 0:
            sum += j
    if  sum == a :
        print(str(a)+'是个完数')
    else:
        print(str(a)+'不是个完数')
#试着封装下呗
def main():
    a = int(input("请输入:"))
    for i in range(1,a+1):
        sum = 0
        for j in range(1,i):
            if i % j == 0:
                    sum += j
        if  sum == i:
            print(str(i)+'是个完数')
        else:
            print(str(i)+'不是个完数')
if __name__ == '__main__':
    main()
10.打印出如下图案(菱形)

python入门经典100题_第4张图片

for i in range(1,8,2):
    print(('*' * i).center(7))
for i in range(5,0,-2):
    print(('*' * i).center(7))
#使用center函数将其居中显示
for i in range(-3,4):
    if i < 0:
        j = -i
    else:
        j = i
    print(' ' * j+'*' * (7-2*j))
for i in range(1,8,2):
    print(' ' *int( (7-i)/2)+'*' * i)
for j in range(5,0,-2):
    print(' ' * int((7 - j) / 2) + '*' * j)
11.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
def main():
    a = 2
    b = 1
    s = 0
    for i in range(20):
        s += a/b
        a += b
        b  = a-b
    print("这个数列前20项之和为"+str(s))
if __name__ =='__main__':
    main()
12.求1+2!+3!+…+20!的和

思路一递归函数

以下为计算阶乘的递归函数:

def jiecheng(n):# n为形参
    if  n ==1:
        return 1
    else:
        return n*jiecheng(n-1)
print(jiecheng(3))

递归函数 + for 循环

s = 0
def chengji(j):

    if j >1:
        return  j*chengji(j-1)
    else:
        return 1

for i in range(1,21):
    a  = chengji(i)
    s += a
    print('1+2!+3!+...+20!'+'='+str(s))

思路二

仔细观察可以发现:比如说3!就是3本身乘以2!

4!就是4本身乘以3!

t = 1
sum = 0
for i in range(1,21):
    t = i*t
    sum = sum+t
print(sum)

思路三

函数 map() 是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

a = range(1,21)
def jiecheng(n):
    t = 1
    for i in range(1,n+1):
        t = i*t
    return t
b = sum(map(jiecheng,a))
print(b)
a = range(1,21)
#定义函数采用递归的方式
def jiecheng(i):
    if i == 1:
        return 1
    else:
        return i*jiecheng(i-1)
b = sum(map(jiecheng,a))
print(b)

思路四

使用 列表 的方式,将每个数的阶乘放进列表,求其和。

a = []
b = 1
for i in range(1,21):
    b = b*i
    a.append(b)
print(sum(a))

思路五

使用 Lambda函数

匿名函数可以在程序中任何需要的地方使用,但是这个函数只能使用一次,即一次性的。语法如下:

语法: lambda参数:表达式

Lambda函数 + reduce函数

reduce函数会对参数列表中的元素进行累积。

from functools import *
sum = 0
for i in range(1,21):
    a  = reduce(lambda x,y: x*y,range(1,i+1))
    sum = a +sum
print(sum)

python入门经典100题_第5张图片

13.利用递归方法求5!。
def digui(i):
    if  i == 1:
        return 1
    else:
        return i*digui(i-1)
print(digui(5))

python入门经典100题_第6张图片

14.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
def xiangfan(x):
    if len(x) == 1:
        return x
    else:
        return x[-1] + xiangfan(x[:-1])
a = input("请输入:")
print (xiangfan(a))
15. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第 4 3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 5 问第一个人,他说是10岁。请问第五个人多大?
def main(x):
    if x == 1:
        return 10
    else:
        return main(x-1) + 2
print(main(5))
16. 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

方法一

a = input("请输入:")
print(str(len(a))+'位数' )
print(a[::-1])

方法二

def nixu(x):
    if len(x) == 1:
        return x
    else:
        return x[-1]+nixu(x[:-1])
a = input("请输入:")
print(nixu(a))
print(str(len(a))+"位数")
17. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

以下两种方法均可判断任意数是否为回文数:

def daoxu(x):
    if len(x) == 1:
        return x
    else:
        return x[-1]+daoxu(x[:-1])
    #使用递归函数输出一个数的倒序数
a = input("请输入:")
b = daoxu(a)
if b == a:
    print(str(a)+'是回文数')
    #判断正序和倒序数字是否一样
else:
    print(str(a)+'不是回文数')
a = input("请输入:")
b =  a[::-1]
if b ==a:
    print(str(a)+"是个回文数")
else:
    print(str(a)+"不是个回文数")

题目中强调这个数字为5位数,因此进行修改如下:

a = input("请输入:")
int_a = int(a)
if int_a > 99999 or int_a < 10000:
    print("INPUT ERROR")
else:
    b =  a[::-1]
    if b ==a:
        print(str(a)+"是个回文数")
    else:
        print(str(a)+"不是个回文数")
18. 求100之内的素数

质数是指在大于1的自然数中,除了1和它本身**以外不再有其他因数的自然数。

a = []
for i in range(100):
    if i < 2:
        continue
    for j in range(2,i):
        if i % j == 0:
            break
    else:
        a.append(i)
print("100以内的素数有",a)
19.对10个数进行排序

方法一:使用sort函数

a = []
for i in range(10):
    nums = input("请输入10个数字:")
    a.append(int(nums))
    print(a)
a.sort()
print(a)

方法二:定义排序函数

def paixu(a):
    for i in range(len(a)-1):
        for j in range(1+i,len(a)):
            if a[i] > a[j]:
                a[i],a[j] = a[j],a[i]
    return a
b = []
for k in range(3):
    nums = input("请输入:")
    b.append(int(nums))
print(paixu(b))

python入门经典100题_第7张图片

20. 求一个3*3矩阵对角线元素之和
sum = 0
a = [[1,6,8],[3,2,5],[6,9,8]]
for i in range(3):
    for j in range(3):
        if i == j:
            sum = a[i][j]+sum
print(sum)

这是给定一个矩阵,来求它的对角线之和。那么如何输入一个矩阵呢?

a = []
for i in range(0,3):
    tmp = []
    for j in range(0,3):
        tmp.append(j)
    a.append(tmp)
print(a)

python入门经典100题_第8张图片

21. 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

以下为冒泡排序

import time

a = []
for i in range(3):
    b = input("请输入:")
    a.append(int(b))
print(a)
#采用冒泡排序法
def maopao(j):
    for j in range(len(a)-1):
        for k in range(0,len(a)-1):
            if a[j] > a [j+1]:
                a[j],a[j+1] = a[j+1],a[j]
        print(a)
if __name__ == "__main__":
    maopao(a)
time.sleep(3)
input_num = input("插入数字:")
a.append(int(input_num))
if __name__ == "__main__":
    maopao(a)
22.将一个数组逆序输出。

以下四种方法均可以实现

a = [1,2,3,4]
for i in range(int(len(a)/2)):
    a[i],a[len(a)-1-i] = a[len(a)-1-i],a[i]
print(a)
a = [1,2,3,4]
b = a[::-1]
print(b)
a = [1,2,3,4]
b = []
for i in range(len(a)):
    fanzhuan_a = a[len(a)-1-i]
    b.append(fanzhuan_a)
print(b)
a = [1,2,3,4]
b = []
for i in range(len(a)-1,-1,-1):
    zhengxu_a = a[i]
    b.append(zhengxu_a)
print(b)

python入门经典100题_第9张图片

23.取一个整数a从右端开始的4~7位。

大致思路:

(1)可以先使整数a向右移动4位

(2)设置一个低4位全为1,其余全为0的数。

(3)将上面二者进行&运算

首先应该将该整数转化为一个二进制数。

#写函数采用%2的方式来算
#先略过这题,不太会做
24.【Tkinter模块】

实现功能:点击一次button按钮,回调函数执行一次。

from tkinter import *
def  hellobutton():
    print("我是一个中国人")
root = Tk()
#根窗口
root.title("python")
Button(root,text = 'hellobutton',command = hellobutton).pack()
#装包显示
root.mainloop()
#程序持续执行

你可能感兴趣的:(python,数据结构)