题目和代码参考:https://github.com/jackfrued/Python-100-Days
循环练习:
1、九九乘法表
#九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print('%d * %d = %-3d'%(j,i,i*j),end=" ")
print('\n')
2、判断素数
#素数
num = int(input("enter:"))
flag = True
for i in range (2, num):
if(num%i==0):
flag = False
break
if(flag):
print('Yes')
else:
print('NO')
3、两个数求最大公约数最小公倍数
#最大公约数 最小公倍数
x = int(input('x = '))
y = int(input('y = '))
if x > y:
x,y = y,x
for i in range(x,0,-1):
if x % i == 0 and y % i==0:
print("最大公约数:%d"%i)
print("最大公倍数:%d"%(x*y/i))
break
4、打印三角图案
(1)
*
**
***
****
*****
#打印图案
for i in range(6):
for j in range(1,i+1):
print('*',end="")
print()
(2)
*
**
***
****
*****
for i in range(6):
for j in range(6):
if j < 6 - i:
print(' ',end="")
else:
print('*',end="")
print()
(3)
*
***
*****
*******
*********
for i in range(6):
for _ in range(6-i):
print(' ',end="")
for j in range(2*i - 1):
print('*',end="")
print()
5、水仙花数
#水仙花数
import math
for i in range(100,900):
i_f = int(i/100)
i_s = int((i%100)/10)
i_t = int(i%10)
if i_f*i_f*i_f + i_s*i_s*i_s + i_t*i_t*i_t == i:
print (i)
6、完全数
#完全数
for i in range(9999):
sum = 0
for k in range(1,int(i/2)+1):
if i%k == 0:
sum += k
if sum == i:
print(i)
7、百钱百鸡
#百钱百鸡
count = 100
for g in range(0,int(count/5)+1):
for m in range(0, int(count/3)+1):
c = 100 - g - m
if(g*5 + m*3 + c/3 == 100):
print('g:%d m:%d c:%d'%(g,m,c))
8、craps 赌博游戏
游戏规则:玩家掷两个骰子,每个骰子点数为1-6,如果第一次点数和为7或11,则玩家胜;如果点数和为2、3或12,则玩家输庄家胜。若和为其他点数,则记录第一次的点数和,玩家继续掷骰子,直至点数和等于第一次掷出的点数和则玩家胜;若掷出的点数和为7则庄家胜。
import random
res_1 = random.randint(1,7)
res_2 = random.randint(1,7)
res = res_1 + res_2
print('res_1:%d res_2:%d'%(res_1,res_2))
if(res == 7 | res == 11):
print('winner:player')
elif(res == 2 | res == 3 | res == 12):
print('winner:banker')
else:
while True:
res_1 = random.randint(1,7)
res_2 = random.randint(1,7)
print('res_1:%d res_2:%d'%(res_1,res_2))
res_ = res_1 + res_2
if(res_ == res):
print('winner:player')
break
elif(res_ == 7):
print('winner:banker')
break
函数练习:
1、最大公约数,最小公倍数
#最大公约数
def gcd(x, y):
(x, y) = (y, x) if x > y else (x, y)
for factor in range (x, 0 ,-1):
if x % factor == 0 and y % factor == 0:
return factor
#最小公倍数
def lcm(x, y):
return x * y // gcd(x, y)
gcd(6,9)
lcm(6,9)
2、回文数
def is_palindrome(num):
temp = num
list_ = []
while temp > 0:
list_.append(temp%10)
temp = temp//10
for i in range(len(list_)):
if list_[i] != list_[len(list_)-1-i]:
return False
return True
test = int(input("enter:"))
print(is_palindrome(test))
3、回文素数
#判断素数
def is_prime(num):
for factor in range(2,num):
if num % factor == 0:
return False
return True if num != 1 else False
#判断回文素数
num = int(input("enter:"))
if is_palindrome(num) and is_prime(num):
print('Yes')
4、sleep输出
#间隔输出
import os
import time
def main():
content = '........'
n=0
while n<10:
print(content)
time.sleep(0.2)
content = content[1:] +content[0]
n = n+1
5、生成指定长度验证码
#生成验证码
import random
def generate_code(code_len = 4):
all_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
code = ''
for i in range(0,code_len):
index = random.randint(0,len(all_chars)-1)
code += all_chars[index]
return code
generate_code(4)
6、返回文件后缀名
#返回文件后缀名
def get_suffix(filename):
pos = filename.find('.')#寻找下标
if pos > 0 and pos < len(filename) - 1:#如果
return filename[pos+1:]
else:
return ''
get_suffix('some.txt')
7、返回列表第一大和第二大的数
#返回列表第一大和第二大的值
def max2(x):
m1, m2 = (x[0], x[1]) if x[0] > x[1] else (x[1], x[0])
for i in range(2, len(x)):
if x[i] > m1:
m2 = m1
m1 = x[i]
elif x[i] > m2:
m2 = x[i]
return m1,m2
list1 = [1,2,3,4,9,2,0,10]
max2(list1)
8、计算指定年月日是这一年的第几天
#计算指定年月日是这一年的第几天
#先判断闰年
def is_leap_year(year):
if year%4 == 0 and year%100 != 0 or year%400 == 0:
return True
return False
def which_day(year,month,date):
days_of_month=[[31,28,31,30,31,30,31,31,30,31,30,31],[31,29,31,30,31,30,31,31,30,31,30,31]]
total = 0
if is_leap_year(year):
for i in range(month-1):
total += days_of_month[1][i]
else:
for i in range(month-1):
total += days_of_month[0][i]
total += date
return total
which_day(1998,1,12)
which_day(2000,3,12)
9、杨辉三角形
#杨辉三角形
def main():
num = int(input("enter"))
list1=[1]
for i in range(num-1):
print(list1)
list1.append(0)
list1 = [ list1[k] + list1[k-1] for k in range(i+2)]
if __name__ == '__main__':
main()
10、双色球选号 设计一个函数可以机选生成 N 注号码. 双色球-6个红色球(1-33)和1个蓝色球(1-16) ,红色球不可重复选
import random
def display(count):
for i in range(count):
print(random_select())
def random_select():
list_red = []
list_blue = []
list_choose = []
for i in range(1,34):
list_red.append(i)
if i < 17:
list_blue.append(i)
for j in range(6):#循环6次产生6个不同号码
index = random.randint(0,len(list_red)-1)
list_choose.append(list_red[index])
del list_red[index]
list_choose.append('*')
list_choose.append(list_blue[random.randint(0,16)])
return list_choose
def main():
count = int(input("enter"))#输入产生几组号码
display(count)
if __name__ == '__main__':
main()
11、约瑟夫环问题
有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,
有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,
他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。
由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。
def main():
index, num, count = 0, 0, 30
persons = [True] * 30
while count > 15:
if persons[index]:
num = num+1
if num == 9:
persons[index] = False
count = count-1
num = 0
if index < 29:
index = index+1
else:
index = 0
for person in persons:
print('基' if person else '非',end=' ')
"""
for i in range(30):
if persons[i]:
print('基:%d'%(i+1))
else:
print('非:%d'%(i+1))
"""
if __name__ == '__main__':
main()
12、井子棋游戏
import os
def print_board(board):
print(board['TL'] + '|' + board['TM'] + '|' + board['TR'])
print('-+-+-+')
print(board['ML'] + '|' + board['MM'] + '|' + board['MR'])
print('-+-+-+')
print(board['BL'] + '|' + board['BM'] + '|' + board['BR'])
print('-+-+-+')
def main():
#dic
init_board = {
'TL':' ','TM':' ','TR':' ',
'ML':' ','MM':' ','MR':' ',
'BL':' ','BM':' ','BR':' ',
}
curr_board = init_board.copy()
turn = 'x'
counter = 0
while counter < 9:
move = input("it's %s's turn,enter location"%turn)
if curr_board[move] == ' ':#若空
curr_board[move] = turn
counter = counter + 1
if turn == 'x':
turn = 'o'
else:
turn = 'x'
os.system('clear')
print_board(curr_board)
if __name__ == '__main__':
main()