当前位置: 首页 > news >正文

Python编程练习100例(含答案)

背景:最近在学习Python编程,看到菜鸟教程中的Python 100例,就在pycharm中进行练习,学没学会,先把代码敲下来,慢慢回味吧~

以下100个实例是基于Win10系统,并且在Python3.12下测试执行通过的(pycharm中运行):
# 题目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 != k) and (i != j) and (j != k):
#                 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,求应发放奖金总数?
# num = int(input('请输入利润:'))
# arr = [1000000, 600000, 400000, 200000, 100000, 0]
# rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
# bonus = 0
# for i in range(0, 6):
#     if num > arr[i]:
#         bonus += (num - arr[i]) * rat[i]
#         print((num-arr[i])*rat[i])
#         num = arr[i]
# print(bonus)

# 题目3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
# 假设该数为 x。 1、则:x + 100 = n平方, x + 100 + 168 = m平方;
# 2、计算等式:m2 - n2 = (m + n)(m - n) = 168
# 3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数;
# 4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
# 5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
# 6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
# 7、接下来将 i 的所有数字循环计算即可。
# def find_interger():
#     for i in range(2, 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(f"x: {x}, m: {m}, n: {n}")
#
#
# find_interger()

# 题目4:输入某年某月某日,判断这一天是这一年的第几天?
# 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天:
# 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)
# if 0 < month <= 12:
#     sum = months[month - 1]
# else:
#     print('data error')
# sum += day
# print(sum)
# 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('it is the %dth day.' % sum)

# 题目5:输入三个整数x,y,z,请把这三个数由小到大输出。
# ls = []
# for i in range(3):
#     x = int(input('integer:\n'))
#     ls.append(x)
# ls.sort()
# print(ls)

# 题目6:斐波那契数列
# 程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
# def fib(n):
#     if n == 1 or n == 2:
#         return 1
#     else:
#         return fib(n-2)+fib(n-1)
#
#
# print(fib(10))

# 题目6:斐波那契数列 方法二
# def fib2(n):
#     a, b = 1, 1
#     for i in range(n-1):
#         a, b = b, a+b
#     return a
#
#
# print(fib2(10))

# 题目7:将一个列表的数据复制到另一个列表中。
# ls1 = [1, 2, 'a']
# # ls2 = []
# # ls2 = ls1.copy()
# ls2 = ls1[:]
# print(ls2)

# 题目8:输出 9*9 乘法口诀表
# for i in range(1, 10):
#     for j in range(1, i+1):
#         s = i * j
#         print('%d*%d=%2ld' % (i, j, s), end=" ")
#
#     print()

# 题目9:暂停一秒输出。程序分析:使用 time 模块的 sleep() 函数。
# import time
# myD = {1: 'a', 2: 'b'}
# for key, value in dict.items(myD):
#     print(key, value)
#     time.sleep(1)    # 暂停一秒

# 题目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个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
# 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....
# m1 = 1
# m2 = 1
# for i in range(1, 22):
#     print('%12ld %12ld' % (m1, m2), end=" ")   # 以12字符宽度打印m1和m2,不换行
#     if (i % 3) == 0:   # 每3次循环换行一次
#         print('')
#     m1 = m1 + m2
#     m2 = m1 + m2

# 题目12:判断101-200之间有多少个素数,并输出所有素数.
# h = 0
# for i in range(101, 201):
#     for j in range(2, i):
#         if i % j == 0:
#             break
#     else:
#         print(i, end=' ')
#         h += 1
# print("\n101-200之间素数共有:%d个" % h)

# 题目13:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
# 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
# for i in range(100, 999):
#     ones = i % 10
#     ten = i // 10 % 10
#     hundred = i // 100
#     if i == pow(ones, 3)+pow(ten, 3)+pow(hundred, 3):
#         print(i)

# 题目14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
#
# 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
# (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
# (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
# (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
# def reduceNum(n):
#     print('{}='.format(n), end=" ")
#     if not isinstance(n, int) or n <= 0:   # 检查n是否为正整数
#         print('请输入一个正确的数字 !')
#         exit(0)    # 退出程序
#     elif n in [1]:   # 处理n=1的特殊情况
#         print('{}'.format(n))
#     while n not in [1]:   # 当n不等于1时循环,循环保证递归
#         for i in range(2, n+1):   # 从2开始寻找因数
#             if n % i == 0:   # 找到能整除n的最小i
#                 n //= i   # n 等于 n除以i的商
#                 if n == 1:
#                     print(i)
#                 else:   # i 一定是素数
#                     print('{} *'.format(i), end=" ")   # 打印因数加*号
#                 break   # 跳出for循环
#
#
# reduceNum(1)
# reduceNum(100)

# 题目15:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
# 程序分析:程序分析:(a>b) ? a:b 这是条件运算符的基本例子。
# score = int(input('输入分数:'))
# if score >= 90:
#     grade = 'A'
# elif 60 <= score <= 89:
#     grade = 'B'
# else:
#     grade = 'C'
#
# print('%d 属于 %s' % (score, grade))    # %s格式化字符串

# 题目16:输出指定格式的日期。
# 程序分析:使用 datetime 模块
# import datetime
# if __name__ == '__main__':
#     # 输出今天日期,格式为dd/mm/yyyy
#     print(datetime.date.today().strftime('%d/%m/%Y'))
#
#     # 创建日期对象
#     mycountryBirthDate = datetime.date(1945, 10, 1)
#     print(mycountryBirthDate.strftime('%d/%m/%Y'))
#
#     # 日期算术运算
#     mycountryBirthNextDay = mycountryBirthDate + datetime.timedelta(days=1)
#     print(mycountryBirthNextDay.strftime('%d/%m/%Y'))
#
#     # 日期替换
#     mycountryFirstBirthday = mycountryBirthDate.replace(year=mycountryBirthDate.year + 1)
#     print(mycountryFirstBirthday.strftime('%d/%m/%Y'))

# 题目17:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
# 程序分析:利用 while 或 for 语句,条件为输入的字符不为 '\n'。
import string
# s = input('请输入一个字符串:')
# letters = 0
# space = 0
# digit = 0
# others = 0
# for c in s:
#     if c.isalpha():
#         letters += 1
#     elif c.isspace():
#         space += 1
#     elif c.isdigit():
#         digit += 1
#     else:
#         others += 1
# print('char = %d,space= %d,digit= %d,others = %d' % (letters, space, digit, others))

# 题目18:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
# from functools import reduce
#
# Tn = 0
# Sn = []
# n = int(input('n = '))
# a = int(input('a = '))
# for count in range(n):
#     Tn = Tn + a
#     a = a * 10
#     Sn.append(Tn)
#     print(Tn)
#
# Sn = reduce(lambda x, y: x+y, Sn)   # 使用 lambda 匿名函数
# print("计算和为:", Sn)

# 题目19:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
# from sys import stdout
# for j in range(2, 1001):
#     k = []  # 初始化空列表k,用于存储因数
#     n = -1  # 初始化计数器n为-1,用于记录因数的个数
#     s = j   # 初始化s为当前数字j,用于后续计算
#     for i in range(1, j):  # i从1遍历到j-1
#         if j % i == 0:  # 判断i是否是j的因数
#             n += 1
#             s -= i   # 从s中减去当前因数i
#             k.append(i)  # 将因数i添加到列表k中
#     if s == 0:  # 检查所有因数之和是否等于原数j
#         print(j)  # 如果是完数,打印该数
#         for i in range(n):  # 循环打印所有因数(最后一个除外)
#             stdout.write(str(k[i]))
#             stdout.write(' ')
#         print(k[n])

# 完数:方法二
# def fac(num):
#     res = set()  # 初始化一个空集合res,用于存储因数
#     for i in range(1, num):
#         if num % i == 0:  # 判断i是否是num的因数
#             res.add(i)  # 将因数i添加到集合中
#             res.add(num/i)  #  将对应的另一个因数num/i也添加到集合中
#     return res  # 返回包含所有因数的集合
#
#
# for j in range(2, 1001):
#     if j == sum(fac(j)) - j:   # 检查j是否等于其所有因数之和减去自身(即判断是否为完全数)
#         print(j)

# 题目20:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
# tour = []  # 创建空列表,用来记录每次弹跳的行程距离
# height = []   # 创建一个空列表,用来记录每次反弹后的高度
# initial_height = 100.0  # 初始高度
# num_bounces = 10   # 弹跳次数
# for i in range(1, num_bounces + 1):  # 循环10次,模拟10次弹跳
#     # 从第二次开始,落地时的距离应该是反弹高度乘以2(弹到最高点再落下)
#     if i == 1:  # 第一次弹跳特殊处理
#         tour.append(initial_height)  # 第一次只有下落,所以直接记录初始高度
#     else:
#         tour.append(2 * initial_height)  # 每次弹跳包含上升和下降,所以是高度的两倍
#     initial_height /= 2  # 每次弹跳后高度减半
#     height.append(initial_height)  # 记录每次弹跳后的新高度
#
# total_distance = sum(tour)  # 计算总距离
# final_bounce_height = height[-1]  # 获取第10次反弹后的高度
#
# print(f"总高度:tour = {total_distance}")
# print(f"第{num_bounces}次反弹高度:height={final_bounce_height}")

# 题目21:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
# 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
# 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
# 程序分析:采取逆向思维的方法,从后往前推断。
# x2 = 1  # 第10天的桃子数量
# for day in range(9, 0, -1):  # 从第9天倒推到第1天
#     x1 = (x2+1) * 2   # 计算前一天的桃子数量:(当天数量+1)*2
#     x2 = x1  # 将计算结果赋值给x2,用于下一次循环
# print(x1)  # 输出第1天的桃子总数

# 题目22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
# 已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
# for i in range(ord('x'), ord('z')+1):  # i从‘x’到‘z’的ASCII码值
#     for j in range(ord('x'), ord('z')+1):  # j从‘x’到‘z’的ASCII码值
#         if i != j:  # i和j不同
#             for k in range(ord('x'), ord('z')+1):  # k从‘x’到‘z’的ASCII码值
#                 if (i != k) and (j != k):  # 确保k与i,j都不同
#                     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)))

# 题目22:方法二
# a = set(['y', 'z'])  # 创建集合a,包含元素‘y’和‘z’
# b = set(['x', 'y', 'z'])
# c = set(['y'])
# for i in a:  # 遍历集合a中的元素
#     for j in b:
#         for k in c:
#             if len(set((i, j, k))) == 3:  # 检查i,j,k是否互不相同
#                 print('a--%s\tb--%s\tc--%s' % (i, j, k))

# 题目23:打印出如下图案(菱形):
#    *
#   ***
#  *****
# *******
#  *****
#   ***
#    *
# 程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
# def print_diamond(rows):  # 定义打印菱形的函数,rows指定菱形最大宽度
#     # 上半部分
#     for i in range(1, rows, 2):  # 从1开始,步长为2,生成奇数序列(1,3,5...)
#         spaces = " " * ((rows - i) // 2)  # 计算每行前面的空格数:(总宽度-当前星数)/2
#         stars = "*" * i  # 生成星号字符串
#         print(spaces + stars)
#     # 下半部分
#     for i in range(rows, 0, -2):
#         spaces = " " * ((rows - i) // 2)  # // 总是舍弃小数部分,/ 保留完整精度
#         stars = "*" * i
#         print(spaces + stars)
#
#
# # 设置行数,根据需要进行调整
# rows = 7
# print_diamond(rows)

# 题目24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
# 程序分析:请抓住分子与分母的变化规律。
# from functools import reduce
# a = 2.0  # 初始化第一个分子值
# b = 1.0  # 初始化第一个分母值
# ls = [a / b]  # 创建列表存储比例值
# for i in range(1, 20):  # 循环1到19
#     b, a = a, a+b  # 斐波那契递推:b取旧a值,a变为旧a+旧b
#     ls.append(a/b)  # 计算并存储新的比例值
# print(reduce(lambda x, y: x+y, ls))   # 使用reduce累加列表中的所有比例值

# 题目25:求1+2!+3!+...+20!的和。
# s = 0  # 初始化累加器,用于存储阶乘和
# t = 1
# for n in range(1, 21):
#     t *= n  # 计算当前n的阶乘:t = t * n
#     s += t  # 将当前阶乘值累加到总和s中
# print('1!+2!+3!+...+20! = %d' % s)

# 题目26:利用递归方法求5!。
# def fact(n):
#     s = 0
#     if n == 0:
#         s = 1
#     else:
#         s = n * fact(n-1)
#     return s
#
#
# print(fact(5))

# 题目27:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
# def output(s, l):
#     if l == 0:
#         return
#     print(s[l-1])
#     output(s, l-1)
#
#
# s = input("请输入字符串:")
# l = len(s)
# output(s, l)

# 题目28:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。
# 问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
# 程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
# one = 10
# def age(a):
#     if a == 1:
#         return 10
#     else:
#         return age(a-1) + 2
#
# print(age(5))

# 题目29:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
# n = int(input("请输入一个正整数:\n"))
# a = n // 10000
# b = n % 10000 // 1000
# c = n % 1000 // 100
# d = n % 100 // 10
# e = n % 10
#
# if a != 0:
#     print("5位数:", e, d, c, b, a)
# elif b != 0:
#     print("4位数", e, d, c, b)
# elif c != 0:
#     print("3位数:", e, d, c)
# elif b != 0:
#     print("2位数:", e, d)
# else:
#     print("1位数:", e)

# 题目30:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
# num = int(input("请输入一个5位数:"))
# s = str(num)
# flag = True
# for i in range(len(s)//2):
#     if s[i] != s[-i - 1]:
#         flag = False
#         break
# if flag:
#     print("%d 是回文数!" % num)
# else:
#     print("%d 不是回文数!" % num)

# 题目31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
# letter = input("please input letter:")
# if letter == 'S':
#     print('please input second letter')
#     letter = input("please input:")
#     if letter == 'a':
#         print('Saturday')
#     elif letter == 'u':
#         print('Sunday')
#     else:
#         print('data error')
# elif letter == 'F':
#     print('Friday')
# elif letter == 'M':
#     print('Monday')
# elif letter == 'T':
#     print('please input second letter')
#     letter = input("please input:")
#
#     if letter == 'u':
#         print('Tuesday')
#     elif letter == 'h':
#         print('Thursday')
#     else:
#         print('data error')
# elif letter == 'W':
#     print('Wednesday')
# else:
#     print('data error')

# 题目32:按相反的顺序输出列表的值。
# ls = ['one', 'two', 'three', 'four', 'five']
# for i in ls[::-1]:   # 表示从右往左以步长为1进行切片。步长小于0时,返回序列为倒序
#     print(i)

# 题目33:按逗号分隔列表。
# L = [1, 2, 3, 4, 5, 6]
# s1 = ','.join(str(n) for n in L)
# print(s1)

# 题目34:练习函数调用。
# def hello_myWorld():
#     print('Hello my python world')
#
#
# def hello_world():
#     for i in range(3):
#         hello_myWorld()
#
#
# if __name__ == '__main__':
#     hello_world()

# 题目35:文本颜色设置。
# class bcolors:  # 定义名为bcolors的类,用于封装ANSI颜色控制码
#     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之内的素数。
# lower = int(input("请输入区间最小值:"))
# upper = int(input("请输入区间最大值:"))
# for num in range(lower, upper+1):
#     # 素数大于1
#     if num > 1:
#         for i in range(2, num):
#             if (num % i ) == 0:
#                 break
#         else:
#             print(num)

# 题目37:对10个数进行排序。
# if __name__ == "__main__":  # 主程序入口,当脚本直接运行时执行下方代码块
#     N = 10
#     print('请输入10个数字:\n')
#     ls = []
#     for i in range(N):
#         ls.append(int(input("输入一个数字:\n")))
#
#     for i in range(N):
#         print(ls[i], end=" ")   # 打印原始输入的数字列表
#
#     # 排列10个数字
#     for i in range(N - 1):   # 控制排序轮次
#         min = i   # 记录当前最小值位置
#         for j in range(i+1, N):   # 查找后续元素中的最小值
#             if ls[min] > ls[j]:
#                 min = j    # 更新最小值位置
#         ls[i], ls[min] = ls[min], ls[i]  # 交换元素实现选择排序
#     print('\n排列之后:')
#     for i in range(N):
#         print(ls[i], end=" ")

# 题目38:求一个3*3矩阵主对角线元素之和
# if __name__ == '__main__':
#     a = []  # 初始化空列表a(将用于存储3x3矩阵)
#     sum = 0.0
#     for i in range(3):  # 控制矩阵行数(3行)
#         a.append([])  # 每行添加空子列表
#         for j in range(3):  # 控制每行的列数(3列)
#             a[i].append(float(input("请输入数字:\n")))   # 将用户输入转为浮点数存入矩阵
#     for i in range(3):  # 遍历对角线元素(行号=列号)
#         sum += a[i][i]  # 累加主对角线元素(a[0][0], a[1][1], a[2][2])
#     print(sum)

# 题目39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
# 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
# if __name__ == '__main__':
#     # 0作为加入数字的占位符
#     a = [1, 4, 6, 9, 13, 16, 19, 28, 40, 100, 0]
#     print('原始列表:')
#     for i in range(len(a)):
#         print(a[i])
#     number = int(input("\n请输入一个数字:\n"))
#     end = a[9]  # 获取当前列表的最大值(第10个元素,索引9)
#     if number > end:  # 如果输入数字大于当前最大值
#         a[10] = number  # 直接替换末尾占位符
#     else:  # 否则执行插入排序
#         for i in range(10):
#             if a[i] > number:  # 找到第一个比输入数字大的位置
#                 temp1 = a[i]  # 保存当前位置原值
#                 a[i] = number  # 插入新数字
#                 for j in range(i+1, 11):  # 后移后续元素
#                     temp2 = a[j]
#                     a[j] = temp1
#                     temp1 = temp2
#                 break  # 完成插入后退出循环
#
#     print("排序后列表:")
#     for i in range(11):
#         print(a[i])

# 题目40:将一个数组逆序输出。
# if __name__ == '__main__':
#     a = [9, 6, 5, 4, 1, 10]
#     N = len(a)
#     print(a)
#     for i in range(len(a) // 2):
#         a[i], a[N-i-1] = a[N-i-1], a[i]
#     print(a)

# 题目41:模仿静态变量的用法。
# 第一部分:函数调用
# def varfunc():
#     var = 0  # 每次调用都会重新初始化为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()

# 题目42:学习使用auto定义变量的用法。
# num = 2  # 定义全局变量
#
#
# def autofunc():
#     num = 1  #  函数内部创建局部变量(与全局变量同名但独立),作用域仅在该函数内有效
#     print('internal block num = %d' % num)
#     num += 1  # 递增局部变量(每次调用函数都会重新初始化为1)
#
#
# for i in range(3):
#     print('The num = %d' % num)  # 打印全局变量
#     num += 1  # 递增全局变量
#     autofunc()

# 题目43:模仿静态变量(static)另一案例。
# class Num:
#     nNum = 1  # 定义类属性
#
#     def inc(self):  # 定义实例方法inc
#         self.nNum += 1  # 当首次访问时,会创建实例属性nNum(值为类属性值+1),后续调用会递增实例属性
#         print('nNum = %d' % self.nNum)
#
#
# if __name__ == '__main__':
#     nNum = 2  # 定义全局变量nNum(与类属性无关)
#     inst = Num()  # 创建Num类的实例
#     for i in range(3):
#         nNum += 1
#         print('The num = %d' % nNum)
#         inst.inc()  # 调用实例的inc方法

# 题目44:两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
# X = [[12,7,3],
#     [4 ,5,6],
#     [7 ,8,9]]

# Y = [[5,8,1],
#     [6,7,3],
#     [4,5,9]]
# 创建一个3x3的二维列表(矩阵),包含3行3列的数字
# X = [[12, 7, 3],
#      [4, 5, 6],
#      [7, 8, 9]]
#
# Y = [[5, 8, 1],
#      [6, 7, 3],
#      [4, 5, 9]]
#
# result = [[0, 0, 0],
#           [0, 0, 0],
#           [0, 0, 0]]
# # 迭代输出行
# for i in range(len(X)):   # len(X)获取矩阵行数(3)
#     # 迭代输出列
#     for j in range(len(X[0])):  # len(X[0])获取第一行的列数(3)
#         result[i][j] = X[i][j] + Y[i][j]
# for r in result:
#     print(r)

# 题目45:统计 1 到 100 之和。
# sum = 0
# for i in range(1, 101):
#     sum += i
# print('1到100的和为:%d' % sum)

# 题目46:求输入数字的平方,如果平方运算后小于 50 则退出。
# TRUE = 1
# FALSE = 0
#
#
# def SQ(x):
#     return x * x
#
#
# print('如果输入的数字平方运算后小于50,程序将停止运行。')
# again = 1
# while again:
#     num = int(input("请输入一个数字:"))
#     print('平方运算结果为:%d' % (SQ(num)))
#     if SQ(num) >= 50:
#         again = TRUE
#     else:
#         again = FALSE

# 题目47:两个变量值互换。
# def exchange(a, b):
#     a, b = b, a
#     return (a, b)
#
#
# if __name__ == '__main__':
#     x = 10
#     y = 20
#     print('x = %d,y = %d' % (x, y))
#     x, y = exchange(x, y)
#     print("互换后:x=%d,y=%d" % (x, y))

# 题目48:数字比较。
# if __name__ == '__main__':
#     i = 10
#     j = 20
#     if i > j:
#         print('%d 大于 %d' % (i, j))
#     elif i == j:
#         print('%d 等于 %d' % (i, j))
#     elif i < j:
#         print('%d 小于 %d' % (i, j))
#     else:
#         print('未知')

# 题目49:使用lambda来创建匿名函数。
# 求两个数的较大值:原理:利用布尔值在算术运算中会转换为1(True)/0(False)的特性;
# 当x>y时:(x>y)=1,(x<y)=0 -->结果为1x+0y=x
# 当x<y时:(x>y)=0,(x<y)=1 → 结果为0x+1y=y
# MAXIMUM = lambda x, y: (x > y)*x+(x < y)*y   # lambda表达式使函数定义更紧凑
# MINIMUM = lambda x, y: (x > y)*y+(x < y)*x  # 原理相似,求最小值:当x>y时返回y,当x<y时返回x
#
# if __name__ == '__main__':
#     a = 100
#     b = 20
#     print('The larger one is %d' % MAXIMUM(a, b))
#     print('The lower one is %d' % MINIMUM(a, b))
# 题目50:输出一个随机数。
# import random
# # 生成10到20之间的随机数
# print(random.uniform(10, 20))

# 题目51:学习使用按位与 & 。
# 程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1
# if __name__ == '__main__':
#     a = 0x77  # 定义变量a并赋值为十六进制数0x77(对应十进制119),二进制表示为01110111
#     b = a & 3  # 进行位与运算(&):3的二进制00000011,按位与运算规则:两位同时为1时结果为1,否则为0
#     print('a & b = %d' % b)
#     b &= 7  # b=b&7,7的二进制是00000111,当前b=3(00000011)
#     print('a & b = %d' % b)

# 题目52:学习使用按位或 | 。
# 程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1
# if __name__ == '__main__':
#     a = 0o77   # 将八进制数77(前缀0o表示八进制)赋值给变量a,0o77转换为十进制是7*8 + 7 = 63
#     b = a | 3  # 对a和3进行按位或运算(|),a=63(二进制111111),3(二进制000011),按位或运算结果:111111 | 000011 = 111111(即63)
#     print('a | b is %d' % b)
#     b |= 7  # 复合赋值运算符,等价于b = b|7,   111111 | 000111 = 111111(63)
#     print('a | b is %d' % b)

# 题目53:题目:学习使用按位异或 ^ 。
# 程序分析:0^0=0; 0^1=1; 1^0=1; 1^1=0
# if __name__ == '__main__':
#     a = 0o77  # 将八进制数77(前缀0o表示八进制)赋值给变量a,0o77转换为十进制是7*8 + 7 = 63
#     b = a ^ 3  # a=63(二进制111111),3(二进制000011),按位异或运算结果:111100 (60)
#     print('The a ^ 3 = %d' % b)
#     b ^= 7  # 111100 ^ 000111 = 111011 (59)
#     print('the a ^ b = %d' % b)

# 题目54:取一个整数a从右端开始的4〜7位。   *********不太懂***********
# 程序分析:可以这样考虑:
# (1)先使a右移4位。
# (2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
# (3)将上面二者进行&运算。
# if __name__ == '__main__':
#     a = int(input("请输入一个数字:\n"))
#     b = a >> 4  # 将变量a的值向右位移4位(相当于除以16取整)后赋值给b,例如:若a=32(二进制100000),b=32>>4=2(二进制10)
#     print(b)
#     c = ~(~0 << 4)  # ~0得到全1的二进制数(在Python中是-1),<<4左移4位得到...11110000,~取反后得到00001111(即十进制15),最终c的值是二进制后4位为1的掩码(0b1111)
#     d = b & c  # 将b的值与掩码c进行按位与运算,效果是保留b的最低4位,其他位清零
#     print('%o\t%o' % (a, d))  # 以八进制格式输出:第一个%o输出原始数字a的八进制表示,第二个%o输出处理后d的八进制表示

# 题目55:学习使用按位取反~。
# 说明:二进制数在内存中以补码的形式存储。
# 按位取反:二进制每一位取反,0 变 1,1 变 0。
# 最高位为符号位,正数的符号位为 0,负数为 1。
# 对正数来说,最高位为 0,其余各位代表数值本身(以二进制表示),如 +42 的补码为 00101010。
# 对负数而言,把该数绝对值的补码按位取反,然后对整个数加 1,即得该数的补码。如 -42 的补码为 11010110(00101010 按位取反11010101+1 即 11010110)。
#
# a = 7  # 二进制:0 0111,补码:0 0111;取反:1 1000  即-8
# b = ~a  # ~是Python的按位取反运算符
# # 负数的补码是在原码的基础上,除符号位外,其他各位按位取反,而后末位+1,若有进位则产生进位;
# c = -7  # -7的补码:1 1001;取反:0 0110  即6
# d = ~c
# print('变量a取反结果为:%d' % b)  # 变量a取反结果为:-8
# print('变量c取反的结果为:%d' % d)  # 变量c取反的结果为:6

# 题目56:画图,学用circle画圆形。
# if __name__ == '__main__':
#     from tkinter import *  # 导入tkinter图形界面库的所有组件
#
#     canvas = Canvas(width=800, height=600, bg='yellow')  # 创建一个800x600像素的画布,背景色为黄色
#     canvas.pack(expand=YES, fill=BOTH)  # 将画布放置到主窗口中,设置expand和fill参数让画布随窗口大小变化
#     k = 1  # 初始化变量k,用于控制圆的半径
#     j = 1  # 初始化变量j,用于控制圆的半径增量
#     for i in range(0, 26):  # 循环26次,绘制26个同心圆
#         canvas.create_oval(310-k, 250-k, 310+k, 250+k, width=1)  # 左上角坐标(310-k,250-k),右下角坐标(310+k,250+k),线条宽为1像素
#         k += j
#         j += 0.5
#
#     mainloop()  # 启动tkinter的主事件循环,显示GUI窗口

# 题目57:画图,学用line画直线。
# if __name__ == '__main__':
#     from tkinter import *
#     canvas = Canvas(width=400, height=400, bg='green')
#     canvas.pack(expand=YES, fill=BOTH)  # 将画布放置到窗口中,允许扩展填充
#     x0 = 263
#     y0 = 263
#     y1 = 275
#     for i in range(19):
#         canvas.create_line(x0, y0, x0, y1, width=1, fill='red')  # 在画布上绘制红色垂直线
#         x0 = x0 - 5
#         y0 = y0 - 5
#         y1 = y1 + 5
#     x0 = 263
#     y0 = 263
#     y1 = 275
#     for i in range(21):
#         canvas.create_line(x0, y0, x0, y1, fill='red')
#         x0 += 5
#         y0 += 5
#         y1 += 5
#
#     mainloop()

# 题目58:画图,学用rectangle画方形。
# 程序分析:
# rectangle(int left, int top, int right, int bottom)
# 参数说明:(left ,top )为矩形的左上坐标,(right,bottom)为矩形的右下坐标,两者可确定一个矩形的大小
# if __name__ == '__main__':
#     from tkinter import *
#     root = Tk()
#     root.title('Canvas')
#     canvas = Canvas(root, width=400, height=400, bg='yellow')
#     x0 = 263
#     y0 = 263
#     x1 = 275
#     y1 = 275
#     for i in range(19):
#         canvas.create_rectangle(x0, y0, x1, y1)
#         x0 -= 5
#         y0 -= 5
#         x1 += 5
#         y1 += 5
#     canvas.pack()
#     root.mainloop()

# 题目59:画图,综合例子。
# 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。。
# if __name__ == '__main__':
#     from tkinter import *
#     canvas = Canvas(width=300, height=300, bg='green')
#     canvas.pack(expand=YES, fill=BOTH)
#     # 设置中心点坐标
#     x0 = 150
#     y0 = 100
#     # 绘制三个同心圆(半径10,20,50像素)
#     canvas.create_oval(x0-10, y0-10, x0+10, y0+10)
#     canvas.create_oval(x0-20, y0-20, x0+20, y0+20)
#     canvas.create_oval(x0-50, y0-50, x0+50, y0+50)
#     import math
#     B = 0.809  # 设置y轴缩放系数
#     for i in range(16):
#         a = 2 * math.pi / 16 * i  # 计算16个等分角度
#         x = math.ceil(x0 + 48 * math.cos(a))  # 计算每个角度对应的终点坐标
#         y = math.ceil(y0 + 48 * math.sin(a)*B)  # 计算每个角度对应的终点坐标
#         canvas.create_line(x0, y0, x, y, fill='pink', width=2)  # 从中心点绘制16条红色直线
#     canvas.create_oval(x0-60, y0-60, x0+60, y0+60)  # 绘制大圆(半径60)
#
#     for k in range(501):
#         for i in range(15):
#             a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k  # 计算动态旋转角度(每次增加1度)
#             x = math.ceil(x0 + 48 * math.cos(a))
#             y = math.ceil((y0 + 48 + math.sin(a)*B))
#             canvas.create_line(x0, y0, x, y, fill='red')
#         for j in range(50):
#             a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k - 1
#             x = math.ceil(x0 + 48 * math.cos(a))
#             y = math.ceil((y0 + 48 * math.sin(a) * B))
#             canvas.create_line(x0, y0, x, y, fill='yellow')
#     mainloop()

# 题目60:计算字符串长度。  
# str1 = 'str1len'
# print(len(str1))

# 题目61:打印出杨辉三角形(要求打印出10行如下图)。
# if __name__== '__main__':
#     a = []  # 初始化空列表a
#     # 创建一个10x10的二维列表,初始值全为0
#     for i in range(10):
#         a.append([])  # 添加10个空子列表
#         for j in range(10):
#             a[i].append(0)  # 在每个子列表中添加10个0
#     for i in range(10):
#         a[i][0] = 1  # 每行的第0列设为1
#         a[i][i] = 1  # 每行的对角线元素设为1
#     for i in range(2, 10):  # 从第2行开始
#         for j in range(1, i):  # 从第1列到第i-1列
#             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):  # 每行只输出i+1个元素
#             stdout.write(str(a[i][j]))
#             stdout.write(' ')
#         print()  # 换行

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

# 题目63:画椭圆。(使用 Tkinter。)
# if __name__ == '__main__':
#     from tkinter import *
#     x = 360
#     y = 160
#     top = 130
#     bottom = 130
#
#     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()

# 题目64:利用ellipse 和 rectangle 画图。。
# if __name__ == '__main__':
#     from tkinter import *
#     canvas = Canvas(width=400, height=600, bg='white')
#     left = 20
#     right = 50
#     top = 50
#     num = 15
#     for i in range(num):
#         canvas.create_oval(250-right, 250-left, 250+right, 250+left)
#         # canvas.create_oval(250-20, 250-top, 250+20, 250+top)
#         canvas.create_rectangle(20-2*i, 20-2*i, 10*(i+2), 10*(i+2))
#         right += 5
#         left += 5
#         top += 5
#     canvas.pack()
#     mainloop()

# 题目65:一个最优美的图案。
# import math
# from tkinter import *
#
#
# class PTS:  # 定义PTS类,用于存储点的x/y坐标
#     def __init__(self):  # 初始化方法将坐标设为(0,0)
#         self.x = 0
#         self.y = 0
#
#
# points = []  # 创建全局空列表,用于存储点对象
#
#
# def LineToDemo():
#     screenx = 400
#     screeny = 400
#     canvas =Canvas(width=screenx, height=screeny, bg='white')  # 设置画布尺寸
#
#     AspectRatio = 0.85  # 设置纵横比
#     MAXPTS = 15  # 设置最大点数
#     h = screeny
#     w = screenx
#     xcenter = w / 2
#     ycenter = h / 2  # 设置画布中心点坐标
#     radius = (h - 30) / (AspectRatio*2) - 20   # 计算圆的半径
#     step = 360 / MAXPTS  # 计算每个点之间的角度间隔
#     angle = 0.0
#     for i in range(MAXPTS):  # 循环生成15个点
#         rads = angle * math.pi / 180.0  # 将角度转为弧度
#         p = PTS()  # 创建PTS对象
#         p.x = xcenter + int(math.cos(rads) * radius)
#         p.y = ycenter - int(math.sin(rads) * radius * AspectRatio)  # 计算该点在圆周上的x/y坐标(考虑纵横比)
#         angle += step  # 角度递增
#         points.append(p)  # 将点存入列表
#     canvas.create_oval(xcenter - radius, ycenter - radius, xcenter + radius, ycenter + radius)  # 在画布上绘制圆形
#     for i in range(MAXPTS):   # 双重循环连接所有点(避免重复连线)
#         for j in range(i, MAXPTS):
#             canvas.create_line(points[i].x, points[i].y, points[j].x, points[j].y)  # 每个点与其他所有后续点连线
#
#     canvas.pack()  # 显示画布
#     mainloop()  # 进入主事件循环
#
#
# if __name__ == '__main__':
#     LineToDemo()

# 题目66:输入3个数a,b,c,按大小顺序输出。
# if __name__ == '__main__':
#     n1 = int(input('n1 = : '))
#     n2 = int(input('n2 = : '))
#     n3 = int(input('n3 = : '))
#
#     def swap(p1, p2):
#         return p2, p1
#
#     if n1 > n2:
#         n1, n2 = swap(n1, n2)
#     if n1 > n3:
#         n1, n3 = swap(n1, n3)
#     if n2 > n3:
#         n2, n3 = swap(n2, n3)
#
#     print(n1, n2, n3)

# 题目67:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
# def inp(numbers):
#     for i in range(6):
#         numbers.append(int(input('输入一个数字: ')))
#
#
# P = 0  # 定义全局变量
#
#
# def arr_max(array):  # 定义查找最大值函数
#     max = 0  # 初始化最大值索引为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_max将最大值移动首位
#     arr_min(array)  # 调用arr_min将最小值移动到末尾
#     print('计算结果是:')
#     outp(array)

# 题目68:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数
# if __name__ == '__main__':
#     n = int(input('整数n为: '))
#     m = int(input('向后移动m个位置为: '))
#
#     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  # 移动次数减1
#         if m > 0:
#             move(array, n, m)  # 递归调用直到完成所有移动
#
#     numbers = []  # 创建空数组
#     for i in range(n):
#         numbers.append(int(input('输入一个数字: ')))
#     print('原始列表:', numbers)
#
#     move(numbers, n, m)  # 调用移动函数处理数组
#     print('移动之后:', numbers)

# 题目69:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
# if __name__ == '__main__':
#     n = int(input('请输入总人数: '))
#     num = []  # 创建空列表
#     for i in range(n):  # 循环n次
#         num.append(i+1)  # 将1到n的数字存入列表
#
#     i = 0  # 当前索引位置
#     k = 0  # 报数计数器
#     m = 0  # 已淘汰人数计数器
#
#     while m < n-1:  # 当淘汰人员未达n-1时循环
#         if num[i] != 0:  # 如果当前位置未被淘汰
#             k += 1  # 报数器加1
#         if k == 3:  # 报到3的人淘汰
#             num[i] = 0  # 标记为淘汰
#             k = 0  # 重置报数器
#             m += 1  # 淘汰人数加1
#         i += 1  # 移动到下一个人
#         if i == n:  # 如果超出列表长度
#             i = 0  # 回到列表开头
#
#     # 找出最后剩下的人
#     i = 0   # 重置索引
#     while num[i] == 0:  # 跳过已淘汰的人
#         i += 1  # 移动到下一个人
#     print(num[i])  # 输出最后剩下的人

# 题目70:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
# if __name__ == '__main__':
#     str1 = input('请输入字符串: ')
#     print('字符串有%d个字符' % len(str1))

# 题目71:编写input()和output()函数输入,输出5个学生的数据记录。
# N = 5
# # stu:
# # num:string    name:string     score[4]:list
# student = []
# for i in range(5):
#     student.append(['', '', []])
#
#
# def input_stu(stu):
#     for i in range(N):
#         stu[i][0] = input('请输入学生学号: ')
#         stu[i][1] = input('请输入学生姓名: ')
#         for j in range(3):
#             stu[i][2].append(input('分数: '))
#
#
# def output_stu(stu):
#     for i in range(N):
#         print('%-6s%-10s' % (stu[i][0], stu[i][1]))
#         for j in range(3):
#             print('%-8s' % stu[i][2][j])
#
#
# if __name__ == '__main__':
#     input_stu(student)
#     print(student)
#     output_stu(student)

# 题目72:创建一个链表。
# if __name__ == '__main__':
#     ptr = []
#     for i in range(5):
#         num = int(input('请输入一个数字:'))
#         ptr.append(num)
#     print(ptr)

# 题目73:反向输出一个链表。
# if __name__ == '__main__':
#     ptr = []
#     for i in range(5):
#         num = int(input('请输入一个数字:'))
#         ptr.append(num)
#     print(ptr)
#     ptr.reverse()
#     print(ptr)

# 题目74:列表排序及连接
# 程序分析:排序可使用 sort() 方法,连接可以使用 + 号或 extend() 方法。
# if __name__ == '__main__':
#     a = [1, 3, 2]
#     b = [2, 4, 5]
#     a.sort()  # 对列表a进行排序
#     print(a)
#
#     # 连接列表a与b
#     print("a+b:", a+b)
#
#     # 连接列表a与b
#     a.extend(b)
#     print("extend方法", a)

# 题目75:放松一下,算一道简单的题目。
# if __name__ == '__main__':
#     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)

# 题目76:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
# def peven(n):
#     i = 0
#     s = 0.0
#     for i in range(2, n+1, 2):  # 从2开始到n,步长为2(所有偶数)
#         s += 1.0 / i  # 累加每个偶数的倒数;Python 3.x 中的除法运算:/ 除法:总是返回浮点数
#     return s
#
#
# def podd(n):
#     s = 0.0
#     for i in range(1, n+1, 2):  # 从1开始到n,步长为2(所有奇数)
#         s += 1.0 / i  # 累加每个奇数的倒数
#     return s
#
#
# # def dcall(fp, n):  # 定义高阶函数
# #     s = fp(n)  # 调用传入的函数fp处理n
# #     return s
#
#
# if __name__ == '__main__':
#     n = int(input('请输入一个正整数: '))
#     if n % 2 == 0:  # 判断是否为偶数
#         # sum = dcall(peven, n)
#         sum = peven(n)
#     else:
#         # sum = dcall(podd, n)
#         sum = podd(n)
#     print(sum)
# 题目77:循环输出列表
# if __name__ == '__main__':
#     s = ["man", "woman", "girl", "boy", "sister"]
#     for i in range(len(s)):
#         print(s[i])

# 题目78:找到年龄最大的人,并输出。
# if __name__ == '__main__':
#     person = {"li": 18, "wang": 50, "zhang": 20, "sun": 22, "zhao": 60}
#     m = 'li'
#     for key in person.keys():
#         if person[m] < person[key]:
#             m = key
#     print('%s,%d' % (m, person[m]))

# 题目79:字符串排序。
# if __name__ == '__main__':
#     str1 = input('请输入字符串: ')
#     str2 = input('请输入字符串: ')
#     str3 = input('请输入字符串: ')
#     print("排序前:", str1, str2, str3)
#
#     # 字符串比较是基于Unicode码点值,冒泡排序算法
#     if str1 > str2:
#         str1, str2 = str2, str1
#     if str1 > str3:
#         str1, str3 = str3, str1
#     if str2 > str3:
#         str2, str3 = str3, str2
#
#     print('排序后:', str1, str2, str3)

#   *************************不懂*******************************
# 题目80:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
# 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
# 第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
# if __name__ == '__main__':
#     i = 0  # 循环计数器
#     j = 1  # 循环尝试次数计数器
#     x = 0  # 存储桃子总数
#     while i < 5:  # 外层循环条件(i<5时继续),控制整个分桃过程需要进行5次(对应5只猴子)
#         x = 4 * j  # 计算初始x值:每次尝试从4的倍数开始(因为最后要能分成5份剩1)
#         for i in range(0, 5):  # 循环0-4,模拟5只猴子依次分桃的过程
#             if x % 4 != 0:  # 检查x是否能被4整除,如果当前桃子数不能整除4,说明不符合分桃规则,跳出
#                 break  # 不能整除则跳出内层循环
#             else:
#                 i += 1  # 成功分桃,计数器增加
#             x = (x/4)*5 + 1  # 还原分桃前的数量:除以4是每只猴子拿走的1/5,乘以5是还原拿走前的数量,加1是每次分桃时被扔掉的1个
#         j += 1  # 尝试次数增加:当前尝试失败时增加j值继续尝试
#     print(x)

# 题目81:809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
# a = 809  # 常量
# for i in range(10, 100):  # 循环遍历所有两位数(10到99)
#     b = a * i  # 计算a与当前数字i的乘积
#     if b >= 1000 and b <= 10000 and 8 * i < 100 and 9 *i >= 100:  # b是四位数(1000-9999),8*i是两位数(小于100),9*i是三位数(大于等于100)
#         print(b, '= 800 * ', i, '+ 9 *', i)

# 题目82:八进制转换为十进制
# if __name__ == '__main__':
#     num = 0
#     p = input('请输入一个八进制数:')
#     for i in range(len(p)):  # 遍历输入的八进制字符串的每一位数字,循环次数等于字符串长度
#         num = num * 8 + ord(p[i]) - ord('0')  # ord(p[i])获取当前字符的ASCII码值,ord('0')获取字符串‘0’的ASCII码值,两者相减得到当前数字的实际数值
#     print(num)

# 题目83:求0—7所能组成的奇数个数。
# 程序分析:
# 组成1位数是4个。
# 组成2位数是7*4个。
# 组成3位数是7*8*4个。
# 组成4位数是7*8*8*4个。
# ......
# if __name__ == '__main__':
#     sum = 4
#     s = 4
#     for j in range(2, 9):  # 循环变量j从2到8(range(2,9)包含2但不包含9),共循环7次
#         print(sum)
#         if j <= 2:
#             s *= 7
#         else:  # 循环(j>2)时,s乘以8
#             s *= 8
#         sum += s
#     print('sum = %d' % sum)

# 题目84:连接字符串。
# delimiter = ','
# mylist = ['Brazil', 'Russia', 'India', 'China', 'USA']
# print(delimiter.join(mylist))

# 题目85:输入一个奇数,然后判断最少几个 9 除于该数的结果为整数。
# 程序分析:999999 / 13 = 76923。
# if __name__ == '__main__':
#     odd = int(input('输入一个奇数: '))  # 获取用户输入并转为整数
#     n1 = 1  # 控制循环的初始标志
#     c9 = 1  # 统计9的个数
#     m9 = 9  # 当前要加的9
#     sum = 9  # 总和初始值(第一个9)
#
#     while n1 != 0:  # 当n1为0时退出循环
#         if sum % odd == 0:  # 检查当前总和是否能被odd整除
#             n1 = 0
#         else:  # 不能整除则继续
#             m9 *= 10  # m9变为90(下一个要加的9)
#             sum += m9  # 将m9加到总和
#             c9 += 1  # 统计9的个数增加
#     print('%d 个 9 可以被 %d 整除:%d' % (c9, odd, sum))
#     r = sum / odd
#     print('%d / %d = %d' % (sum, odd, r))

# 题目86:两个字符串连接。
# if __name__ == '__main__':
#     a = "acegikm"
#     b = "bdfhjlnpq"
#
#     # 连接字符串
#     c = a + b
#     print(c)

# 题目87:结构体变量传递。
# if __name__ == '__main__':
#     class student:
#         x = 0
#         c = 0
#     def fun(stu):
#         stu.x = 20
#         stu.c = 'c'
#     a = student()
#     a.x = 3
#     a.c = 'a'
#     fun(a)
#     print(a.x, a.c)

# 题目88:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
# if __name__ == '__main__':
#     n = 1
#     while n <= 7:
#         a = int(input('输入一个1—50内的数字:'))
#         while a < 1 or a > 50:
#             a = int(input('输入一个1—50内的数字:'))
#         print(a * '*')
#         n += 1

# 题目89:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,
# 加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
# from sys import stdout
# if __name__ == '__main__':
#     a = int(input('输入四个数字:'))
#     # 提取每位数字
#     aa = []
#     aa.append(a % 10)  # 个位
#     aa.append(a % 100 // 10)  # 十位
#     aa.append(a % 1000 // 100)  # 百位
#     aa.append(a // 1000)  # 千位
#     # 加密规则
#     for i in range(4):
#         aa[i] += 5  # 每位数字都加上5
#         aa[i] %= 10  # 然后用和除以10的余数代替该数字
#     for i in range(2):
#         aa[i], aa[3-i] = aa[3-i], aa[i]  # 第一位和第四位交换,第二位和第三位交换
#     for i in range(3, -1, -1):  # 逆序遍历
#         stdout.write(str(aa[i]))  # 直接输出到控制台

# 题目90:列表使用实例。
# # 新建列表
# 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))  # 移除并返回索引1处的元素 '中国移动'  注:pop() 函数用于移除列表中的一个元素,并且返回该元素的值。
# print(len(testlist))
# print(testlist)
#
# # 创建二维矩阵
# matrix = [[1, 2, 3],
#           [4, 5, 6],
#           [7, 8, 9]]
# print(matrix)
# print(matrix[1])  # 输出第二行
#
# col2 = [row[1] for row in matrix]  # 提取第二列元素
# print(col2)
# col2even = [row[1] for row in matrix if row[1] % 2 == 0]  # 提取第二列中的偶数元素
# print(col2even)

# 题目91:时间函数举例1
# if __name__ == '__main__':
#     import time
#     # time.time() 获取当前时间戳(从1970.1.1开始的秒数)
#     print(time.ctime(time.time()))  # time.ctime() 将时间戳转换为可读字符串,格式如:"Wed Aug 20 17:37:04 2025"
#     # time.asctime() 将struct_time转换为与ctime相同的字符串格式
#     print(time.asctime(time.localtime(time.time())))  # time.localtime() 将时间戳转换为本地时间的struct_time对象
#     print(time.asctime(time.gmtime(time.time())))  # time.gmtime() 将时间戳转换为UTC时间的struct_time对象;输出格林威治标准时间

# 题目92:时间函数举例2。
# if __name__ == '__main__':
#     import time
#     # time.time()获取当前时间戳(从1970.1.1开始的秒数)并赋值给start变量
#     start = time.time()  # 记录程序开始执行的时刻
#     for i in range(3000):  # 循环打印0-2999的数字
#         print(i)
#     end = time.time()  # 获取循环结束后的时间戳
#     print(end - start)

# 题目93:时间函数举例3。
# if __name__ == '__main__':
#     import time
#     start = time.perf_counter()  # 高精度计时器perf_counter
#     for i in range(10000):
#         print(i)
#     end = time.perf_counter()
#     print('different is %6.3f' % (end - start))  # 输出格式化为6字符宽度3位小数

# 题目94:时间函数举例4,一个猜数游戏,判断一个人反应快慢。
# if __name__ == '__main__':
#     import time
#     import random
#
#     play_it = input('do you want to play it.(\'y\' or \'n\'): ')
#     while play_it == 'y':
#         i = random.randint(0, pow(2, 32)) % 100  # 生成0-99的随机数
#         print('please input number you guess: ')
#         start = time.perf_counter()  # 记录精确开始时间
#         guess = int(input('input your guess: '))
#         while guess != i:  # 循环直到猜中
#             if guess > i:
#                 print('please input a little smaller')
#             else:
#                 print('please input a little bigger')
#             guess = int(input('input your guess: '))  # 获取新猜测
#         end = time.perf_counter()  # 记录精确结束时间
#         var = end - start
#         print('it take time: ', var)
#         # 根据反应时间进行评级
#         if var < 15:
#             print('you are very clever!')
#         elif var < 25:
#             print('you are normal!')
#         else:
#             print('you are stupid')
#         print('Congradulations')
#         print('The number you guess is %d' % i)  # 打印正确的答案
#         play_it = input('do you want to play it? ')  # 询问是否继续

# 题目95:字符串日期转换为易读的日期格式。
# from dateutil import parser
# dt = parser.parse("Aug 21 2025 3:20PM")
# print(dt)

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

# 题目97:从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。
# if __name__ == '__main__':
#     from sys import stdout
#     import os.path
#     filename = input('输入文件名: ')
#     file = os.path.dirname(os.path.abspath(__file__)) + '\\' + filename
#     fp = open(file, 'w')  # 以写入模式打开指定文件
#     ch = input('输入字符串: ')
#     while ch != '#':
#         fp.write(ch)  # 将输入内容写入文件
#         stdout.write(ch)  # 将输入内容输出到控制台
#         ch = input('')  # 继续获取用户
#     fp.close()  # 关闭文件

# 题目98:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。
# if __name__ == '__main__':
#     fp = open(r'C:\Users\admin\PycharmProjects\pythonProject\learn\test.txt', 'w')
#     string = input('please input a string: ')
#     string = string.upper()
#     fp.write(string)
#     fp = open(r'C:\Users\admin\PycharmProjects\pythonProject\learn\test.txt', 'r')
#     print(fp.read())
#     fp.close()

# 题目99:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。
# if __name__ == '__main__':
#     import string
#     fp = open(r'C:\Users\admin\PycharmProjects\pythonProject\learn\test1.txt')
#     a = fp.read()
#     fp.close()
#
#     fp = open(r'C:\Users\admin\PycharmProjects\pythonProject\learn\test2.txt')
#     b = fp.read()
#     fp.close()
#
#     fp = open(r'C:\Users\admin\PycharmProjects\pythonProject\learn\test3.txt', 'w')
#     l = list(a + b)
#     l.sort()
#     s = ''
#     s = s.join(l)
#     fp.write(s)
#     fp.close()

题目100:列表转换为字典。
代码:

i = ['a', 'b']
ls = [1, 2]
print(dict([i, ls]))

pycharm运行结果:

http://www.dtcms.com/a/343034.html

相关文章:

  • HTTP 与 HTTPS:网络通信幽径上的安全秘钥
  • Promise详解:Promise解决ajax回调嵌套问题
  • system\core\init\init.cpp----LoadBootScripts()解析init.rc(2)
  • 五大主流ETL数据集成平台推荐
  • 鸿蒙 NEXT开发中轻松实现人脸识别功能
  • hadoop-3.3.6和hbase-2.4.13
  • 日志收集(ELK)
  • k8s--NetworkPolicy资源对象
  • 打工人项目日报计划
  • 搭建FTP文件共享服务器
  • linux 之 virtio 子系统核心的数据结构
  • DeepSeek R2难产:近期DeepSeek-V3.1 发布更新并开源,成功实现迈向 Agent 时代的第一步
  • 信息收集4----(收集网站指纹信息)
  • CSS 3D动画,围绕旋转动画Demo
  • 常见 Linux 网络命令梳理
  • AGV 技术落地场景解析:从制造业到仓储物流,看自动导引车的行业应用
  • 【Ruoyi解密-02.登录流程:】登录-找密码不抓瞎
  • 封装FTPSClient连接ftps服务器
  • 一个成熟的运维及售后岗位应掌握的知识体系详解
  • Linux动态库制作和使用
  • Manus AI 与多语言手写识别:技术、应用与未来
  • Nginx + Vue/React 前端 + API:防止路径混淆漏洞与跨域问题实战分享
  • [Mysql数据库] Mysql安全知识
  • Oracle ADG 切换方式详解:Switchover 与 Failover 操作指南
  • 〖领码方案〗前端 PageData 完整解决方案 第四版
  • 深度解析Structured Outputs:让AI输出严格遵循JSON Schema的结构化响应
  • 【日常学习】2025-8-21 了解些测试名词
  • 【GPT入门】第52课 openwebui安装与使用
  • Zynq中级开发七项必修课-第三课:S_AXI_GP0 主动访问 PS 地址空间
  • 通信算法之317:基于Xilinx FPGA平台的符号同步算法(接收序列与本地序列互相关-不共轭乘)