原项目地址:https://github.com/jackfrued/Python-100-Days
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
for i in range(100, 1000):
x = i // 100
y = (i - 100 * x) // 10
z = i - 100 * x - 10 * y
if(x * x * x + y * y * y + z * z * z == i):
print(i)
运行结果:
PS E:\Nproject> python day5-1.py
153
370
371
407
修改一次:
for i in range(100, 1000):
x = i // 100
y = (i - 100 * x) // 10
# z = i - 100 * x - 10 * y
z = i % 10 # %直接取余
# if(x * x * x + y * y * y + z * z * z == i):
if i == x ** 3 + y ** 3 + z ** 3: # **运算符进行指数运算
# print(i)
print(i, end = ' ')
运行结果:
PS E:\Nproject> python day5-1.py
153 370 371 407
各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的和等于它本身的自然数叫做完全数(Perfect number),又称完美数或完备数。
end = int(input('请输入需要计算的范围上限:'))
for i in range(2, end):
s = 0
for j in range(1, i):
if i % j == 0:
s += j
if s == i:
print(i, end = " ")
运行结果:
PS E:\Nproject> python day2-1.py
请输入需要计算的范围上限:10000
6 28 496 8128
修改一次:
end = int(input('请输入需要计算的范围上限:'))
# for i in range(2, end):
for i in range(1, end): # range(1, 1)会返回空列表,即不执行
# s = 0
s = [] # 使用列表完成
for j in range(1, i):
if i % j == 0:
# s += j
s.append(j)
# if s == i:
if sum(s) == i: # sum() 求和
print(i, end = " ")
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
for x in range(101):
for y in range(101 - x):
z = 100 - x - y
if z % 3 == 0 and z / 3 + 5 * x + 3 * y == 100:
print('公鸡%d只,母鸡%d只,小鸡%d只' % (x, y, z))
运行结果:
PS E:\Nproject> python day2-1.py
公鸡0只,母鸡25只,小鸡75只
公鸡4只,母鸡18只,小鸡78只
公鸡8只,母鸡11只,小鸡81只
公鸡12只,母鸡4只,小鸡84只
修改一次:
# for x in range(101):
for x in range(20): # 简化计算
# for y in range(101 - x):
for y in range(33):
z = 100 - x - y
if z % 3 == 0 and z / 3 + 5 * x + 3 * y == 100:
print('公鸡%d只,母鸡%d只,小鸡%d只' % (x, y, z))
斐波那契数列,又称黄金分割数列、因列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
def fib(i):
if i <= 0:
print('error')
return 0
elif i == 1 or i == 2:
return 1
else:
return fib(i - 1) + fib(i - 2)
for n in range(1, 20):
print(fib(n), end = ', ')
print(fib(20))
运行结果:
PS E:\Nproject> python day5-4.py
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765
修改一次:
a = 0
b = 1
for i in range(20):
a, b = b, a + b
print(a, end = ' ')
不使用函数速度提高很多。
规则:玩家掷两个骰子,每个骰子点数为1-6,如果第一次点数和为7或11,则玩家胜;如果点数和为2、3或12,则玩家输庄家胜。若和为其他点数,则记录第一次的点数和,玩家继续掷骰子,直至点数和等于第一次掷出的点数和则玩家胜;若掷出的点数和为7则庄家胜。
from random import randint
x = randint(1, 6)
y = randint(1, 6)
_sum = x + y
if _sum == 7 or _sum == 11:
print('%d, 玩家胜出' % _sum)
elif _sum == 2 or _sum == 3 or _sum == 12:
print('%d, 庄家胜出' % _sum)
else:
while(1):
x = randint(1, 6)
y = randint(1, 6)
_sum2 = x + y
if _sum2 == _sum:
print('%d, 玩家胜出' % _sum2)
break
elif _sum2 == 7:
print('%d, 庄家胜出' % _sum2)
break
运行结果:
PS E:\Nproject> python day2-1.py
7, 玩家胜出
PS E:\Nproject> python day2-1.py
7, 庄家胜出
PS E:\Nproject> python day2-1.py
3, 庄家胜出
PS E:\Nproject> python day2-1.py
7, 庄家胜出
PS E:\Nproject> python day2-1.py
6, 玩家胜出
PS E:\Nproject> python day2-1.py
7, 庄家胜出
PS E:\Nproject> python day2-1.py
7, 庄家胜出
PS E:\Nproject> python day2-1.py
7, 庄家胜出
PS E:\Nproject> python day2-1.py
6, 玩家胜出
PS E:\Nproject> python day2-1.py
11, 玩家胜出
修改一次:
from random import randint
money = 1000
while money > 0:
print('你的总资产为:', money)
needs_go_on = False
while True:
debt = int(input('请下注:'))
if debt > 0 and debt <= money:
break
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:
current = randint(1, 6) + randint(1, 6)
print('玩家摇出了%d点' % current)
if current == 7:
print('庄家胜出')
money -= debt
needs_go_on = False
elif current == first:
print('玩家胜出')
money += debt
needs_go_on = False
print('你破产了, 游戏结束!')