Runoob Python100例 个人解答

# https://www.runoob.com/python/python-100-examples.html
# python v3.8
# pycharm 2020.2.3 (Community Edition)

# 练习1:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?————————————————————————————————————————————————1
print([x*100+y*10+z for x in range(1,5) for y in range(1,5) for z in range(1,5) if(x!=y)and(x!=z)and(y!=z)])

# 练习2:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;——————————————————————————————————————————————————————2
# 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
# 20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;
# 60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
jinglirun = int(input('净利润:'))
lirun = [1000000, 600000, 400000, 200000, 100000, 0]
ticheng = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
jiangjin = 0
for i in range(6):
    if jinglirun > lirun[i]:
        jiangjin += (jinglirun - lirun[i]) * ticheng[i]
        jinglirun = lirun[i]
print(jiangjin)

# 练习3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?—————————————————————————————————————————3
print([n**2-100 for m in range(168) for n in range(m) if m**2-n**2==168])

# 练习4:输入某年某月某日,判断这一天是这一年的第几天?—————————————————————————————————————————————————————————————————————————4
year = int(input('year : '))
month = int(input('month : '))
day = int(input('day : '))
leap = ((year%4==0 and year%100!=0) or year%400==0) and month>2
months = [31,28,31,30,31,30,31,31,30,31,30,31]
days = 0
for i in range(month-1):
    days += months[i]
print('it is the ' + str(days+day+leap) + 'th day.')

# 练习5:输入三个整数x,y,z,请把这三个数由小到大输出。—————————————————————————————————————————————————————————————————————————5
x,y,z = map(int, input().split())
a = [x,y,z]
a.sort()
print(a)

# 练习6:斐波那契数列。———————————————————————————————————————————————————————————————————————————————————————————————————6
fib = [1, 1]
for i in range(20):
    fib.append(fib[-1] + fib[-2])
print(fib)

# 练习7:将一个列表的数据复制到另一个列表中。—————————————————————————————————————————————————————————————————————————————————7
a = [i for i in range(20)]
b = a.copy()    # b=a, b=a[:]
print(b)

# 练习8:输出 9*9 乘法口诀表。————————————————————————————————————————————————————————————————————————————————————————————8
for i in range(1,10):
    for j in range(1,i+1):
        print(f'{j}*{i}={i*j}',end='\t')
    print()

# 练习9:暂停一秒输出。———————————————————————————————————————————————————————————————————————————————————————————————————9
import time
time1 = time.time()
time.sleep(1)
time2 = time.time()
print(time2-time1)

# 练习10:暂停一秒输出,并格式化当前时间。———————————————————————————————————————————————————————————————————————————————————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个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。————————————————————————————11
# 假如兔子都不死,问每个月的兔子总数为多少?
a = b =1
for i in range(1,22):
    print('%12ld %12ld' % (a,b),end='')
    if i % 3 == 0:
        print()
    a,b = a+b, a+2*b

# 练习12:判断101-200之间有多少个素数,并输出所有素数。———————————————————————————————————————————————————————————————————————12
sum = 0
for i in range(101, 201):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        sum += 1
        print(i, end=' ')
print(f'\n共{sum}个素数')

# 练习13:打印出所有的"水仙花数"。—————————————————————————————————————————————————————————————————————————————————————————13
# 所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
for i in range(100, 1000):
    a = i // 100
    b = i % 100 // 10
    c = i % 10
    if a**3 + b**3 + c**3 == i :
        print(i, end=' ')

# 练习14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。——————————————————————————————————————————————————————————————14
number = int(input('输入数字:'))
dec = []
i = 2
numtmp = number
while(numtmp != 1):
    if numtmp % i == 0:
        numtmp = numtmp // i
        dec.append(i)
        i = 2
    else:
        i += 1
else:
    if numtmp != 1:
        dec.append(numtmp)
print(str(number) + ' = ', end='')
for i in dec:
    print(i, end=' * ')
print('\b\b ')

# 练习15:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。———————————————————————15
score = int(input('成绩:'))
if score >= 90:
    grade = 'A'
elif score >= 60:
    grade = 'B'
else:
    grade = 'C'
print(f'{score} is {grade}')    # print('%d is %s' % (score,grade))

# 练习16:输出指定格式的日期。—————————————————————————————————————————————————————————————————————————————————————————————16
import datetime
# 输出今日日期,格式为 yyyy.mm.dd
print(datetime.date.today().strftime('%Y.%m.%d'))
# 创建日期对象
ayhdate = datetime.date(2008, 8, 8)
print(ayhdate.strftime('%Y.%m.%d'))
# 日期算术运算
ayhafter = ayhdate + datetime.timedelta(days=100)
print(ayhafter.strftime('%Y.%m.%d'))
# 日期替换
ayhdate = ayhdate.replace(year=ayhdate.year + 4)
print(ayhdate.strftime('%Y.%m.%d'))

# 练习17:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。———————————————————————————————————————————————————————17
digit = alpha = space = other = 0
a = input('输入字符串:')
for i in a:
    if i.isdigit():
        digit+=1
    elif i.isalpha():
        alpha+=1
    elif i==' ':
        space+=1
    else:
        other+=1
# 1122aabb  ??::\\550088  99ccDDEE你好你好你好ff  --@@
print(f'含有中英文字符{alpha}个,空格{space}个,数字{digit}个,其他字符{other}个')

# 练习18:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。—————————18
a,n = map(int,input('请输入a与n:').split())
t = s = 0
for i in range(n):
    t = t * 10 + a
    s += t
print(s)

# 练习19:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。——————————————————————————————19
for i in range(1,1000):
    divisor = []
    divsum = 0
    for j in range(1,i):
        if i%j==0:
            divisor.append(j)
            divsum += j
    if divsum == i:
        print(f'{divsum} = ', end='')
        for i in divisor:
            print(f'{i} + ', end='')
        print('\b\b ')

# 练习20:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?————————————————20
top = 100
distance = -100
for i in range(10):
    distance += top * 2
    top /= 2
print(f'第10次落地时,共经过{distance}米。第10次反弹{top}米。')

# 练习21:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。————————21
# 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
sum = 1
for i in range(9):
    sum = (sum + 1) * 2
print(sum)

# 练习22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。—————————————————————————————————————22
# 有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
dict1 = {'a':1, 'b':2, 'c':3}
dict2 = {'x':0 ,'y':0, 'z':0}
dict2.update({'y':dict1['a'],'z':dict1['a']})
dict2.update({'y':dict1['c']})
for i,j in dict1.items():
    for s,t in dict2.items():
        if t==0:
            dict2[s]=dict1['b']
        if j==t:
            print(f'{i}——{s}')

# 练习23:打印出如下图案(菱形):——————————————————————————————————————————————————————————————————————————————————————————23
#    *
#   ***
#  *****
# *******
#  *****
#   ***
#    *
row = 7
for i in range(row):
    for j in range(abs(row//2-i)):
        print(' ', end='')
    for j in range(row - 2 * abs(row//2-i)):
        print('*', end='')
    print()

# 练习24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。————————————————————————————————————————————24
a = 2
b = 1
sum = 0
for i in range(20):
    sum +=a/b
    a,b = a+b,a
print(f'2/1 + 3/2 + 5/3 + 8/5 + 13/8 + 21/13 + ... = {sum}')

# 练习25:求1+2!+3!+...+20!的和。———————————————————————————————————————————————————————————————————————————————————————25
t = 1
sum = 0
for i in range(20):
    t *= i+1
    sum +=t
print(f'1! + 2! + 3! + ... + 20! = {sum}')

# 练习26:利用递归方法求5!。——————————————————————————————————————————————————————————————————————————————————————————————26
def mul(num):
    if num>1:
        return num * mul(num-1)
    else:
        return 1
print(mul(5))

# 练习27:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。———————————————————————————————————————————————————————————27
def inv(str):
    if str!='':
        inv(str[1:])
        print(str[0], end='')
    else:
        return
str = input('请输入字符串:')
inv(str)

# 练习28:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。—————————28
# 问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
def age(people):
    if people!=1:
        return age(people-1)+2
    else:
        return 10
print(age(5))

# 练习29:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。—————————————————————————————————————————————————29
number = str(int(input('请输入一个不多于5位的正整数:')))
bit = len(number)
print(f'它是{bit}位数')
for i in range(bit-1,-1,-1):
    print(number[i], end='')
print()

# 练习30:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。———————————————————————————————————————————30
number = str(int(input('请输入一个五位数:')))
print(number + '不'* (number[0]!=number[-1] or number[1]!=number[-2]) + '是回文数')

# 练习31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。———————————————————————————————————————31
week = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
one = input('请输入第一个字母:')
s = 0
t = []
for i in week:
    if i[0]==one:
        s += 1
        t.append(i)
print(t)
if s < 1:
    print('ERROR!')
elif s > 1:
    two = input('请输入第二个字母:')
    for i in t:
        if i[1] == two:
            print(i)

# 练习32:按相反的顺序输出列表的值。————————————————————————————————————————————————————————————————————————————————————————32
a = ['临', '兵', '斗', '者', '皆', '阵', '列', '前', '行']
for i in a[::-1]:
    print(i,end=' '*4)

# 练习33:按逗号分隔列表。————————————————————————————————————————————————————————————————————————————————————————————————33
a = ['临', '兵', '斗', '者', '皆', '阵', '列', '前', '行']
str = ','.join(str(i) for i in a)
print(str)

# 练习34:练习函数调用。—————————————————————————————————————————————————————————————————————————————————————————————————34
def newline_str(str):
    for i in range(len(str)):
        print(str[i])
def many_print(str):
    for i in range(3):
        newline_str(str)
if __name__ == '__main__':
    many_print('面对疾风吧!')

# 练习35:文本颜色设置。—————————————————————————————————————————————————————————————————————————————————————————————————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之内的素数。———————————————————————————————————————————————————————————————————————————————————————————————36
for i in range(2, 101):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        print(i, end=' ')

# 练习37:对10个数进行排序。——————————————————————————————————————————————————————————————————————————————————————————————37
num = list(map(int,input('请输入十个数:').split()))
num.sort()
print('由大到小排序为:', end='')
for i in num:
    print(i, end=' ')

# 练习38:求一个3*3矩阵主对角线元素之和。———————————————————————————————————————————————————————————————————————————————————38
a = []
print('请输入3*3的矩阵:')
for i in range(3):
    a.append(list(map(int,input().split(None,3)[:3])))
print(f'主对角线元素之和为:{a[0][0]+a[1][1]+a[2][2]}')

# 练习39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。————————————————————————————————————————————————————39
num = list(map(int,input('请输入十个数:').split()))
ins = int(input('请输入待插入的数:'))
num.append(ins)
num.sort(reverse=1*(num[0]>num[-1]))
for i in num:
    print(i, end=' ')

# 练习40:将一个数组逆序输出。—————————————————————————————————————————————————————————————————————————————————————————————40
a = [9, 6, 5, 4, 1]
print('原列表:', a)
a.sort(reverse=1*(a[0]<a[-1]))
print('倒序后:', a)

# 练习41:模仿静态变量的用法。—————————————————————————————————————————————————————————————————————————————————————————————41
def varfunc():
    var = 0
    print('var = %d' % var)
    var += 1
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定义变量的用法。—————————————————————————————————————————————————————————————————————————————————————42
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)另一案例。———————————————————————————————————————————————————————————————————————————————————43
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 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:——————————————————————————————————————————————————————44
# 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]]
z = []
for i in range(3):
    z.append([])
    for j in range(3):
        z[i].append(x[i][j]+y[i][j])
for i in z:
    print(i)

# 练习45:统计 1 到 100 之和。———————————————————————————————————————————————————————————————————————————————————————————45
from functools import reduce
print('1到100之和为:',reduce(lambda x,y:x+y, [i for i in range(101)]))

# 练习46:求输入数字的平方,如果平方运算后小于 50 则退出。—————————————————————————————————————————————————————————————————————46
print('求输入数字的平方,若平方运算后小于50,程序将停止运行。')
num = int(input('请输入一个数字:'))
print('其平方为:', num ** 2)
while(num ** 2 >= 50):
    num = int(input('请输入一个数字:'))
    print('其平方为:', num ** 2)

# 练习47:两个变量值互换。————————————————————————————————————————————————————————————————————————————————————————————————47
a, b = 5, 10
a, b = b, a
print(a, b)

# 练习48:数字比较。—————————————————————————————————————————————————————————————————————————————————————————————————————48
i = 5
j = 10
if i > j:
    print(f'{i}大于{j}')
elif i < j:
    print(f'{i}小于{j}')
else:
    print(f'{i}等于{j}')

# 练习49:使用lambda来创建匿名函数。———————————————————————————————————————————————————————————————————————————————————————49
maximum = lambda x, y: (x > y) * x + (x < y) * y
minimum = lambda x, y: (x > y) * y + (x < y) * x
a = 5
b = 10
print('The larger one is %d' % maximum(a, b))
print('The lower one is %d' % minimum(a, b))

# 练习50:输出一个随机数。————————————————————————————————————————————————————————————————————————————————————————————————50
import random
a = random.randint(0, 99)
print(a)

# 练习51:学习使用按位与 & 。—————————————————————————————————————————————————————————————————————————————————————————————51
a = 0b1101
b = a & 11
print('a & b = %d' % b)
b &= 7
print('a & b = %d' % b)

# 练习52:学习使用按位或 | 。—————————————————————————————————————————————————————————————————————————————————————————————52
a = 0b1001
b = a | 11
print('a | b = %d' % b)
b |= 7
print('a | b = %d' % b)

# 练习53:学习使用按位异或 ^ 。———————————————————————————————————————————————————————————————————————————————————————————53
a = 0b1001
b = a ^ 0b1011
print(f'a ^ b = {bin(b)}')
b ^= 0b1111
print(f'a ^ b = {bin(b)}')

# 练习54:取一个整数a从右端开始的4〜7位。———————————————————————————————————————————————————————————————————————————————————54
a = int(input('input a number:\n'))
# 682 = 10 1010 1010
b = a >> 4
c = ~(~0 << 4)
d = b & c
print(bin(a), bin(b), bin(c), bin(d))

# 练习55:学习使用按位取反~。—————————————————————————————————————————————————————————————————————————————————————————————55
a = 0b101010
b = ~ a
print(bin(a), bin(b))
print(a, b),
# 计算过程:
#     转二进制:0 101010
#     计算补码:0 101010
#     按位取反:1 010101
# 转为原码:
#     按位取反:1 101010
#     末位加 1:1 101011
#     符号位为 1 是负数,即 -43

# 练习56:画图,学用circle画圆形。————————————————————————————————————————————————————————————————————————————————————————56
import turtle
turtle.color('blue')
turtle.pensize(5)
turtle.speed(10)
for i in range(0,210,10):
    turtle.circle(i)
    turtle.penup()
    turtle.right(90)
    turtle.forward(10)
    turtle.left(90)
    turtle.pendown()
turtle.done()

# 练习57:画图,学用line画直线。——————————————————————————————————————————————————————————————————————————————————————————57
import turtle
turtle.setup(600, 600)
turtle.color('blue')
turtle.pensize(5)
turtle.speed(10)
turtle.penup()
turtle.goto(-250, 250)
turtle.pendown()
for i in range(0,250,10):
    print(i)
    turtle.forward(500)
    turtle.penup()
    turtle.right(90)
    turtle.forward(10)
    turtle.right(90)
    turtle.pendown()
    turtle.forward(500)
    turtle.penup()
    turtle.left(90)
    turtle.forward(10)
    turtle.left(90)
    turtle.pendown()
turtle.done()

# 练习58:画图,学用rectangle画方形。—————————————————————————————————————————————————————————————————————————————————————58
import turtle
turtle.color('grey')
turtle.pensize(5)
turtle.speed(10)
for i in range(0,400,20):
    for j in range(4):
        turtle.right(90)
        turtle.forward(i)
    turtle.penup()
    turtle.forward(10)
    turtle.left(90)
    turtle.forward(10)
    turtle.right(90)
    turtle.pendown()
turtle.done()

# 练习59:画图,综合例子。 ——————————————————————————————————————————————————————————————————————————————————————————————59
# -*- coding:utf-8 –*-
# 用turtlr画时钟
# 以自定义shape的方式实现
# 当然,使用多只turtle来完全重绘的方法实现,也没有问题。
# 如果需要重绘方法的代码,请加公众号:see_goal 留言“turtle时钟”
import turtle as t
import datetime as d


def skip(step):  # 抬笔,跳到一个地方
    t.penup()
    t.forward(step)
    t.pendown()


def drawClock(radius):  # 画表盘
    t.speed(0)
    t.mode("logo")  # 以Logo坐标、角度方式
    t.hideturtle()
    t.pensize(7)
    t.home()  # 回到圆点
    for j in range(60):
        skip(radius)
        if (j % 5 == 0):
            t.forward(20)
            skip(-radius - 20)
        else:
            t.dot(5)
            skip(-radius)
        t.right(6)


def makePoint(pointName, len):  # 钟的指针,时针、分针、秒针
    t.penup()
    t.home()
    t.begin_poly()
    t.back(0.1 * len)
    t.forward(len * 1.1)
    t.end_poly()
    poly = t.get_poly()
    t.register_shape(pointName, poly)  # 注册为一个shape


def drawPoint():  # 画指针
    global hourPoint, minPoint, secPoint, fontWriter
    makePoint("hourPoint", 100)
    makePoint("minPoint", 120)
    makePoint("secPoint", 140)

    hourPoint = t.Pen()  # 每个指针是一只新turtle
    hourPoint.shape("hourPoint")
    hourPoint.shapesize(1, 1, 6)

    minPoint = t.Pen()
    minPoint.shape("minPoint")
    minPoint.shapesize(1, 1, 4)

    secPoint = t.Pen()
    secPoint.shape("secPoint")
    secPoint.pencolor('red')

    fontWriter = t.Pen()
    fontWriter.pencolor('gray')
    fontWriter.hideturtle()


def getWeekName(weekday):
    weekName = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
    return weekName[weekday]


def getDate(year, month, day):
    return "%s-%s-%s" % (year, month, day)


def realTime():
    curr = d.datetime.now()
    curr_year = curr.year
    curr_month = curr.month
    curr_day = curr.day
    curr_hour = curr.hour
    curr_minute = curr.minute
    curr_second = curr.second
    curr_weekday = curr.weekday()

    t.tracer(False)
    secPoint.setheading(360 / 60 * curr_second)
    minPoint.setheading(360 / 60 * curr_minute)
    hourPoint.setheading(360 / 12 * curr_hour + 30 / 60 * curr_minute)

    fontWriter.clear()
    fontWriter.home()
    fontWriter.penup()
    fontWriter.forward(80)
    # 用turtle写文字
    fontWriter.write(getWeekName(curr_weekday), align="center", font=("Courier", 14, "bold"))
    fontWriter.forward(-160)
    fontWriter.write(getDate(curr_year, curr_month, curr_day), align="center", font=("Courier", 14, "bold"))

    t.tracer(True)
    print(curr_second)
    t.ontimer(realTime, 100)  # 每隔100毫秒调用一次realTime()


def main():
    t.tracer(False)
    drawClock(160)
    drawPoint()
    realTime()
    t.tracer(True)
    t.mainloop()


if __name__ == '__main__':
    main()

# 练习60:计算字符串长度。————————————————————————————————————————————————————————————————————————————————————————————————60
a = '123abc   123哈哈abc@@##&&\t'
print(len(a))

# 练习61:打印出杨辉三角形(要求打印出10行如下图)。——————————————————————————————————————————————————————————————————————————61
# 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
a = []
for i in range(11):
    a.append([])
    for j in range(11):
        if j == 0:
            a[i].append(1)
        elif j > i:
            a[i].append(0)
        else:
            a[i].append(a[i-1][j-1]+a[i-1][j])
for i in a:
    for j in range(len(i)):
        if i[j] == 0:
            b = i[:j]
            for k in b:
                print(k, end=' ')
            print()
            break

# 练习62:查找字符串。———————————————————————————————————————————————————————————————————————————————————————————————————62
str1 = 'abcdefg'
str2 = 'cde'
print (str1.find(str2))

# 练习63:画椭圆。——————————————————————————————————————————————————————————————————————————————————————————————————————63
import turtle as t
t.pendown()
t.setheading(90)
len = 1
for i in range(2):
    for j in range(60):
        if j < 30:
            len += 0.2
        else:
            len -= 0.2
        t.forward(len)
        t.left(3)
t.penup()
t.done()

# 练习64:利用ellipse和rectangle画图。———————————————————————————————————————————————————————————————————————————————————64
# skip

# 练习65:一个最优美的图案。——————————————————————————————————————————————————————————————————————————————————————————————65
import turtle
turtle.setup(600, 600)
turtle.color('green')
turtle.pensize(3)
turtle.speed(10)
turtle.penup()
turtle.setpos(-250, 0)
turtle.pendown()
for i in range(72):
    turtle.forward(500)
    turtle.right(175)
turtle.done()

# 练习66:输入3个数a,b,c,按大小顺序输出。——————————————————————————————————————————————————————————————————————————————————66
a = list(map(int, input('请输入三个数:').split()))
a.sort()
for i in a:
    print(i, end=' ')

# 练习67:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。————————————————————————————————————————————————————67
import copy
a = list(map(int, input('请输入数组:').split()))
b = copy.deepcopy(a)
b.sort()
for i in range(len(a)):
    if a[i]==b[-1]:
        a[0], a[i] = b[-1], a[0]
    if a[i]==b[0]:
        a[-1], a[i] = b[0], a[-1]
print(a)

# 练习68:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数—————————————————————————————————————————————68
n, m = map(int, input('请输入n和m:').split())
a = list(map(int, input('请输入待处理列表:').split()))
b = []
for i in range(n):
    b.append(a[-m+i])
print(b)

# 练习69:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。———————————————69
n = int(input('请输入总人数:'))
num = []
for i in range(n):
    num.append(i + 1)
i = k = m = 0
while m < n - 1:
    if num[i] != 0: k += 1
    if k == 3:
        num[i] = 0
        k = 0
        m += 1
    i += 1
    if i == n: i = 0
for i in num:
    if i!=0:
        print(i)

# 练习70:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。———————————————————————————————————————————————————70
def lenstr(str):
    return len(str)
if __name__ == '__main__':
    print(lenstr('123   abcABC哈哈哈@#$\t\n\b'))

# 练习71:编写input()和output()函数输入,输出5个学生的数据记录。——————————————————————————————————————————————————————————————71
def inputstd(stdarr, i):
    name = input(f'请输入第{i+1}位学生的姓名:')
    age = int(input('请输入学生年龄:'))
    stdarr[i].append(name)
    stdarr[i].append(age)
    for j in range(4):
        score = int(input(f'请输入第{j+1}科分数:'))
        stdarr[i].append(score)
    return stdarr
def outputstd(stdarr, i):
    print(f'第{i+1}位学生——姓名:{stdarr[i][0]},年龄:{stdarr[i][1]},四科分数为:', end='')
    for j in range(4):
        print(stdarr[i][2+j], end='、'*(j!=3))
    print()
if __name__ == '__main__':
    n = 2
    stdarr = []
    for i in range(n):
        stdarr.append([])
        tmp = inputstd(stdarr, i)
    for i in range(n):
        outputstd(tmp, i)

# 练习72:创建一个链表。—————————————————————————————————————————————————————————————————————————————————————————————————72
num = []
for i in range(5):
    n = int(input('请输入一个整数:'))
    num.append(n)
print(num)

# 练习73:反向输出一个链表。——————————————————————————————————————————————————————————————————————————————————————————————73
num = [6, 5, 3, 4, 2]
num.reverse()
print(num)

# 练习74:列表排序及连接。————————————————————————————————————————————————————————————————————————————————————————————————74
a = [3, 6, 9, 4, 2]
b = [4, 8, 16, 9, 2]
b.sort()
a.extend(b)
print(a, b)

# 练习75:放松一下,算一道简单的题目。——————————————————————————————————————————————————————————————————————————————————————75
for i in range(5):
    n = 0
    if i != 1: n += 1
    if i == 3: n += 1
    if i == 4: n += 1
    if i != 4: n += 1
    if n == 3: print(64 + i)
# i=3,67

# 练习76:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n—————————————————————————76
def ou(n):
    s = 0
    for i in range(2, n+2, 2):
        s += 1 / i
    return s
def ji(n):
    s = 0
    for i in range(1, n+1, 2):
        s += 1 / i
    return s
if __name__ == '__main__':
    n = int(input('请输入一个正整数:'))
    s = (n % 2 == 0) and ou(n) or ji(n)
    print(s)

# 练习77:循环输出列表———————————————————————————————————————————————————————————————————————————————————————————————————77
s = ["man", "woman", "girl", "boy", "sister"]
for i in s:
    print(i)

# 练习78:找到年龄最大的人,并输出。请找出程序中有什么问题。————————————————————————————————————————————————————————————————————78
person = {"li": 18, "wang": 50, "zhang": 20, "sun": 22}
m = 'li'
for key in person.keys():
    if person[m] < person[key]:
        m = key
print('%s,%d' % (m, person[m]))

# 练习79:字符串排序。———————————————————————————————————————————————————————————————————————————————————————————————————79
str = list(map(str, input('请输入待排序的字符串:').split()))
str.sort()
print(str)

# 练习80:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。——————————————80
# 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
# 问海滩上原来最少有多少个桃子?
num = int(input("输入猴子的数目:"))
def peach(n):
    if n == num:
        return 4 * x  # 最后剩的桃子的数目
    else:
        return peach(n + 1) * 5 / 4 + 1
x = 1
while 1:
    count = 0
    for i in range(1, num):
        if peach(i) % 4 == 0:
            count = count + 1
    if count == num - 1:
        print("海滩上原来最少有 %d 个桃子" % int(peach(0)))
        break
    else:
        x = x + 1

# 练习81:809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。—————————————————————————81
# 求??代表的两位数,及809*??后的结果。
for i in range(10,100):
    if len(str(809*i))==4 and len(str(8*i))==2 and len(str(9*i))==3:
        print(f'该数为:{i}\n{809 * i} = 800 * {i} + 9 * {i}')

# 练习82:八进制转换为十进制——————————————————————————————————————————————————————————————————————————————————————————————82
a = int(input('请输入八进制数:'), 8)
print('其十进制为:', a)

# 练习83:求0—7所能组成的奇数个数。————————————————————————————————————————————————————————————————————————————————————————83
sum = 0
for i in range(1, 8):
    if i == 1:
        t = 4
    elif i == 2:
        t = 4 * 7
    else:
        t = 4 * 7 * 8**(i-2)
    sum += t
    print(f'组成{i}位数有{sum}个奇数。')

# 练习84:连接字符串。———————————————————————————————————————————————————————————————————————————————————————————————————84
a = ['临', '兵', '斗', '者']
b = ['皆', '阵', '列', '前', '行']
a.extend(b)
str = ','.join(a)
print(str)

# 练习85:输入一个奇数,然后判断最少几个 9 除于该数的结果为整数。———————————————————————————————————————————————————————————————85
num = int(input('请输入一个奇数:'))
nine = 9
while nine % num != 0 :
    nine = nine * 10 + 9
print(f'需要{len(str(nine))}个 9\n{nine} / {num} = {nine//num}')

# 练习86:两个字符串连接程序。————————————————————————————————————————————————————————————————————————————————————————————86
a = '临兵斗者'
b = '皆阵列前行'
a += b
print(a)

# 练习87:回答结果(结构体变量传递)。——————————————————————————————————————————————————————————————————————————————————————87
class student:
    x = 0
    c = 0
def f(stu):
    stu.x = 20
    stu.c = 'c'
a = student()
a.x = 3
a.c = 'a'
f(a)
print(a.x,a.c)

# 练习88:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。———————————————————————————————————————————————————————88
a = list(map(int, input('请输入七个整数:').split()[:7]))
for i in a:
    print(f'{i}:' + '*'*i)

# 练习89:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,————————————————————————————————————————————————————89
# 加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
num = int(input('请输入一个四位数:'))
bit1 = [0, 0, 0, 0]
bit2 = [0, 0, 0, 0]
for i in range(4):
    bit1[i] = int(str(num)[i])
    bit2[i] = (bit1[i] + 5) % 10
bit2[0], bit2[1], bit2[2], bit2[3] = bit2[3], bit2[2], bit2[1], bit2[0]
print('加密后该数为:', bit2[0]*1000 + bit2[1]*100 + bit2[2]*10 + bit2[3])

# 练习90:列表使用实例。—————————————————————————————————————————————————————————————————————————————————————————————————90
# list
# 新建列表
testList = [10086, '中国移动', [1, 2, 4, 5]]
# 访问列表长度
print(len(testList))
# 到列表结尾
print(testList[1:])
# 向列表添加元素
testList.append('I\'m new here!')
print(len(testList))
print(testList[-1])
# 弹出列表的第二个元素
print(testList.pop(1))
print(len(testList))
print(testList)
# list comprehension
# 后面有介绍,暂时掠过
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
print(matrix)
print(matrix[1])
col2 = [row[1] for row in matrix]  # get a  column from a matrix
print(col2)
col2even = [row[1] for row in matrix if row[1] % 2 == 0]  # filter odd item
print(col2even)

# 练习91:时间函数举例1。—————————————————————————————————————————————————————————————————————————————————————————————————91
import time
print(time.ctime(time.time()))
print(time.asctime(time.localtime(time.time())))
print(time.asctime(time.gmtime(time.time())))

# 练习92:时间函数举例2。—————————————————————————————————————————————————————————————————————————————————————————————————92
import time
start = time.time()
time.sleep(2)
end = time.time()
print(end - start)

# 练习93:时间函数举例3。—————————————————————————————————————————————————————————————————————————————————————————————————93
import time
start = time.perf_counter()
time.sleep(2)
end = time.perf_counter()
print('Different is %6.3f' % (end - start))

# 练习94:时间函数举例4,一个猜数游戏,判断一个人反应快慢。——————————————————————————————————————————————————————————————————————94
import time
import random
play_it = input('你准备好开始游戏了吗?(请输入 \'y\' 或 \'n\'):')
while play_it == 'y':
    i = random.randint(0, 100)
    print('——————————猜数字游戏——————————')
    start = time.perf_counter()
    guess = int(input('请输入猜测的值:'))
    while guess != i:
        if guess > i:
            guess = int(input('大了,猜小一点:'))
        else:
            guess = int(input('小了,猜大一点:'))
    end = time.perf_counter()
    var = (end - start) / 18.2
    if var < 15:
        grade = '优秀'
    elif var < 25:
        grade = '一般'
    else:
        grade = '较差'
    print('恭喜!待猜数字为:%d' % i)
    print('本次游戏反应数值为:%6.3f,评定等级:%s' % (var,grade))
    play_it = input('\n你准备好开始新一轮游戏了吗?(请输入 \'y\' 或 \'n\'):')

# 练习95:字符串日期转换为易读的日期格式。———————————————————————————————————————————————————————————————————————————————————95
import time
a = time.strptime('Aug 28 2015 12:00AM', '%b %d %Y %I:%M%p')
a = time.strftime('%Y-%m-%d %H:%M:%S', a)
print(a)

# 练习96:计算字符串中子串出现的次数。——————————————————————————————————————————————————————————————————————————————————————96
str1 = input('请输入一个字符串:')
str2 = input('请输入一个子字符串:')
ncount = str1.count(str2)
print(ncount)

# 练习97:从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。——————————————————————————————————————————————————————97
filename = input('输入文件名:')
fp = open(filename , "w+")
ch = ''
while '#' not in ch:
    fp.write(ch)
    ch = input('输入字符串:')
fp.close()

# 练习98:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。————————————————————————————————————98
fp = open('test.txt' , "w")
ch = input('输入字符串:')
# abcdefg123456哈哈哈哈哈@#¥%……&hijklmnopqAAAAAAAAAAAAAAAA***15615616啊啊谁法师的
fp.write(ch.upper())
fp.close()

# 练习99:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。—————————————————————————99
fp = open('A.txt' , "r")
ch1 = fp.read()
fp.close()
fp = open('B.txt' , "r")
ch2 = fp.read()
fp.close()
fp = open('C.txt' , "w")
ch = ch1 + ch2
l=list(ch)
l.sort()
ch="".join(l)
fp.write(ch)
fp.close()

# 练习100:列表转换为字典。——————————————————————————————————————————————————————————————————————————————————————————————100
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
b = [111, 222, 333, 444, 555, 666, 777]
print(dict(zip(a, b)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值