巡山小妖007

个人站

欢迎来到我的个人博客~


Python-Study

python 学习(python3)

python 100例练习

1、题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if (i != j) and (j != k) and (k != i):
                print(i,j,k)

2、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

i = int(input("输入净利润:"))
arr = [1000000, 600000, 400000, 200000, 100000, 0]
rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
r = 0
for index in range(1, 6):
    if i > arr[index]:
        r += (i - arr[index]) * rat[index]
        # print((i - arr[index]) * rat[index])
        i = arr[index]

print(r)

3、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

for i in range(1,85):
    if 168 % i == 0:
        j = 168 / i
        if  i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
            m = (i + j) / 2
            n = (i - j) / 2
            x = n * n - 100
            print(int(x))

4、输入某年某月某日,判断这一天是这一年的第几天?

year = int(input('year:\n'))
month = int(input('month:\n'))
day = int(input('day:\n'))

months = (0,31,59,90,120,151,181,212,243,273,304,334)
sum = 0

if 0 < month <= 12:
    sum += months[month - 1]
else:
    print('error')

sum += day

leap = 0
if (year % 400 == 0) or ((year % 4 ==0) and (year % 100 == 0)):
    leap = 1

if (leap == 1) and (month > 2):
    sum += 1

print('第%d天' % sum)

5、输入三个整数x,y,z,请把这三个数由小到大输出。

l = []
for i in range(3):
    x = int(input('input:\n'))
    l.append(x)

l.sort()
print(l)

6、斐波那契数列。

def fib(n):
    a, b = 1, 1
    for i in range(n - 1):
        a, b = b, a + b

    return a


i = int(input('input:\n'))

print('fib(%d) = %d' % (i, fib(i)))
def fib(n):
    if n == 1:
        return [1]

    if n == 2:
        return [1,1]
    fibs = [1,1]
    for i in range(2, n):
        fibs.append(fibs[-1] + fibs[-2])
    return fibs

print(fib(10))

7、将一个列表的数据复制到另一个列表中。

a = [1,2,3]
b = a[0:]
print(b)

8、输出 9*9 乘法口诀表。

# print不换行 :
# python3 end=" "
# python2 print x,  #只需要加一个逗号即可
for i in range(1,10):
    print()
    for j in range(1,i + 1):
        print('%d * %d = %d' % (i, j, i*j), end=" ")

9、暂停一秒输出。

import time

myMap = {1 : 'aaaa', 2 : 'bbbb' }

for key,value in dict.items(myMap):
    print(key, value)
    time.sleep(1) # 暂停1s

10、暂停一秒输出,并格式化当前时间。

import time

print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

time.sleep(1)

print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

11、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

f1, f2 = 1, 1
for i in range(1,22):
    print('%12ld %12ld' % (f1,f2),end="  ")
    if (i % 3) == 0:
        print(" ")
    f1 = f1 + f2
    f2 = f1 + f2

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

from math import sqrt

leap = 1
for i in range(101,201):
    for j in range(2, int(sqrt(i + 1)) + 1):
        if i % j == 0:
            leap = 0
            break

    if leap == 1:
        print('%d' % i)

    leap = 1

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

for n in range(100,1000):
    i = int(n / 100)
    j = int(n / 10 % 10)
    k = int(n % 10)
    if n == (i ** 3 + j ** 3 + k ** 3):
        print(n)

14、将一个正整数分解质因数。例如:输入90,打印出90=233*5。

def reduceNum(n):
    print('{} = '.format(n),end=" ")
    if not isinstance(n,int) or n < 0:
        print('请输入正确数字!')
        exit(0)
    elif n in [1]:
        print('{}'.format(n))

    while n not in [1]:
        for index in range(2,n+1):
            if n % index == 0:
                n = int(n/index)
                if n == 1:
                    print(index)
                else :
                    print('{} * '.format(index),end="")
                break

reduceNum(100)
reduceNum(90)

15、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

score = int(input('输入分数:\n'))

if score >= 90:
    grade = 'A'
elif score >=60:
    grade = 'B'
else:
    grade = 'C'
print('{} 属于 {}'.format(score, grade))

16、输出指定格式的日期。

import datetime

if __name__ == '__main__':

    # 输出今日日期,格式为dd/mm/yyyy。
    print(datetime.date.today().strftime('%d/%m/%Y'))

    # 创建日期对象
    selfDate = datetime.date(1992,2,15)

    print(selfDate.strftime('%d/%m/%Y'))

    # 日期算术运算
    selfDate = selfDate + datetime.timedelta(days=1)

    print(selfDate.strftime('%d/%m/%Y'))

    # 日期替换
    selfDate = selfDate.replace(year=selfDate.year+1)

    print(selfDate.strftime('%m/%d/%Y'))

17、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

# 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

import string

str = input('输入字符串:\n')

letters = 0
space = 0
digit = 0
others = 0
i = 0

while i < len(str):
    c = str[i]
    i += 1
    if c.isalpha():
        letters += 1
    elif c.isspace():
        space += 1
    elif c.isdigit():
        digit += 1
    else:
        others += 1
print('char = {},space = {},digit = {}, others = {}'.format(letters,space,digit,others))

import string

str = input('输入字符串:\n')

letters = 0
space = 0
digit = 0
others = 0
i = 0

for c in str:
    i += 1
    if c.isalpha():
        letters += 1
    elif c.isspace():
        space += 1
    elif c.isdigit():
        digit += 1
    else:
        others += 1
print('char = {},space = {},digit = {}, others = {}'.format(letters,space,digit,others))

18、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

from functools import reduce

temp = 0
arr = []

n = int(input("n=\n"))
a = int(input("a=\n"))

for count in range(n):
    temp = temp + a
    a = a * 10
    arr.append(temp)
    print(temp)

arr = reduce(lambda x,y : x + y, arr)

print("和为:{}".format(arr))

19、一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。

for i in range(2,1001):

    k = [] # 保存一个数的所有因子
    s = i
    for j in range(1,i):
        if i % j == 0:
            k.append(j)
            s -= j
    if s == 0 :
        print(i)
        print(k)

20、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

tour = []
height = []
hei = 100.0
tim = 10

for i in range(1,tim + 1):
    if i == 1:
        tour.append(hei)
    else:
        tour.append(2 * hei)
    hei /= 2
    height.append(hei)

print('总高度:tour = {0}'.format(sum(tour)))
print('第10次反弹的共度:height:{0}'.format(height[-1]))

21、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

last = 1
for i in range(9,0,-1):
    sum = (last + 1) * 2
    last = sum

print(sum)

22、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

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)))

23、打印出如下图案(菱形):

* * *** *** **** ** *

from sys import stdout

for i in range(4):
    for j in range(2 - i + 1):
        stdout.write(" ");
    for j in range(i * 2 + 1):
        stdout.write("*")
    print()

for i in range(3):
    for j in range(i + 1):
        stdout.write(" ")
    for j in range(4 - 2 * i + 1):
        stdout.write("*")
    print()

24、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

sum = 0.0
a = 2.0
b = 1.0

for n in range(1,21):
    sum += a/b
    a,b = a+b,a

print(sum)

from functools import reduce

a = 2.0
b = 1.0
l = []

l.append(a/b)

for n in range(1,20):
    b,a = a,a+b
    l.append(a/b)

print(reduce(lambda x,y: x + y,l))


25、求1+2!+3!+…+20!的和。

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

print('1! + 2! + 3! + ... + 20! = {}'.format(s))

26、利用递归方法求5!

sum = 0
def fact(n):
    if n == 0:
        sum = 1
    else:
        sum = n * fact(n - 1)
    return sum

print(fact(5))

27、利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。


def output(s,n):
    if n == 0:
        return
    print(s[n-1],end=" ")
    output(s,n-1)

s = input("输入字符串:\n")

l = len(s)

output(s,l)

28、有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

def age(n):
    if n == 1:
        c = 10
    else:
        c = age(n - 1) + 2
    return c

print(age(5))

29、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

x = int(input("输入一个数字:\n"))

if int(x / 10000) != 0:
    print("五位数")
elif int(x % 10000 / 1000) != 0:
    print("四位数")
elif int(x % 1000 / 100) != 0:
    print("三位数")
elif int(x % 100 / 10) != 0:
    print("二位数")
else:
    print("一位数")

30、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

x = int(input("输入一个数字:\n"))

str = str(x)
len = len(str)
flag = True
for i in range(int(len / 2)):
    if(str[i] != str[- i - 1]):
        flag = False
        break


if flag:
    print("是回文数")
else:
    print("不是回文数")

31、请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

str = input("please input:")

if str == 'S':
    print('please input second letter:')
    str = input("please input:")
    if str == 'a':
        print('Saturday')
    elif str == 'u':
        print('Sunday')
    else:
        print('data error')

elif str == 'F':
    print('Friday')

elif str == 'M':
    print('Monday')

elif str == 'T':
    print('please input second letter')
    str = input("please input:")

    if str == 'u':
        print('Tuesday')
    elif str == 'h':
        print('Thursday')
    else:
        print('data error')

elif str == 'W':
    print('Wednesday')
else:
    print('data error')

32、按相反的顺序输出列表的值。

a = ['aaa','bbb','ccc']

for i in a[::-1]:
    print(i)

33、按逗号分隔列表。

list = [1,2,3,4,5]

s1 = ','.join(str(n) for n in list)

print(s1)

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.HEADER + "字体?" + bcolors.ENDC)
print( bcolors.OKBLUE + "蓝色字体?" + bcolors.ENDC)
print( bcolors.OKGREEN + "绿色字体?" + bcolors.ENDC)
print( bcolors.WARNING + "警告的颜色字体?" + bcolors.ENDC)
print( bcolors.FAIL + "失败?" + bcolors.ENDC)
print( bcolors.ENDC + "结束符号" + bcolors.ENDC)
print( bcolors.BOLD + "加粗?" + bcolors.ENDC)
print( bcolors.UNDERLINE + "下划线?" + bcolors.ENDC)

36、求100之内的素数。

for num in range(1,101):
    for i in range(2,num):
        if (num % i) == 0:
            break
    else:
        print(num)

37、对10个数进行排序。

nums = [2,1,3,2,4,5,3,2,7,0]

nums.sort()

print("-----")

for i in nums:
    print(i, end=" ")

38、求一个3*3矩阵主对角线元素之和。

a = [[1,1,2],[3,3,3],[1,2,3]]

sum = 0
for i in range(3):
    for j in range(3):
        sum += a[i][i]

print(sum)

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


if __name__ == '__main__':
    # 0作为加入数字的占位
    a = [1,3,4,5,6,7,8,13,15,100,0]
    print("原始列表")
    for i in a:
        print(i, end=" ")

    number = int(input("\n 插入一个数字:\n"))
    end = a[9]
    if number > end:
        a[10] = number
    else:
        for i in  range(10):
            if a[i] > number:
                temp = a[i]
                a[i] = number
                for j in range(i + 1, 11):
                    temp1 = a[j]
                    a[j] = temp
                    temp = temp1
                break

    print("插入后")
    for i in a:
        print(i,end=" ")

40、将一个数组逆序输出。

a = [1,2,3,4,5,6]

print("原数组:" + str(a))

for i in a[::-1]:
    print(i,end=" ")

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()

43、模仿静态变量(static)另一案例。

class Num:
    nNum = 1

    def inc(self):
        self.nNum += 1
        print('class Num中的:nNum = %d' % self.nNum)


if __name__ == '__main__':
    nNum = 2
    inst = Num()
    for i in range(3):
        nNum += 1
        print('外边循环中的num: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]]

X = [[12,7,3],
    [4,5,6],
    [7,8,9]]

Y = [[5,8,1],
    [6,7,3],
    [4,5,9]]

res = [[0,0,0],
       [0,0,0],
       [0,0,0]]

for x in range(len(X)):
    for y in range(len(X[0])):
        res[x][y] = X[x][y] + Y[x][y]

for i in res:
    print(i)

45、统计 1 到 100 之和。

res = 0

for i in range(1,101):
    res += i

print("和:{}".format(res))

46、求输入数字的平方,如果平方运算后小于 50 则退出。

def SQ(x):
    return x * x

again = True

while again:
    num = int(input("请输入一个数字:"))
    print("运算结果为:{}".format(SQ(num)))
    if SQ(num) >= 50:
        again = True
    else:
        again = False

47、两个变量值互换。

def exchage(x,y):
    x,y = y,x
    return (x,y)

if __name__ == '__main__':
    x = 10
    y = 20
    print("x = {}, y = {}".format(x,y))
    x,y = exchage(x,y)
    print("x = {}, y = {}".format(x,y))

49、使用lambda来创建匿名函数。

MAXIMUM = lambda x, y: (x > y) * x + (x < y) * y
MINIMUM = lambda x, y: (x > y) * y + (x < y) * x

if __name__ == '__main__':
    a = 10
    b = 20
    print( 'The largar one is %d' % MAXIMUM(a, b))

    print('The lower one is %d' % MINIMUM(a, b))

50、输出一个随机数。

import random

# 生成0,1的随机数
print(random.random())
# 生成10到20中间的随机数
print(random.uniform(10,20))
# 生成10到20的随机整数
print(random.randint(10,20))
# 输出0,到99间的随机数
print(random.choice([x for x in range(1,100)]))

55、按位取反~。

if __name__ == '__main__':
    a = 234
    b = ~a
    print('The a\'s 1 complement is %d' % b) # -235
    a = ~a
    print('The a\'s 2 complement is %d' % a) # -235

61、打印出杨辉三角形(要求打印出10行如下图) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1

if __name__ == '__main__':
    a = []
    for i in range(10):
        a.append([])
        for j in range(10):
            a[i].append(0)
    for i in range(10):
        a[i][0] = 1
        a[i][i] = 1
    for i in range(2,10):
        for j in range(1,i):
            a[i][j] = a[i - 1][j-1] + a[i - 1][j]
    from sys import stdout
    for i in range(10):
        for j in range(i + 1):
            stdout.write(str(a[i][j]))
            stdout.write(' ')
        print()

62、查找字符串。 

sStr1 = 'abcdefg'
sStr2 = 'cde'
print(sStr1.find(sStr2))

63、画椭圆。

python3 中“tkinter” python2中“Tkinter”

from tkinter import *

x = 360
y = 160
top = y - 30
bottom = y - 30

canvas = Canvas(width=400,height=600,bg='white')

for i in range(20):
    canvas.create_oval(250-top,250-bottom,250+top,250+bottom)
    top -= 5
    bottom += 5

canvas.pack()
mainloop()

67、输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

def inp(numbers):
    for i in range(6):
        numbers.append(int(input('输入一个数字:\n')))

p = 0

def arr_max(array):
    max = 0
    for i in range(1, len(array) - 1):
        p = i
        if array[p] > array[max]:
            max = p
    k = max
    array[0], array[k] = array[k], array[0]


def arr_min(array):
    min = 0
    for i in range(1, len(array) - 1):
        p = i
        if array[p] < array[min]:
            min = p
    l = min
    array[5], array[l] = array[l], array[5]


def outp(numbers):
    for i in range(len(numbers)):
        print(numbers[i])


if __name__ == '__main__':
    array = []
    inp(array)  # 输入 6 个数字并放入数组
    arr_max(array)  # 获取最大元素并与第一个元素交换
    arr_min(array)  # 获取最小元素并与最后一个元素交换
    print('计算结果:')
    outp(array)

68、有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数

if __name__ == '__main__':
    n = int(input('整数 n 为:\n'))
    m = int(input('向后移 m 个位置为:\n'))

    def move(array, n, m):
        array_end = array[n - 1]
        for i in range(n - 1, -1, - 1):
            array[i] = array[i - 1]
        array[0] = array_end
        m -= 1
        if m > 0:
            move(array, n, m)

    number = []
    for i in range(n):
        number.append(int(input('输入一个数字:\n')))
    print('原始列表:', number)

    move(number, n, m)

    print('移动之后:', number)

69、

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦