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

插入排序

插入排序
# 定义列表
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

冒泡排序

冒泡排序
# 定义列表
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)

百鸡百钱

百鸡百钱
题干:公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}只小鸡")

最小公倍数

最小公倍数
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 : 目标

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岁。”请写出,较小妹妹的年龄?

实现思路:
	1、两个妹妹不是双胞胎,年纪肯定不一样
	2、年龄积是年龄和的六倍
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}岁了")

求好字符串?

题干需求:
 长度为三且各字符不同的子字符串
 如果一个字符串不含有任何重复字符,我们称这个字符串为好字符串。
 给你-一个字符串s, 请你返回s中长度为3的好子字符串的数量。
 注意,如果相同的好子字符串出现多次,每一次都应该被记入答案之中。
 子字符串是一个字符串中连续的字符序列。
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

需求:
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。
比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 
输入:1 输出:[1,2,3,4,5,6,7,8,9] 
n = int(input('请输入n:'))
for i in range(1,10 ** n):
 print(i)

穷举算法

案例要求:1、2、3、4能组成多少个互不相同且无重复数字的三位数,
各是多少?并统计个数
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}个")

斐波那契数列

def fun2(n):
 """斐波那契数列 求第n项的值"""
 if n == 1 or n == 2:
 return 1
 else:
 return fun2(n-1) + fun2(n-2)
fun2(7)

用户登录

需求实现:
	使用input分别输入用户名和密码,验证登录过程
 (1)从终端输入用户名,保存到username中。
 (2)从终端输入密码,保存到password中。
 (3)【核心功能】判断username等于“admin”且password等于“123”的判断结果,如果结果为真,则输出“用户名和密码正确,登陆成功”。
 (4)【核心功能】判断username不等于“admin”、password不等于“123”中至少有一个为假的结果,如果结果为真,则输出用户名或密码有误,登陆失败“。
 (5)【核心功能】正确使用while循环,登录不成功支持循环登录,最多不超过3次;如果超过3次,则提示“登陆失败,请稍候重试”。
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("登录失败,请稍后重试。")

九九乘法表

使用 while 和 for 分别实现“九九乘法表”。
# 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之间的奇偶数

需求:
	输出‘1-10’之间的奇数。
for i in range(1,11):
 if i % 2 != 0 : # 判断
 print(i)

元宝胖多少?

小岭家有只布偶猫名叫元宝,吃的特别多,
假设今天元宝胖了0.1斤,
以后每天胖的重量都是前一天的2倍,
y = 2 * x
明天 = 2 * 今天
问10天后元宝胖了多少斤?
startNum = 0.1
for i in range(9):
 startNum *= 2
print(startNum)

维纳的年龄

美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
一次,他参加某个重要的会议,年轻的脸孔引人注目。有人询问他的年龄,他回答说:“
	我的年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了0-9这10个数字,每个都恰好出现一次。
”
请你推算一下,他当时到底有多年轻。
# 前置条件:年轻、年龄立方是个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}")

大衍数列

中国古代文献中,曾记载过“大衍数列”,主要用于解释中国传统文化中的太极衍生原理。
它的前几项是0、2、4、8、12、18、24、32、40、50…其规律是对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。
for i in range(1,101):
 if i%2==0:
 # 偶数
 print(int((i**2)/2))
 else:
 print(int((i**2-1)/2))
作者:苦瓜大王-001原文地址:https://www.cnblogs.com/StudyZw/p/18847306

%s 个评论

要回复文章请先登录注册