02分支结构与循环结构/构造程序的逻辑
分支结构与循环结构/构造程序的逻辑
一、分支结构
使用if产生分支
-
英寸与厘米的转换
#1英寸=2.54厘米 #输入长度+单位 inch/cm while True: lenth=float(input('请输入长度:')) unit=input('单位') #判断是英寸还是厘米,输出结果 if unit=='inch': print('%.2f inch= %.2f cm'%(lenth,2.54*lenth)) elif unit=='cm': print('%.2f cm= %.2f inch'%(lenth,lenth/2.54)) else: print('输入有错误请重输!')
-
百分制转化为等级
""" 百分制成绩转换为等级制成绩 """ score = float(input('请输入成绩: ')) if score >= 90: grade = 'A' elif score >= 80: grade = 'B' elif score >= 70: grade = 'C' elif score >= 60: grade = 'D' else: grade = 'E' print('对应的等级是:', grade)
-
输入三条边,如果能构成三角形的话计算周长和面积
from math import sqrt #输入三条边长,如果能构成三角形就计算周长和面积 a=int(input('the first side')) b=int(input('the second side')) c=int(input('the third side')) #判断是否是三角形 #计算周长面积p=(a+b+c)/2)S=sqrt[p(p-a)(p-b)(p-c)] if a+b>c and a+c>b and b+c>a: p = (a + b + c) / 2 print('三角形周长是%.2f,面积是%.2f'% (a+b+c,sqrt(p*(p-a)*(p-b)*(p-c))))
二、循环结构
for……in:知道次数时使用的循环,一般搭配range
while:不知道循环次数时使用
range的用法解析:特点是包头不包尾
```
range(101):指的是0-100
range(1,101):指的是1-100
range(1,101,2):1-100的奇数
range(100,0,-2):100-1的偶数
```
-
输入一个正整数判断是不是素数
from math import sqrt def sushu(num): for i in range(2,int(sqrt(num))+1): if num%i==0 : return False return True if num!=1 else False num=int(input('输入一个数字:')) print(sushu(num))
-
输入两个正整数,计算它们的最大公约数和最小公倍数
#实现最大公约和最小公倍数的函数 def max_gongyue(x,y): for i in range(x,0,-1): if x%i==0 and y%i==0: return i def min_gongbei(x,y): i=max_gongyue(x,y) return (x*y)/i def main(): x=int(input('请输入正整数1:')) y=int(input('请输入正整数2:')) print('最大公约数是%d,最小公倍数是%d'%(max_gongyue(x,y),min_gongbei(x,y))) if __name__ == '__main__': main()
-
打印如下所示的三角形图案
''' * ** *** **** ***** ''' ''' * ** *** **** ***** ''' ''' * *** ***** ******* ********* ''' def xingxing1(): #输入要几行 row=int(input('请输入要打印几行星星')) #行数循环 for i in range(1,row+1): # 列循环 for j in range (i): print('*',end='') print() def xingxing2(): # 输入要几行 row = int(input('请输入要打印几行星星')) for i in range(1,row+1): for j in range(row-i): print(' ',end='') for k in range(i): print('*',end='') print() def xingxing3(): row = int(input('请输入要打印几行星星')) for i in range(1, row + 1): for j in range(row-i): print(' ',end='') for k in range(2*i-1): print('*',end='') for l in range(row-i): print(' ',end='') print() if __name__ == '__main__': # xingxing1() # xingxing2() # xingxing3() pass
三、构造程序的逻辑
#寻找水仙花数、实现正整数的反转
'''
说明:水仙花数也被称为超完全数字不变数、
自恋数、自幂数、阿姆斯特朗数,它是一个
3位数,该数字每个位上数字的立方之和正
好等于它本身,例如:$1^3 + 5^3+ 3^3=153$。
'''
def shuixianhua():
num_list=[]
for num in range (100,1000):
#分离个位
gewei=num%10
#分离十位
shiwei=(num//10)%10
#分离百位
baiwei=num//100
if num == gewei**3+shiwei**3+baiwei**3:
num_list.append(num)
print('水仙花数有:')
for num in num_list:
print(num,end=' ')
def fanzhuan(num):
'''
实现正整数的翻转
:param num:
:return:
'''
#总数=0
sum = 0
while num!=0:
#总数*10+末位
sum=sum*10+num%10
#地板除出新的数字
num=num//10
return sum
if __name__ == '__main__':
# shuixianhua()
print(fanzhuan(10394954636))
#百钱百鸡问题
'''
说明:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,
问公鸡、母鸡、小鸡各有多少只?
'''
def main():
for x in range(0,(100//5)+1):
for y in range(0,(100//3)+1):
for z in range(0,100*3+1,3):
if x+y+z==100 and 5*x+3*y+z/3==100:
print('公鸡%d只,母鸡%d只,小鸡%d只'%(x,y,z))
main()
#CRAPS赌徒游戏
'''
说明:CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简单的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数,玩家继续要骰子,直到分出胜负。
'''
#玩家第一次摇骰子如果摇出了7点或11点,玩家胜
#玩家第一次如果摇出2点、3点或12点,庄家胜
#其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜
import random
class Player():
def __init__(self,name):
self._name=name
@property
def name(self):
return self._name
def play_dice(self):
dice1=random.randint(1,6)
dice2=random.randint(1,6)
sum_number=dice1+dice2
return sum_number
class Touzi():
def first_round(self,dice_number,end=False,player_win=False):
if dice_number == 7 or dice_number == 11:
print('玩家胜!')
end=True
player_win=True
elif dice_number == 2 or dice_number == 3 or dice_number == 12:
print('庄家胜!')
end=True
else:
end=False
return end,player_win
def other_round(self,dice_number,dice_number_first,end,player_win=False):
if dice_number==7:
print('庄家胜!')
end=True
elif dice_number==dice_number_first:
print('玩家胜!')
end=True
player_win=True
return end,player_win
def main(name):
play_continue=True
player = Player(name)
touzi = Touzi()
round = 1
player_win_count=0
while play_continue and round<100:
step=1
print('这是第%d局游戏'%round)
#第一次摇色子
dice_number_first=player.play_dice()
print('%s第%d局第%d次点数是%d'%(player.name,round,step,dice_number_first))
#第一轮的胜负
end,player_win=touzi.first_round(dice_number_first)
while end==False:
step+=1
dice_number=player.play_dice()
print('%s第%d局第%d次点数是%d' % (player.name, round, step, dice_number))
end,player_win=touzi.other_round(dice_number,dice_number_first,end)
if player_win:
player_win_count+=1
#不算胜率单纯玩
# play_next=input('是否还要继续游戏,Y/N:')
#算胜率
play_next='y'
if play_next=='y':
round+=1
else:
print('游戏结束!')
play_continue=False
#算胜率
print('%s胜率为%.2f'%(player.name,player_win_count/round))
if __name__ == '__main__':
main('小明')
#生成斐波那契数列的前20个数
#生成斐波那契数列前num个数
def feb(num):
feb_list=[1,1]
for i in range(2,num):
number=feb_list[i-1]+feb_list[i-2]
feb_list.append(number)
return feb_list
if __name__ == '__main__':
for _ in feb(20):
print(_,end=' ')
#找出10000以内的完美数
'''
说明:完美数又称为完全数或完备数,它的所有的真因子(即除了自身以外的因子)的和(即因子函数)恰好等于它本身。例如:6($6=1+2+3$)和28($28=1+2+4+7+14$)就是完美数。完美数有很多神奇的特性,有兴趣的可以自行了解。
'''
#找出完美数
def fector(num):
fector=[]
for i in range(1,num):
if num%i==0:
fector.append(i)
return fector
def perfect_num(num):
sum=0
for i in fector(num):
sum+=i
if sum==num:
return True
def main(num):
'''
:param num:多少以内的完美数
:return:
'''
for i in range(1,num+1):
if perfect_num(i):
print(i,end=' ')
main(10000)
#输出100以内所有的素数
def sushu(num):
'''
判断是不是素数
:param num: 数字
:return: 是否是素数
'''
if num==2:
return True
else:
for i in range(2,num):
if num%i==0:
return False
else:
return True
def sushu_range(num):
'''
:param num: 范围
:return: 素数
'''
for i in range(2,num+1):
if sushu(i):
print(i,end=' ')
if __name__ == '__main__':
sushu_range(100)