#!/usr/bin/python3
 print('Python十五')

#151、最大公约数算法
#最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。

def test1(x,y):
     if x>y:
         smaller = x
     else:
         smaller = y
     for i in range(1,smaller+1):#smaller+1是为了避免输入两个相同的数字导致程序出错
         if(x%i==0^y%i==0):
             bigger=i
             print(bigger)
     return bigger
 num1=int(input('第1个数字:'))
 num2=int(input('第2个数字:'))
 print('最大公约数:',test1(num1,num2))
 print(10**6)

#152、最小公倍数
# 两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

def test2(x,y):
     if x>y:
         bigger=x
     else:
         bigger=y
     while True:
         if (bigger%x==0 and bigger%y==0):
             a=bigger
             print(a)
             break
         bigger +=1
     return a
 num1=int(input('第1个数字:'))
 num2=int(input('第2个数字:'))
 print('最小公倍数:',test2(num1,num2))

#153、最小公倍数
def lcm(a, b):

if b > a:
         a, b = b, a     # a为最大值
     if a % b == 0:
         return a        # 判断a是否为最小公倍数
     mul = 2             # 最小公倍数为最大值的倍数
     while a*mul % b != 0:
         mul += 1
         print(a*mul)
     return a*mul
 while(True):
     a = int(input("Input 'a':"))
     b = int(input("Input 'b':"))
     print(lcm(a, b))    
     break

#154、简单计算器

def add(x, y): 
    return x + y
 def subtract(x, y): 
    return x - y
 def multiply(x, y): 
    return x * y
 def divide(x, y): 
    return x / y
 # 用户输入
 print("选择运算:")
 print("1、相加")
 print("2、相减")
 print("3、相乘")
 print("4、相除")choice = input("输入你的选择(1/2/3/4):")
 num1 = int(input("输入第一个数字: "))
 num2 = int(input("输入第二个数字: "))
 if choice == '1':
    print(num1,"+",num2,"=", add(num1,num2))
 elif choice == '2':
    print(num1,"-",num2,"=", subtract(num1,num2))
 elif choice == '3':
    print(num1,"*",num2,"=", multiply(num1,num2))
 elif choice == '4':
    print(num1,"/",num2,"=", divide(num1,num2))
 else:
    print("非法输入")

#155、生成日历

import calendar
 calendar.setfirstweekday(firstweekday=6)#设置第一天是星期天,不写这一行默认第一天是周一
 year=int(input('输入年份,生成日历:'))
 # 生成一年12个月
 for a in range(1,13):
   print('----------------------')
   print(calendar.month(year,a))

#156、递归斐波那契数列
'''
斐波那契数列(Fibonacci sequence),又称黄金分割数列、
因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、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*),如果设an为该数列的第n项(),那么这句话可以写成如下形式:A(n)=A(n-1)+A(n-2)
这个数列从第3项开始,每一项都等于前两项之和。
'''

def recur_fibo(n):
    """递归函数
    输出斐波那契数列"""
    if n <= 1:
        return n
    else:
        return(recur_fibo(n-1) + recur_fibo(n-2))
 # 获取用户输入
 nterms = int(input("您要输出几项? "))
 # 检查输入的数字是否正确
 if nterms <= 0:
    print("输入正数")
 else:
    print("斐波那契数列:")
    for i in range(nterms):
        print(recur_fibo(i))

#157、文件IO

with open('test_io.txt','wt') as io_file:
   io_file.write('read\ntest file')
 with open('test_io.txt','r') as read_testio:
   text=read_testio.read()
 print(text)

#158、字符串判断

str = "Python.com"
 print(str.isalnum()) # 判断所有字符都是数字或者字母
 print(str.isalpha()) # 判断所有字符都是字母
 print(str.isdigit()) # 判断所有字符都是数字
 print(str.islower()) # 判断所有字符都是小写
 print(str.isupper()) # 判断所有字符都是大写
 print(str.istitle()) # 判断所有单词都是首字母大写,像标题
 print(str.isspace()) # 判断所有字符都是空白字符、\t、\n、\r

#159、字符串大小写转换

str='Python.com'
 print(str.upper())          # 把所有字符中的小写字母转换成大写字母
 print(str.lower())          # 把所有字符中的大写字母转换成小写字母
 print(str.capitalize())     # 把第一个字母转化为大写字母,其余小写
 print(str.title())          # 把每个单词的第一个字母转化为大写,其余小写

#160、计算每个月天数

import calendar
 monthRange = calendar.monthrange(2016,9)
 print(monthRange)#输出的是一个元组,第一个元素是所查月份的第一天对应的是星期几(0-6),第二个元素是这个月的天数。以上实例输出的意思为 2016 年 9 月份的第一天是星期四,该月总共有 30 天。