# 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)))
Runoob Python100例 个人解答
最新推荐文章于 2023-01-01 15:48:05 发布