例题巩固:for-in+while
"""
Author: xahoo
“//” 表示整数除法,返回整数 比如 7/3 结果为2
"/" 表示浮点数除法,返回浮点数 (即小数) 比如 8/2 结果为4.0
"%" 表示取余数 比如7/4 结果为3
"""
"""
01 找出所有水仙花数
说明:
水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,
该数字每个位上数字的立方之和正好等于它本身,例如:1^3 + 5^3+ 3^3=153。
"""
for i in range(100, 1000):
low = i % 10 # % 求模运算,相当于mod,也就是计算除法的余数,比如5%2就得到1 153%10 = 3
mid = i // 10 % 10 # 先整除,再求模、153//10 = 15 15%10 = 5
high = i // 100 # 153//100 = 1
if i == low ** 3 + mid ** 3 + high ** 3:
print(i)
"""
02 将一个正整数反转,例如:将12345变成54321,代码如下所示。
"""
num = int(input('num = '))
reversed_num = 0
while num > 0:
print(reversed_num * 10)
print(num % 10)
reversed_num = reversed_num * 10 + num % 10
num //= 10
print(reversed_num)
"""
个人分析见解
reversed_num = 0
num = 123
reversed_num = reversed_num * 10 + num % 10 = 0+3=3
num = num // = 123//10 = 12
reversed_num =3
num = 12
reversed_num = reversed_num * 10 + num % 10 = 30+2=32
num = num // = 12//10 = 1
reversed_num = 32
num = 1
reversed_num = reversed_num * 10 + num % 10 = 320+1=321
num = num // = 1//10 = 0
"""
"""
03 公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
公鸡num1,最多可买100/5=20只
母鸡num2,最多可买100/3=33.33只
小鸡num3,=100-num1-num2
5*num1+3*num2+num2/3 = 100元
"""
for num1 in range(0, 20):
for num2 in range(0, 33):
num3 = 100-num1-num2
if num1*5+num2*3+num3/3 == 100:
print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (num1, num2, num3))
"""
04 Craps赌博游戏
我们设定玩家开始游戏时有1000元的赌注
游戏结束的条件是玩家输光所有的赌注
简单的规则是:
玩家第一次摇骰子如果摇出了7点或11点,玩家胜;
玩家第一次如果摇出2点、3点或12点,庄家胜;
其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;
如果玩家摇出了第一次摇的点数,玩家胜;其他点数,玩家继续要骰子,直到分出胜负。
"""
money = 1000
while money > 0:
print('你的总资产为:', money)
needs_go_on = False
while True:
debt = int(input('请下注:'))
if 0 < debt <= money:
break
else:
print('请重新下注')
first = randint(1, 6) + randint(1, 6)
print('玩家摇出了%d点' % first)
if first ==7 or first == 11:
print('玩家胜')
money += debt
elif first == 2 or first == 3 or first == 12:
print('庄家胜')
money -= debt
else:
needs_go_on = True
while needs_go_on:
needs_go_on = False
current = randint(1, 6) + randint(1, 6)
print('玩家接着摇出了%d点' % current)
if current == 7:
print('庄家胜')
money -= debt
elif current == first:
print('玩家胜')
money += debt
else:
needs_go_on = True
print('你破产了, 游戏结束!', money)
"""
05 斐波那契数列的特点是数列的前两个数都是1,从第三个数开始,每个数都是它前面两个数的和,
形如:0,1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...。
斐波那契数列在现代物理、准晶体结构、化学等领域都有直接的应用。
"""
n = int(input('请输入要求的第几位数'))
first, second = 0, 1
index = 0 # 计步,对比n
while index < n:
first, second = second, first + second
index += 1
print(first)
# 要求: 输出斐波那契数列的 前20个数
first = 0
second = 1
for num in range(0, 20):
first, second = second, first + second
print(first, end=' ')
"""
06 找出1-9999之间的所有完美数
完美数是除了自身外 其他因子的和正好等于这个数
例如:
6 = 1+2+3
28 = 1+2+4+7+14
"""
for num in range(1, 10000):
sum = 0
for i in range(1, num):
if num % i == 0 and num != i:
sum += i
if sum == num:
print(num)