Python基础训练题分享

笔记哥 / 04-25 / 27点赞 / 0评论 / 614阅读
# 水仙花数 ```python 水仙花数 info = 3 while info: # 用户输入数字 try: print(f"请输入数字,您有{info}次机会!!") num = int(input("请输入100-999的数字:")) if num<100 or num>999: info -= 1 print(f"请输入合法数字!!!您还有{info}次机会!!") continue b = num //100 # 取百位 s = num //10%10 # 取十位 g = num % 10 # 取个位 if b**3+s**3+g**3 == num: print(f"{num}:这个数是水仙花数") break else: print(f"{num}:这个数不是水仙花数") info -= 1 except: print(f"请输入数字!!!您还有{info}次机会!!") info -= 1 ``` # 插入排序 ```python 插入排序 # 定义列表 nums = [87,38,77,2,33,98,73,22,12] for i in range(len(nums)): # 判断 <右边的元素> 是否小于 <左边元素> # 如果 小于,则将两个元素交换位置,就变成“小在左,大在右了” while nums[i] < nums[i-1] and i>=1: nums[i],nums[i-1] = nums[i-1],nums[i] i -= 1 ``` # 冒泡排序 ```python 冒泡排序 # 定义列表 nums = [87,99,17,2,33,68,73,22,12] # 遍历的次数是列表长度 减一 # 相当于要冒泡几轮 for i in range(len(nums)-1): # 每轮冒泡的次数, # -i 是因为 :上轮将大的数已经排在后面,所以后面的就不再参与 for j in range(len(nums)-1-i): if nums[j] > nums[j+1] : # 比较左边 ‘nums[j]’ 和右边 'nums[j+1]' 的元素 换位 nums[j],nums[j+1] = nums[j+1],nums[j] print(nums) ``` # 百鸡百钱 ```python 百鸡百钱 题干:公5,母3,小1/3 公鸡x 母鸡y 小鸡z 加起来要 100 只 5x+3y+z/3=100 --------------------------------------- count = 0 for x in range(1,20): # 因为公鸡数量不会超过20 for y in range(1,33): # 母鸡数量不超过33 # 小鸡的数量 z = 100 - x - y if z != 0 and 5*x+3*y+z/3 == 100: count += 1 # 每次方法记录加一 print(f"第{count}种方法:{x}只公鸡,{y}只母鸡,{z}只小鸡") ``` # 最小公倍数 ```python 最小公倍数 num1 = int(input("请输入数字1:")) num2 = int(input("请输入数字2:")) if num1 < num2 : num1,num2 = num2,num1 else: num1,num2 = num1,num2 for i in range(num1,num1*num2+1): if i%num1==0 and i%num2==0: print(f"{i}是{num1}和{num2}的最小公倍数") ``` # 二分查找 `首要条件:被查询的序列,必须是有序的。` target : 目标 ```python target = n left = 0 # 左下标/索引 right = len(lis)-1 # 右下标/索引 while left <= right: # 找到列表中间索引 mid = (left+right)//2 if lis[mid] > target: # 如果中间值大于目标值,说明目标值在中间值左边 # 所以需要修改右下标。 right = mid-1 elif lis[mid] < target: # 如果中间值小于目标值,说明目标值在中间值右边 # 所以需要修改左下标。 left = mid + 1 else: print(f"该数字的下标为{mid}") break else:print("该目标不在序列中……") ``` # 猜年龄-妹妹几岁了 `小明带两个妹妹参加元宵灯会。别人问她们多大了,他们调皮地说:“我们两个的年龄之积是年龄之和的六倍。”小明又补充说:“他们可不是双胞胎,年龄差也不超过8岁。”请写出,较小妹妹的年龄?` ```csharp 实现思路:1、两个妹妹不是双胞胎,年纪肯定不一样2、年龄积是年龄和的六倍 ``` ```python for i in range(1,100): # 假设姐姐的年龄 for j in range(1,i): # 假设妹妹的年龄 if i*j==6*(i+j) and i-j<8: # 姐妹年龄的条件 print(f"姐姐{i}岁了,妹妹{j}岁了") ``` # 求好字符串? ```csharp 题干需求: 长度为三且各字符不同的子字符串 如果一个字符串不含有任何重复字符,我们称这个字符串为好字符串。 给你-一个字符串s, 请你返回s中长度为3的好子字符串的数量。 注意,如果相同的好子字符串出现多次,每一次都应该被记入答案之中。 子字符串是一个字符串中连续的字符序列。 ``` ```python str_i = input("请输入3位以上的字符:") counts = 0 for i in range(len(str_i)-2): # 以防下方索引时超出范围 if str_i[i] != str_i[i+1] and str_i[i] != str_i[i+2] and str_i[i+1] != str_i[i+2]: counts += 1 print(f"好字符有:{str_i[i]}{str_i[i+1]}{str_i[i+2]}") print(f"一共有{counts}个好字符") ``` # 阶乘为n ```csharp 需求: 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。 比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 输入:1 输出:[1,2,3,4,5,6,7,8,9] ``` ```python n = int(input('请输入n:')) for i in range(1,10 ** n): print(i) ``` # 穷举算法 ```csharp 案例要求:1、2、3、4能组成多少个互不相同且无重复数字的三位数, 各是多少?并统计个数 ``` ```python counts = 0 for g in range(1,5): for s in range(1,5): for b in range(1, 5): if g != s and g != b and s != b: counts += 1 print(100 * b + 10 * s + g) print(f"一共{counts}个") ``` # 斐波那契数列 ```python def fun2(n): """斐波那契数列 求第n项的值""" if n == 1 or n == 2: return 1 else: return fun2(n-1) + fun2(n-2) fun2(7) ``` # 用户登录 ```csharp 需求实现:使用input分别输入用户名和密码,验证登录过程 (1)从终端输入用户名,保存到username中。 (2)从终端输入密码,保存到password中。 (3)【核心功能】判断username等于“admin”且password等于“123”的判断结果,如果结果为真,则输出“用户名和密码正确,登陆成功”。 (4)【核心功能】判断username不等于“admin”、password不等于“123”中至少有一个为假的结果,如果结果为真,则输出用户名或密码有误,登陆失败“。 (5)【核心功能】正确使用while循环,登录不成功支持循环登录,最多不超过3次;如果超过3次,则提示“登陆失败,请稍候重试”。 ``` ```python counts = 3 # 计数 while counts: username = input("请输入用户名:") # 用户 password = input("请输入密码:") # 密码 if username == "admin" and password == "123": # 判断 print("用户名、密码输入正确,登陆成功!") break else: counts -= 1 # 计数减一 print("用户名或密码有误,登陆失败。") print(f"您还有{counts}次机会") else: print("登录失败,请稍后重试。") ``` # 九九乘法表 ```csharp 使用 while 和 for 分别实现“九九乘法表”。 ``` ```python # while i = 1 while i <= 9: j = 1 while j<=i: print(f"{j}*{i}={j*i}",end="\t") j += 1 print() i += 1 # for for i in range(1, 10): # 行 for j in range(1, i + 1): # 列 print(f"{i}*{j}={i * j}", end='\t') print() ``` # 1-10之间的奇偶数 ```csharp 需求:输出‘1-10’之间的奇数。 ``` ```python for i in range(1,11): if i % 2 != 0 : # 判断 print(i) ``` # 元宝胖多少? ```csharp 小岭家有只布偶猫名叫元宝,吃的特别多, 假设今天元宝胖了0.1斤, 以后每天胖的重量都是前一天的2倍, y = 2 * x 明天 = 2 * 今天 问10天后元宝胖了多少斤? ``` ```python startNum = 0.1 for i in range(9): startNum *= 2 print(startNum) ``` # 维纳的年龄 ```csharp 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要的会议,年轻的脸孔引人注目。有人询问他的年龄,他回答说:“我的年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了0-9这10个数字,每个都恰好出现一次。 ” 请你推算一下,他当时到底有多年轻。 ``` ```python # 前置条件:年轻、年龄立方是个4位数、年龄4次方是个6位数 for i in range(11,30): num1 = str(i**3) num2 = str(i**4) if len(num1)==4 and len(num2)==6: if len(set(num1+num2)) == 10: print(f"他的年龄是{i}。\n数字是{num1+num2}") ``` # 大衍数列 ```csharp 中国古代文献中,曾记载过“大衍数列”,主要用于解释中国传统文化中的太极衍生原理。 它的前几项是0、2、4、8、12、18、24、32、40、50…其规律是对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。 ``` ```python for i in range(1,101): if i%2==0: # 偶数 print(int((i**2)/2)) else: print(int((i**2-1)/2)) ```