水仙花数
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岁。"请写出,较小妹妹的年龄?
实现思路:
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}岁了")
求好字符串?
题干需求:
长度为三且各字符不同的子字符串
如果一个字符串不含有任何重复字符,我们称这个字符串为好字符串。
给你-一个字符串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
需求:
输入数字 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)
穷举算法
案例要求: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)
用户登录
需求实现:
使用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("登录失败,请稍后重试。")
九九乘法表
使用 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之间的奇偶数
需求:
输出'1-10'之间的奇数。
python
for i in range(1,11):
if i % 2 != 0 : # 判断
print(i)
元宝胖多少?
小岭家有只布偶猫名叫元宝,吃的特别多,
假设今天元宝胖了0.1斤,
以后每天胖的重量都是前一天的2倍,
y = 2 * x
明天 = 2 * 今天
问10天后元宝胖了多少斤?
python
startNum = 0.1
for i in range(9):
startNum *= 2
print(startNum)
维纳的年龄
美国数学家维纳(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}")
大衍数列
中国古代文献中,曾记载过"大衍数列",主要用于解释中国传统文化中的太极衍生原理。
它的前几项是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))