Python-100-Days学习记录 第五天

Python-100-Days学习记录

原项目地址:https://github.com/jackfrued/Python-100-Days

Day5

练习

  1. 寻找“水仙花数”

水仙花数(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
  1. 寻找“完美数”

各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的和等于它本身的自然数叫做完全数(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 = " ")
  1. ”百钱百鸡“问题

我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

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、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. craps赌博游戏

规则:玩家掷两个骰子,每个骰子点数为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('你破产了, 游戏结束!')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值