1.寻找水仙花数
水仙花数:是一个3位数,每一位上数字的立方和正好等于它本身,如:13+53+33 = 153,则153就是一个水仙花数,也称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数。
用除法和取模运算分别取出个位十位百位数字,low、mid、high,再进行if判断。
for num in range(100, 1000):
low = num % 10
mid = num // 10 % 10
high = num // 100
if num == low ** 3 + mid * 3 + high ** 3:
print(num)
用上述方法将输入的正整数反转,如将12345变成54321。
先取出个位数5,然后乘以10加上取出的4,循环如此。
num = int(input('num = '))
reversed_num = 0
while num > 0:
reversed_num = reversed_num * 10 + num % 10
num //= 10
print(reversed_num)
2.百钱买百鸡
公鸡5元一只,母鸡3元一只,小鸡1元一只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
把公鸡、母鸡、小鸡的数量用x、y、z来表示。
如果都用来买公鸡,x最大可取20,range(0,20)从0开始。
同理y最大可取33,z用总数和减x、y。
for x in range(0,20):
for y in range(0,33):
z = 100-x-y
if 5*x+3*y+z/3==100:
print('公鸡:%d只,母鸡:%d只,小鸡:%d只' % (x,y,z))
两层for循环一项一项穷举,也称为暴力搜索法,很慢,但是一定可以找出答案。
3.CRAPS赌博游戏
第一次掷骰子,点数和为7或11,则玩家胜;点数和为2、3或12,玩家输。
点数和为其他则继续掷。
第二次掷骰子,点数和与第一次掷相同,则玩家胜;点数和为7,则玩家输。
点数和为其他则继续掷。往后的输赢条件与第二次相同。
from random import randint
money = 1000
while money > 0:
print('你的总资产为:', money)
loopFlag = False
while True:
debt = int(input('请下注:'))
if 0 < 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:
loopFlag = True
while loopFlag:
loopFlag = False
current = randint(1, 6) + randint(1, 6)
print('玩家摇出了%d点' % current)
if current == 7:
print('庄家胜')
money -= debt
elif current == first:
print('玩家胜')
money += debt
else:
loopFlag = True
print('你破产了,游戏结束!')
4.生成斐波那契数列的前20个数
斐波那契数列:前两个数都是1,从第三个数开始,每个数都是它前面两个数的和,如:1,1,2,3,5,8,13,21……;又称为黄金分割数列、兔子数列。
a = 0
b = 1
for _ in range(20):
a, b = b, a + b
print(a, end=',')
下划线_表示一个循环变量,类似于其他语言for循环中的i,j。
a,b = b,a+b
可以写为(a,b) = (b,a+b)
,先计算右边括号的,再赋值给左边的a和b。end = ','表示用逗号代替换行结尾。
5.找出10000以内的完美数
完美数:所有的真因子的和恰好等于它本身,如6 = 1+2+3;28 = 1+2+4+7。
又称为完全数或完备数,真因子(除了自身以外的因子)。
math.sqrt()函数表示开平方根,如math.sqrt(9) = 3。
为什么因子只取到开平方?
比如6开平方根之后得到2.4,因子有如下,每对因子,必定一个大于2.4,一个小于2.4,如果12.4中没有因子,那么2.46中也没有因子,因此只需判断1~根号(x)中是否有因子。
1×6
2×3
3×2
6×1
import math
for num in range(1, 10000):
result = 0
for factor in range(1, int(math.sqrt(num)) + 1):
if num % factor == 0: #是否是因子
result += factor
if factor > 1 and num // factor != factor: #因子是否大于1且不等于它本身
result += num // factor
if result == num:
print(num)
6.输出100以内所有的素数
素数:只能被1和它自身整除的正整数,不包括1(因此从2开始)。
如:2,3,5,7,11,13,17,19
import math
for num in range(2, 100):
is_prime = True
for factor in range(2, int(math.sqrt(num)) + 1):
if num % factor == 0:
is_prime = False
break
if is_prime:
print(num, end=',')
标签:10,Python,百钱,斐波,range,num,factor,print,100
From: https://www.cnblogs.com/zhishu/p/16913841.html