x =int(input('x = '))
y =int(input('y = '))if x > y:
x, y = y, x
for factor inrange(x,0,-1):# 上面的for循环注意是从大到小递减,而不是range(0,x,1)if x % factor ==0and y % factor ==0:print('%d和%d的最大公约数是%d'%(x, y, factor))print('%d和%d的最小公倍数是%d'%(x, y, x * y // factor))break
x = 16
y = 8
8和16的最大公约数是8
8和16的最小公倍数是16
打印三角形
row =int(input('请输入行数: '))for i inrange(row):for _ inrange(i +1):print('*', end='')print()for i inrange(row):for j inrange(row):if j < row - i -1:print(' ', end='')else:print('*', end='')print()for i inrange(row):for _ inrange(row - i -1):print(' ', end='')for _ inrange(2* i +1):print('*', end='')print()
deffactorial(num):"""
求阶乘
:param num: 非负整数
:return: num的阶乘
"""
result =1for n inrange(1, num +1):
result *= n
return result
m =int(input('m = '))
n =int(input('n = '))# 当需要计算阶乘的时候不用再写循环求阶乘而是直接调用已经定义好的函数print(factorial(m)// factorial(n)// factorial(m - n))
m = 4
n = 8
0
factorial(5)
120
最大公约数和最小公倍数
defgcd(x, y):(x, y)=(y, x)if x > y else(x, y)for factor inrange(x,0,-1):if x % factor ==0and y % factor ==0:return factor
deflcm(x, y):return x * y // gcd(x, y)
gcd(10,15)
5
lcm(10,15)
30
判断一个数字回文数
defis_palindrome(num):
temp = num
total =0while temp >0:
total = total *10+ temp %10
temp //=10return total == num
is_palindrome(10101)
True
deffun(num):
s =str(num)[::-1]returnint(s)== num
fun(123321)
True
判断一个数是不是素数
defis_prime(num):for factor inrange(2, num):if num % factor ==0:returnFalsereturnTrueif num !=1elseFalse
作用域
deffoo():
b ='hello'defbar():# Python中可以在函数内部再定义函数
c =Trueprint(a)print(b)print(c)
bar()# print(c) # NameError: name 'c' is not definedif __name__ =='__main__':
a =100# print(b) # NameError: name 'b' is not defined
foo()
100
hello
True
deffoo():
a =200print(a)# 200if __name__ =='__main__':
a =100
foo()print(a)# a的值依然是100
200
100
deffoo():global a
a =200print(a)# 200if __name__ =='__main__':
a =100
foo()print(a)# a的值会改变
import sys
defmain():
f =[x for x inrange(1,10)]print(f)
f =[x + y for x in'ABCDE'for y in'1234567']print(f)# 用列表的生成表达式语法创建列表容器# 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
f =[x **2for x inrange(1,1000)]print(sys.getsizeof(f))# 查看对象占用内存的字节数print(type(f))# 请注意下面的代码创建的不是一个列表而是一个生成器对象# 通过生成器可以获取到数据但它不占用额外的空间存储数据# 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
f =(x **2for x inrange(1,1000))print(sys.getsizeof(f))# 相比生成式生成器不占用存储数据的空间print(type(f))if __name__ =='__main__':
main()
deffib(n):
a, b =0,1for _ inrange(n):
a, b = b, a + b
yield a
defmain():print(type(fib(20)))for val in fib(20):print(val, end=" ")if __name__ =='__main__':
main()
defmain():
num =int(input('Number of rows: '))
yh =[[]]* num
for row inrange(len(yh)):
yh[row]=[None]*(row +1)for col inrange(len(yh[row])):if col ==0or col == row:
yh[row][col]=1else:
yh[row][col]= yh[row -1][col]+ yh[row -1][col -1]print(yh[row][col], end='\t')print()if __name__ =='__main__':
main()
Number of rows: 5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
双色球
from random import randrange, randint, sample
defdisplay(balls):"""
输出列表中的双色球号码
"""for index, ball inenumerate(balls):if index ==len(balls)-1:print('|', end=' ')print('%02d'% ball, end=' ')print()defrandom_select():"""
随机选择一组号码
"""
red_balls =[x for x inrange(1,34)]
selected_balls =[]
selected_balls = sample(red_balls,6)
selected_balls.sort()
selected_balls.append(randint(1,16))return selected_balls
defmain():
n =int(input('机选几注: '))for _ inrange(n):
display(random_select())if __name__ =='__main__':
main()
"""
《幸运的基督徒》
有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,
有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,他后面的人接着从1开始报数,
报到9的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,15个基督徒都幸免于难,
问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。
"""defmain():
persons =[True]*30
counter, index, number =0,0,0while counter <15:if persons[index]:
number +=1if number ==9:
persons[index]=False
counter +=1
number =0
index +=1
index %=30for person in persons:print('基'if person else'非', end='')if __name__ =='__main__':
main()
classTest:def__init__(self, foo):
self.__foo = foo
def__bar(self):print(self.__foo)print('__bar')defmain():
test = Test('hello')# AttributeError: 'Test' object has no attribute '__bar'
test.__bar()# AttributeError: 'Test' object has no attribute '__foo'print(test.__foo)if __name__ =="__main__":
main()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-6-145a58377ceb> in <module>
18
19 if __name__ == "__main__":
---> 20 main()
<ipython-input-6-145a58377ceb> in main()
12 test = Test('hello')
13 # AttributeError: 'Test' object has no attribute '__bar'
---> 14 test.__bar()
15 # AttributeError: 'Test' object has no attribute '__foo'
16 print(test.__foo)
AttributeError: 'Test' object has no attribute '__bar'
但是,Python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来“妨碍”对它们的访问,事实上如果你知道更换名字的规则仍然可以访问到它们,下面的代码就可以验证这一点。之所以这样设定,可以用这样一句名言加以解释,就是“We are all consenting adults here”。因为绝大多数程序员都认为开放比封闭要好,而且程序员要自己为自己的行为负责。