python 基础100例摘选
参照:https://blog.csdn.net/songlh1234/article/details/91391981
部分有作者自己的修改
供参考
"""
题目001:
有四个数字1,2,3,4可以组成多少个互不相同的无重复的三位数
"""
def test001():
arr = []
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
temp = i*100+j*10+k
if i != j and i != k and j != k:
arr.append(temp)
print(arr, len(arr))
"""
题目002:企业发放的奖金根据利润(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,求应发放奖金总数?
"""
# 直接使用if-elif-else
def test002():
profits = int(input('请输入利润:'))
if profits <= 100000:
bonus = profits*0.1
elif 100000 < profits <= 200000:
bonus = 100000*0.1 + (profits-100000)*0.075
elif 200000 < profits <= 400000:
bonus = 100000 * 0.175 + (profits-200000)*0.05
elif 400000 < profits <= 600000:
bonus = 100000 * 0.225 + (profits-400000)*0.03
elif 600000 < profits <= 1000000:
bonus = 100000 * 0.255 + (profits-600000)*0.015
else:
bonus = 100000 * 0.27 + (profits-1000000)*0.01
print('the bonus is {}'.format(bonus))
# 使用数轴的方法
def test002_1():
profits = int(input('请输入利润:'))
# 奖金分界表
arr = [1000000, 600000, 400000, 200000, 100000, 0]
# 对应的提成率
rate = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
bonus = 0
for i in range(len(arr)):
if profits > arr[i]:
bonus += (profits-arr[i])*rate[i]
profits = arr[i]
print(bonus)
"""
题目003:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
"""
# 根据题目逻辑直接来
import math
def test003():
for a in range(1000):
if math.sqrt(a+100) % 1 == 0 and math.sqrt(a+168+100) % 1 == 0:
print(a)
"""
题目004:输入某年某月某日,判断这一天是这一年的第几天?
"""
# 使用time模块中的strptime()和struct_time()的属性tm_yday,利用strptime将输入的日期转化为struct_time的时间格式,再利用属性tm_yday得到一年中哪一天
from time import strptime
def test004():
year, month, day = input('请输入年份:'), input('请输入月份:'), input('请输入日:')
time_str = year + '-' + month + '-' + day
yday = strptime(time_str, '%Y-%m-%d').tm_yday
print(f'{year}年{month}月{day}日是{year}年中的第{yday}天')
"""
题目005:输入三个整数x,y,z,请把这三个数由小到大输出。
"""
# 方法一:冒泡
def test005_1():
x, y, z = int(input('请输入第一个数:')), int(input('请输入第二个数:')), int(input('请输入第三个数:'))
lsit = [x, y, z]
for j in range(len(lsit)-1):
for i in range(1, len(lsit)):
if lsit[i-1] > lsit[i]:
temp = lsit[i]
lsit[i] = lsit[i-1]
lsit[i-1] = temp
for a in lsit:
print(a)
# print(l)
# 方法二:使用sorted
def test005_2():
x, y, z = int(input('请输入第一个数:')), int(input('请输入第二个数:')), int(input('请输入第三个数:'))
l1 = [x, y, z]
print('=='*5, 'sorted()', '=='*5)
for a in sorted(l1):
print(a)
return
"""
题目006:斐波那契数列。
"""
# 不使用递归
def fob1(n):
a, b = 0, 1
i = n
while i >= 0:
a, b = b, a + b
print(a)
i -= 1
def test006():
fob1(10)
# 使用递归
def fob(n):
if n == 1 or n == 2:
return 1
else:
return fob(n-1)+fob(n-2)
def test006_2():
for a in range(1, 11):
print(fob(a))
return
"""
题目007:将一个列表的数据复制到另一个列表中。
说明:这里的复制指的是复制后两个列表的内存地址不一样的,不是直接像a=b这样
"""
# 使用copy模块中的deepcopy(),也可以使用列表的copy()方法
import copy
def test007():
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = copy.deepcopy(a)
print(id(a), '\n', id(b))
"""
题目008:题目:输出 9*9 乘法口诀表。
"""
# 双重for循环
def test008():
for i in range(1, 10):
for j in range(i, 10):
string = f'{i}×{j}={i*j}'
print('%-7s' % string, end=' ')
print(end='\n')
"""
题目010:暂停一秒输出,并格式化当前时间。
"""
# 使用time模块的sleep(),strftime(),localtime()
import time
def test010():
a = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
print(a)
print('休眠5秒')
time.sleep(5)
b = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
print(b)
"""
题目011:古典问题:
有一对兔子,
从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子。
假如兔子都不死。
问每个月的兔子总数为多少?
"""
def test011():
m1 = 1
m2 = 0
mm = 0
for i in range(1, 13):
mm = mm+m2
m2 = m1
m1 = mm
print(i, '-->', m1+m2+mm)
"""
题目012:判断101-200之间有多少个素数,并输出所有素数
"""
# 素数的程序逻辑:素数不能被2到它本身开方之间的数整除。
from math import sqrt
def test012():
print('101---200之间的素数为:')
for num in range(101, 201):
for i in range(2, int(sqrt(num)+1)):
if num % i == 0:
break
else:
print(num)
"""
题目013:打印出所有的"水仙花数",
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
"""
# 此题与四叶草数是相同的思路,四叶草数指的是一个四位数。
def test013():
for num in range(100, 1000):
# 百位上的数
h = num//100
# 十位上的数
t = (num-100*h)//10
# 个位上的数
o = num % 10
if h**3+t**3+o**3 == num:
print(f'由于{h}³+{t}³+{o}³={num},故{num}是一个水仙花数。')
"""
题目014:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
"""
def test014():
import math
num = int(input('输入一个整数:'))
arr = []
while num > 1:
for i in range(2, int(math.sqrt(num)+1)):
if num % i == 0:
arr.append(i)
num = num // i
break
else:
arr.append(num)
break
print(arr)
"""
题目015:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
"""
def test015():
score = int(input('请输入成绩:'))
if 100 >= score >= 90:
print(f'{score}的评价为:A')
elif 60 <= score <= 89:
print(f"{score}的评价为:B")
elif 0 <= score < 60:
print(f'{score}的评价为:C')
else:
print('不好意思,你输入的成绩有误,请重新输入!!')
return test015()
"""
题目016:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
思路:使用字符串的isalpha()--》判断是否为中英文,isspace()-->判断是否为空格,isdigit()-->判断是否为数字,等方法。
"""
def test016():
string = input('请输入一串字符串:')
letters, space, digit, others = 0, 0, 0, 0
for i in string:
if i.isalpha():
letters += 1
elif i.isspace():
space += 1
elif i.isdigit():
digit += 1
else:
others += 1
print(f"char = {letters};space = {space};digit = {digit};others = {others}")
"""
题目017:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
"""
# 为了提高大数的运算效率这里使用numpy.sum运算
def test017():
import numpy as np
a = input('请输入a的值:')
add_times = int(input('请输入相加的次数:'))
num_arr = []
for i in range(1, add_times+1):
num_arr.append(int(a*i))
num_sum = np.sum([num_arr])
num_string = '+'.join([str(i) for i in num_arr])
# print(f'等式为:{num_string}')
# print(f'总和为:{num_sum}')
print(f'结果为:{num_string} = {num_sum}')
"""
题目018:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
"""
def test018():
"""
思路:先求出所有的约数(因数),再判断其和是否相等。
:return:
"""
for num in range(1, 1000):
arr = []
for i in range(1, num):
if num % i == 0:
arr.append(i)
if sum(arr) == num:
print(num)
"""
题目019:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
"""
def test019():
high = 100
n = 1
total = 0
while n <= 10:
total += high
high /= 2
total += high # 第10次落地时,会多算一次反弹的高度,故在得出总里程时需减掉high
n += 1
print(f'第10次落地时,经过了{total-high}米,反弹了{high}米。')
"""
题目021:猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
"""
def test020():
day = 10
num = 1
while day > 0:
day -= 1
num = (num+1)*2
print(num)
"""
题目021:两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
"""
def test021():
"""
思路:根据题意可知,a,b,c从[x,y,z]中找人比赛,同不能同时选择同一个人比赛,再者根据题目的要求即可求出唯一的打法
:return:
"""
team_a = ['x', 'y', 'z']
for a in team_a:
for b in team_a:
for c in team_a:
if a != b and a != c and c != b:
if a != 'x' and c != 'x' and c != 'z':
print(f'a与{a}比赛;b与{b}比赛;c与{c}比赛。')
"""
题目022:
打印出如下图案(菱形):
*
***
*****
*******
*****
***
*
"""
def test022():
"""
思路:使用绝对值运算,将[0,1,2,3,4,5,6]变为[3,2,1,0,1,2,3]
:return:
"""
num = 7
for i in range(num):
blank = abs(num//2-i)
print(' '*blank+'*'*(num-2*blank)+' '*blank)
"""
题目023:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
"""
def test023():
"""
简单粗暴,直接根据题意进行
:return:
"""
a, b, sum_ab = 2, 1, 0
for i in range(20):
sum_ab += a/b
a = a + b
b = a - b
print(f'前20 项和为{sum_ab}')
"""
题目024:求1+2!+3!+...+20!的和。
"""
def test024():
"""
思路:1、使用for循环实现
:return:
"""
print('---'*8+'方法一'+'---'*8)
sum_1, product = 0, 1
for num in range(1, 21):
product *= num
sum_1 += product
print(f'和为{sum_1}')
"""
题目025:利用递归求解5!
"""
def func025(n):
if n <= 1:
return n
else:
return n*func025(n-1)
def test025():
print(func025(5))
"""
题目026:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
"""
def output(s, l1):
if l1 == 0:
return
print(s[l1-1])
output(s, l1-1)
def test026():
s = input('the string is :')
l1 = len(s)
output(s, l1)
"""
题目027:有5个人坐在一起,
问第五个人多少岁?他说比第4个人大两岁。
问第4个人,他说比第3个人大两岁。
问第3个人,又说比第2个人大两岁。
问第2个人,说比第1个人大两岁。
最后问第一个人,他说是10岁。
请问第五个人多大?
"""
# def test027():
# """
# 普通方法
# :return:
# """
# m1 = 10
# m2 = m1 + 2
# m3 = m2 + 2
# m4 = m3 + 2
# m5 = m4 + 2
# print(f'第五个人年龄为:{m5}')
def age(n):
if n == 1:
return 10
else:
return age(n-1) + 2
def test027():
"""
使用递归
:return:
"""
print(f'第五个人年龄为:{age(5)}')
"""
题目028:给一个不多于5位的正整数,要求:
一、求它是几位数,
二、逆序打印出各位数字。
"""
def is_nums(nums):
"""
除了以下的方法判断位数,还可以直接使用len()函数求出长度,但需先将int类型转为str类型
:param nums:
:return:
"""
l1 = [10000, 1000, 100, 10, 1]
# l2 = [5, 4, 3, 2, 1]
l2 = ['五', '四', '三', '两', '一']
for n, num in enumerate(l1):
if 1 <= nums//num <= 9:
print(f'{nums}是{l2[n]}位数')
def reverse_nums(nums):
nums = nums[::-1]
# nums = str(nums)[::-1]
print('逆序打印正整数:')
for s in nums:
print(s)
def test028():
nums = input('请输入一个不大于五位的正整数:')
is_nums(int(nums))
reverse_nums(nums)
"""
题目029:一个5位数,判断它是不是回文数。
回文数:正反读是一样的正整数
即12321是回文数,个位与万位相同,十位与千位相同。
"""
def test029():
nums = input('请输入需要判断的五位数:')
if len(nums) == 5:
nums_reverse = nums[::-1]
if nums == nums_reverse:
print(f'{nums}是回文数')
else:
print(f'{nums}不是回文数')
else:
print('你输入的数字不是五位数,请重新输入!!')
test029()
"""
题目030:请输入星期几的第一个字母来判断一下是星期几,
如果第一个字母一样,则继续判断第二个字母。
"""
def test030():
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
inp = ''
while 1:
arr = []
inp = inp + input('请输入一个字母:')
for day in week: # 挑出满足输入的星期
if inp == day[:len(inp)]:
arr.append(day)
if len(arr) == 1: # 只剩一个,说明唯一,可以输出结果
print('以%s开头的单词是:%s' % (inp, arr[0]))
inp = ''
elif len(arr) == 0: # 一个都没有说明输错了,需要重新输入
print('没有%s开头的单词' % inp)
inp = ''
"""
题目031:按相反的顺序输出列表的值。
"""
def list_reverse(l):
"""
一共有两种方法:
1、切片
2、使用列表的reverse()方法
:param l:
:return:
"""
# 切片
print('--'*8, '方法一', '--'*8)
l_r = l[::-1]
print(l_r)
# for v in l_r:
# print(v)
# reverse()方法
print('--' * 8, '方法二', '--' * 8)
l.reverse()
print(l)
def test031():
l1 = [1, 52, 55, 77, 12, 122]
list_reverse(l1)
"""
题目032:按逗号分隔列表
"""
def test032():
"""
join函数的使用
:return:
"""
lt = ['55', '88', '66', '44', '11']
s = ','.join(lt)
print(f'the result is :{s}')
"""
题目033:求100之内的素数。
"""
def test033():
import math
for nums in range(2, 101):
for n in range(2, int(math.sqrt(nums)+1)):
if nums % n == 0:
break
else:
print(nums)
"""
题目034:对10个数进行排序
"""
def nums_sort01(list_sort):
"""
使用python内置函数
:param list_sort:
:return:
"""
print(f'排序前:\n{list_sort},\n排序后为:\n{sorted(list_sort)}')
def nums_sort02(list_sort):
"""
使用算法进行排序,这里使用了冒泡算法
:param list_sort:
:return:
"""
print(f'排序前:\n{list_sort}')
for i in range(len(list_sort)-1):
for j in range(len(list_sort)-i-1):
if list_sort[j] > list_sort[j+1]:
list_sort[j], list_sort[j+1] = list_sort[j+1], list_sort[j]
print(f'排序后:\n{list_sort}')
def test034():
list1 = [55, 51, 54, 1, 21, 22, 99, 0, 25, 78]
nums_sort01(list1)
# nums_sort02(list1)
"""
题目035:求一个3*3矩阵主对角线元素之和
"""
def test035():
"""
思路:利用列表的索引进行运算,需注意是否为奇数矩阵,奇数矩阵会重复中间的元素,要剔除。
:return:
"""
array = [[2, 4, 6], [1, 3, 5], [7, 8, 9]]
sum_a = 0
n = len(array)
# 从左上到右下对角线
for i in range(n):
sum_a += array[i][i]
# 从左下到右上对角线
for i in range(n):
sum_a += array[i][n-i-1]
# 由于奇数矩阵中间元素为重复元素,需剔除
if n % 2 == 1:
sum_a -= array[n//2][n//2]
print(f'主对角线元素之和为{sum_a}')
"""
题目036:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
"""
def test036():
"""
题意为插入排序算法的思想
:return:
"""
list_sorted = [1, 11, 22, 33, 44, 55, 66, 77, 88, 99]
print(f'已排好序的数组为{list_sorted}')
nums = int(input('请输入需要插入的数字:'))
for i in range(len(list_sorted)):
if list_sorted[i] > nums:
list_sorted.insert(i, nums)
break
# else:
# list_sorted.insert(i, nums)
# break
else:
list_sorted.append(nums)
print(f'{nums}已插入数组中:\n{list_sorted}')
"""
题目037:两个3*3的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
X = [[12, 7, 3],
[4, 5, 6],
[7, 8, 9]]
Y = [[5, 8, 1],
[6, 7, 3],
[4, 5, 9]]
"""
def test037():
"""
实现n*n矩阵的相加算法,思路:
使用for循环即可;
其实可以使用numpy库直接进行矩阵的所有运算
:return:
"""
x = [[12, 7, 3],
[4, 5, 6],
[7, 8, 9]]
y = [[5, 8, 1],
[6, 7, 3],
[4, 5, 9]]
sum_arr = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
for i in range(len(x)):
for j in range(len(y)):
sum_arr[i][j] = x[i][j] + y[i][j]
print(f'{x}和{y}矩阵的和为{sum_arr}')
def test037_01():
"""
使用第三方库numpy进行矩阵的运算
:return:
"""
# 需先下载numpyku--》pip install numpy
import numpy as np
x = np.array([[12, 7, 3], [4, 5, 6], [7, 8, 9]])
y = np.array([[5, 8, 1], [6, 7, 3], [4, 5, 9]])
sum_arr = x + y
print(f'矩阵\n{x.__str__()}\n和\n{y.__str__()}\n的和为\n{sum_arr.__str__()}') # 这里使用__str__()直接输出矩阵,不然会带有array()符号
"""
题目038:统计 1 到 100 之和。
"""
def test038():
"""
思路:很简单,直接遍历相加
:return:
"""
sum_nums = 0
for i in range(1, 101):
sum_nums += i
print(f'1到100 的和为{sum_nums}')
# 以上可以简化为一行代码
print('--'*8)
print(f'1到100的和为{sum(i for i in range(1,101))}')
"""
题目039:求输入数字的平方,如果平方运算后小于 50 则退出。
"""
def test039():
"""
思路:考察 break 的使用
:return:
"""
while True:
nums = float(input('请输入数字:'))
nums_square = nums ** 2
print(f'{nums}的平方为{nums_square}')
if nums_square < 50:
print(f'由于{nums}的平方小于50,故程序退出')
break
"""
题目040:两个变量的互换
"""
def test040():
"""
思路:经典问题,其他语言需要设置临时中间变量,python可以更简单
:return:
"""
nums01, nums02 = float(input('请输入第一个数字:')), float(input('请输入第二个数字:'))
print('--------临时中间变量--------')
temp = nums01
nums01 = nums02
nums02 = temp
print(f'变量互换后:\n nums01-->{nums01},\n nums02-->{nums02}')
print('---------python特有方法----------')
nums03, nums04 = float(input('请输入第一个数字:')), float(input('请输入第二个数字:'))
nums03, nums04 = nums04, nums03
print(f'互换后的结果:\n nums03-->{nums03},\n nums04-->{nums04}')
"""
题目041:数字比较:输入两个数字,输出两个数字的大小比较情况
"""
def test041():
nums01, nums02 = float(input('请输入第一个数字:')), float(input('请输入第二个数字:'))
if nums01 > nums02:
print(f'{nums01}大于{nums02}')
elif nums01 < nums02:
print(f'{nums01}小于{nums02}')
elif nums01 == nums02:
print(f'{nums01}等于{nums02}')
"""
题目042:使用lambda来创建匿名函数。
"""
def test042():
"""
练习lambda函数的用法;lambda函数会与高级内置函数filter()和map()一起使用
lambda语法:
lambda 变量 : 函数需要进行的操作
实例:输入一个数组,输出其元素平方的数组
:return:
"""
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = list(map(lambda x: x**2, list1)) # map(func, iterable)函数:将func函数作用于可迭代对象iterator
print(f'the result is :{list2}')
"""
题目043:输出一个随机数
"""
def test043():
"""
对于标准库random库的使用,所有用法如下
:return:
"""
import random
# 随机数操作
random.random() # 0.85415370477785668 # 随机一个[0,1)之间的浮点数
random.uniform(0, 100) # 18.7356606526 # 随机一个[0,100]之间的浮点数
random.randrange(0, 100, 2) # 44 # 随机一个[0,100)之间的偶数
random.randint(0, 100) # 22 # 随机一个[0,100]之间的整数
# 随机字符操作
seed = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+=-" # 任意字符串(作为随机字符种子库)
random.choice(seed) # 'd' # 随机一个字符
random.sample(seed, 3) # ['a', 'd', 'b'] # 随机多个字符(字符可重复)
''.join(random.sample(seed, 3)) # '^f^' # 随机指定长度字符串(字符可重复)
# 随机列表操作
random.shuffle(list) # 列表中的元素打乱
"""
题目044:取一个整数a从右端开始的4-7位。
"""
def test044():
"""
思路:将整数先转化为字符串,利用字符串的切片用法,最后在转回整数
:return:
"""
# nums = input('请输入一个大于10位的整数:')
nums = 123456789135792468
nums_str = str(nums)
print(f'{nums}从右端开始的4--7位是:{nums_str[-7:-3]}')
"""
题目045:计算字符串长度。
"""
def test045():
"""
思路:使用python内置函数len()
:return:
"""
string = input('请输入一个字符串:')
print(f'字符串{string}的长度为{len(string)}')
"""
题目046:打印出杨辉三角形(前10行):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
"""
def test046():
"""
不太会,参照会答案
:return:
"""
arr = [1]
print(1)
while len(arr) < 10:
a = [0] + arr
b = arr + [0]
arr = [a[i]+b[i]for i in range(len(a))]
s = [str(i) for i in arr]
print(' '.join(s))
"""
题目047:查找字符串。
"""
def test047():
string = input('请输入一串字符串:')
s = input('请输入需要查找的一个字母或字符串:')
if string.find(s) >= 0:
print(f'你所查找的字符在{string.find(s)+1}位开始')
else:
print('你输入的查找条件有误!!')
"""
题目048:输入3个数a,b,c,按大小顺序输出。
"""
def test048():
arr = []
for i in range(3):
a = input('请输入数字:')
arr.append(int(a))
arr.sort(reverse=True) # reverse=True -->降序
print(f'排序后的结果为:{arr}')
"""
题目049:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
"""
def test049():
arr = eval(input('请输入一个数组:'))
max_index = arr.index(max(arr))
min_index = arr.index(min(arr))
arr[0], arr[max_index] = arr[max_index], arr[0]
arr[-1], arr[min_index] = arr[min_index], arr[-1]
print(f'改变后的数组为:{arr}')
"""
题目050:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
"""
def test050():
"""
使用列表的切片即可简单完成
:return:
"""
arr = eval(input('请输入一个数组:'))
m = int(input('请输入需要移动的位数:'))
new_arr = arr[-m:] + arr[:-m]
print(f'变化后的结果:{new_arr}')
"""
题目051:
有n个人围成一圈,顺序排号。
从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
"""
def test051():
"""
思路:参照别人的排队进门的思路
:return:
"""
n = int(input('请输入参加的人数:'))
# 先进行排序
arr = list(range(1, n+1))
count, a, b = 0, arr, [] # 计数器count,门外队伍a,门内队伍b
# 开始排队进门
while len(a+b) > 1:
num, count = a.pop(0), count + 1
if count % 3 != 0: # 报数为3 的淘汰
b.append(num) # 没被淘汰的按顺序排好队伍b
if len(a) == 0: # 当门外队伍a没人时,则将门内队伍b变为门外队伍a,重新开始排队
a, b = b, []
print(f'最后留下的人的序号是{a[0]}')
"""
题目052:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
"""
def test052():
"""
函数的定义及调用
:return:
"""
def get_str_length(s):
return len(s)
if __name__ == '__main__':
s = 'asdasdas'
print(get_str_length(s))
"""
题目053:编写input()和output()函数输入,输出5个学生的数据记录。
"""
def test053():
"""
依旧是函数的定义和调用
:return:
"""
# import sys
# 定义input()函数
def inp(data):
name = input('请输入学生的姓名:')
score = float(input('请输入该学生的成绩:'))
data[name] = score
print('录入成功!!')
return data
# 定义output()函数
def outp(data):
name = input('请输入需要查询的学生姓名:')
print(f'学生{name}的成绩为{data[name]}')
if __name__ == '__main__':
data = dict()
while True:
a = input('请确认是输入数据(i);查询数据(o),退出程序(e):')
if a.upper() == 'I':
inp(data)
elif a.upper() == 'O':
outp(data)
elif a.upper() == 'E':
return False
else:
print('输入错误!!请重新输入!!')
"""
题目054:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
"""
def func(n):
if n % 2 == 0:
list1 = [1/i for i in range(1, n+1) if i % 2 == 0]
return list1, sum(list1)
else:
list2 = [1/i for i in range(1, n+1) if i % 2 != 0]
return list2, sum(list2)
def test054():
n = int(input('请输入n的值:'))
arr, sum_arr = func(n)
print(f'{arr}的和为{sum_arr}')
"""
题目055:
找到年龄最大的人,并输出。
person = {"Joe":18,"Mike":50,"Hajo":22,"Shanel":23}
"""
def test055():
"""
考察字典类型值(value)的比较,解法利用一下lambda匿名函数,先对字典按value 排序,在输出最大值
:return:
"""
person = {'Joe': 18, 'Mike': 50, 'Hajo': 22, 'Shanel': 22}
sorted_person = sorted(person.items(), key=lambda x: x[1], reverse=True)
print(f'年龄最大的是{sorted_person[0][0]};年龄为{sorted_person[0][1]}岁。')
"""
题目056:
海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子平均分为五份,多了一个,
这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一个,
它同样把多的一个扔入海中,拿走了一份,
第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子
"""
def test056():
"""
暂时pass
:return:
"""
pass
"""
题目057:
809*??=800*??+9*?? 其中??代表的两位数,
809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。
求??代表的两位数,及809*??后的结果。
"""
def test057():
"""
没啥可讲的,按题意直接算
:return:
"""
for num in range(10, 100):
if 1000 <= 809 * num <= 9999 and 10 <= 8 * num <= 99 and 100 <= 9 * num <= 999:
print(f'??为{num};809 * ?? 为809 * {num}={809*num}')
"""
题目058:进制之间的相互转换
"""
def test058():
"""
直接上知识点,各个进制的转换函数
:return:
"""
nums = int(input('请输入需要转换的十进制数值:'))
print(f'十进制转二进制:{bin(nums)}')
print(f'十进制转八进制:{oct(nums)}')
print(f'十进制转16进制:{hex(nums)}')
print('-----其他-----')
print(f'八进制转十进制:{int(str(nums),8)}') # int(x,base=10) x:str类型的数值,base:进制,默认为10即十进制
print(f'二进制转十进制:{int(str(nums),2)}')
print(f'16进制转十进制:{int(str(nums),16)}')
"""
题目059:求0—7所能组成的奇数个数。
"""
def test059():
"""
需要用到排列组合库:itertools,先pass
:return:
"""
pass
"""
题目060:计算字符串中子串出现的次数
"""
def test060():
string = input('请输入字符串:')
str_s = input('请输入需要统计的子串:')
if str_s in string:
print(f'{str_s}在{string}中出现了{string.count(str_s)}次!')
else:
print(f'你输入的子串{str_s}不在{string}中')
"""
题目061:从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。
"""
def test061():
"""
文件的读取,两种方式:
1、使用open()函数,需要在使用完后使用.close()关闭内存
2、使用with open.. as ..;(推荐)
:return:
"""
while True:
a = input('请输入内容:')
if a != '#':
with open('test061.txt', 'a+', encoding='utf-8') as f:
f.write(a+'\n')
else:
break
"""
题目062:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。
"""
def test062():
"""
使用字符串的upper()方法即可将小写转换为大写
:return:
"""
string = input('请输入字符串:')
with open('test062.txt', 'a+', encoding='utf-8') as f:
f.write(string.upper()+'\n')
print('写入成功!!')
"""
题目063:
有两个磁盘文件A和B,各存放一行字母,
要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。
"""
def test063():
"""
必须在该程序的目录下有test063_A.txt和test063_B.txt两个文件,内容自定
:return:
"""
with open('test063_A.txt', 'r+', encoding='utf-8')as f:
a = f.read()
print(f'test063_A中的内容为{a}')
with open('test063_B.txt', 'r+', encoding='utf-8')as f:
b = f.read()
print(f'test063_B中的内容为{b}')
with open('test063_C.txt', 'w+') as f:
f.write(a+b)
print('内容写入test063_C.txt 成功!!')
"""
题目064:列表转换为字典。
"""
def test064():
"""
如果是单个列表变为字典,使用enumerate获取列表的下标index和值value,在转换为字典即可;
如果是两个列表组合成一个字典,则使用zip()函数,将两个列表转换为对应的元组,再转换为字典。
:return:
"""
print('-----------单个列表转换为字典-----------')
l1 = ['Hajo', 'Shanel', 'Komry', 'John']
d1 = dict()
for i, v in enumerate(l1):
d1[i] = v
print(f'转换结果为:{d1}')
print('----------两个字典组合转换为字典----------')
score_l = [99, 100, 98, 95]
d2 = dict()
for i, v in zip(l1, score_l):
d2[i] = v
print(f'转换结果为{d2}')
if __name__ == '__main__':
def program_test():
index = input("请输入需要运行的程序序号;例如:test001,输入001:")
program_name = 'test'+index+'()'
try:
return eval(program_name)
except NameError:
print('程序序号输入有误;请重新输入!!!')
return program_test()
program_test()