Python 语法基础练习(一)

题目和代码参考: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()         
        
    

猜你喜欢

转载自blog.csdn.net/mxxxkuku/article/details/95977889