Python 练习

greyli/PythonExercises: 按照难度排列的经典 Python 练习题。 (github.com)

1. 猜数字
经典的猜数字游戏,几乎所有人学编程时都会做。

功能描述: 随机选择一个三位以内的数字作为答案。用户输入一个数字,程序会提示大了或是小了,直到用户猜中。
Code :

import random

answer=random.randint(1,999)
a=int(input("Guess a number ? (1-999) :"))
running = True

while running:
    if a==answer:
        print("congratulation your Bingo!")
        break
    elif a>answer:
        print("answer is bigger")
        a=int(input("try again:"))
    elif a<answer:
        print("answer is smaller")
        a=int(input("try again:"))
2. FizzBuzz
另一道经典编程题。

功能描述: 遍历并打印0到100,如果数字能被3整除,显示Fizz;如果数字能被5整除,显示Buzz;如果能同时被3和5整除,就显示FizzBuzz。结果应该类似:0,1,2,Fizz,4,Buzz,6……14,FizzBuzz,16……

Code:
test=[0 for x in range(101) ]



for i in range(101):
    test[i]=i
    if i%3==0 and i%5==0and i!=0:
        test[i]="FizzBuzz"
    elif i%3==0 and i!=0:
        test[i]="Fizz"
    elif i%5==0 and i!=0:
        test[i]="Buzz"
for i in range(101):
    print(test[i])
3. 猜数字的AI
和猜数字一样,不过这次是设计一个能猜数字的AI

功能描述: 用户输入一个单位以内的数字,AI要用最少的次数猜中,并且显示出猜的次数和数字。

Code:
# AI guess number

# 第一版用随机数猜哈哈哈哈哈,猜一个数几千次哈哈哈 , 留着提供一个思路
import random 

#  打印标题
print("-"*20+"Ai Guess Number Game"+"-"*20)  

# a接收用户输入的数字, 因为之后a要运算所以使用int()转为数值型 
a=int(input("please input between 1-999 random only one number :"))  

# 已知用户输入的为1-999, 这应该算二分法吧
guess=500  # 1/2 中间数
middle=250  # 1/4 四分之一数
step=0  # 记录次数,初始值为0

# 死循环,直到执行到break
while True:

    # 看用户输入是否大于中间数
    if a>guess:
        # 输入的数大于中间数500,加上中间数的中间数,也就是之前定义的middle,从这开始二分的上部分
        guess+=middle
        print ("AI Guess is : ",guess) # 题目要求输出过程
    # 看用户输入是否小于中间数
    elif a<guess:
        # 输入的数小于中间数500,减去中间数的中间数,也就是之前定义的middle,从这开始二分的下部分
        guess-=middle
        print ("AI Guess is : ",guess) # 题目要求输出过程

    # 二分法结束后 四分之一数在除二为下一次循环做准备
    # 如果middle=1 or 0都不执行/2
    if middle!=1 or middle !=0 :
        # 加int()把小数改为整数
        middle=int(middle/2)

    # 如果middle=0了也就死循环了, 所以要检测一下
    if middle == 0:
        middle=1

    # 执行了一次猜测
    step+=1

    # 每次猜的数来对比下,对了就停循环
    if guess==a:
        print("Congratrulation your are Bingo!!! you use %d step to guess"%(step))
        break

# 我生平最讨厌两件事: 别人代码不写注释 和 代码写注释

# 例子输入 785 middle 的 9 次循环
# 125 62 31 15 7 3 1 1 1
#AI Guess is :  750
#AI Guess is :  875
#AI Guess is :  813
#AI Guess is :  782
#AI Guess is :  797
#AI Guess is :  790
#AI Guess is :  787
#AI Guess is :  786
#AI Guess is :  785
4. 整点报时
老式挂钟会在整点的报时,响铃的次数和时间相等。我们设计一个在电脑上运行的报时器。

功能描述: 运行后,在每一个整点长响一声,半个整点短响两声。实现睡眠模式,晚上十二点到早上六点不响铃。


import winsound
from time import sleep, localtime

while True :
    now=localtime()  
    # 会返回 tm_year tm_mon  tm_mday tm_hour tm_min tm_sec tm_wday tm_yday tm_isday
    # 这次会用上 tm_min
    m= now.tm_min
    # 也就是现在时间的分钟
    if m == 00:
        winsound.Beep(3000,500)
        # 第一个是响度,第二个是持续时间
        print("整点了")
    elif m==30:
        winsound.Beep(3000,300)
        winsound.Beep(3000,300)
        print("半了")
    sleep(60)
    # 程序休眠60秒



5. 敏感词审查
一向痛恨网络审查的你成了某网站的审查员,要求审查网络上违反上头规定的名词。
功能描述: 要审查的帖子在仓库根目录的text.txt文件里,要求将所有的和谐,自由,民主,六四替换为*号。 需要的话去github下, 我可不敢放上来

#-*-coding:GBK -*-

file_name = 'sensitivetext.txt'
a=""
with open(file_name,encoding="utf-8") as file_obj:
    content=file_obj.read()
    content=content.replace("六四","**")
    content=content.replace("和谐","**")
    content=content.replace("自由","**")
    content=content.replace("民主","**")
    a=content

with open(file_name,'w',encoding="utf-8") as file_obj2:
    file_obj2.write(a)
数据库的连接与增删改查:

import pymysql  # pymysql

'''

使用pymysql来连接,增删改查数据库

'''

db = pymysql.Connect(host="localhost",user="root",password="zyx2022.",db="zyx",charset="utf8mb4")
# cursorclass=pymysql.cursors.DictCursor)  表示回传数据为字典型
# 例子{'id': 1, 'name': '丁致远', 'passwd': '735282'} 
cursor=db.cursor()
# 创建游标对象

#显示数据库内容
def view():
    db.ping(reconnect=True) # 检查连接是否存在,断开的话会重连。
    cursor.execute("select * from login") # 执行数据库命令
    data=cursor.fetchall() # 接收上一条执行命令的数据
    print("ID\t姓名\t密码")
    for i in data:  # 显示全部接收到的数据
        print(i[0],i[1],i[2])  
    input("\n输入回车键返回操作页面")  
    db.close()  # 关闭数据库链接

# 增加数据
def addsql():
    db.ping(reconnect=True)
    name=input("请输入要增加的姓名:")
    passwd=int(input("请输入要增加的密码:"))
    sql='insert INTO login(`name`,passwd) VALUES("%s","%s")'%(name,passwd)
    cursor.execute(sql)
    db.commit()  # 保存修改
    print(cursor.rowcount,"插入纪录成功")
    cursor.execute("select  * from login ORDER BY id DESC LIMIT 1")
    data=cursor.fetchone()
    print("ID:%s\t姓名:%s\t密码:%s"%(data[0],data[1],data[2]))
    db.close()

# 删除数据
def delsql():
    db.ping(reconnect=True)
    delid=input("请输入要删除的ID:")
    print("本操作不可逆!!!!!")
    yesno=input("请输入y或n继续删除或退出:")
    if yesno == 'y':
        sql='DELETE FROM login WHERE id=%s'%delid  
        cursor.execute(sql)    
        db.commit()
        print(cursor.rowcount,"删除纪录成功")
        db.close()
    elif yesno =='n':
        return 
    else:
        print("请输入y或n!!!!!!!!")

# 变更数据
def changesql():
    db.ping(reconnect=True)
    id=input("请输入要更新的ID:")
    sql="select * from login where id='%s'"%id
    cursor.execute(sql)
    data=cursor.fetchall()
    print("姓名:%s,密码:%s"%(data[0][1],data[0][2]))
    yesno=input("是否修改?输入y或n继续修改或退出:")
    if yesno=='y':
        name=input("请输入要修改的名字:")
        passwd=input("请输入要修改的密码:")
        sql="update login  set `name`='%s',passwd='%s' WHERE id='%s'"%(name,passwd,id)
        cursor.execute(sql)
        sql="select * from login where id='%s'"%id
        cursor.execute(sql)
        data=cursor.fetchall()
        print("修改后的:姓名:%s,密码:%s"%(data[0][1],data[0][2]))
        db.commit()
        print(cursor.rowcount,"修改纪录成功")
        db.close()
    elif yesno =='n':
        return 
    else:
        print("请输入y或n!!!!!!!!")
# 搜索数据
def searchsql():
    db.ping(reconnect=True)
    id=input("请输入要查询的id:")
    sql="select * from login where id=%s"%(id)
    cursor.execute(sql)
    data=cursor.fetchone()
    print("查询的id姓名为:%s,密码为:%s"%(data[1],data[2]))
    db.close()

# 选择界面
while True:
    print("-"*20,"数据库增删查改操作","-"*20)
    print("请选择:\n\t1.增加数据\n\t2.删除数据\n\t3.查找数据\n\t4.修改数据\n\t5.查看数据库")
    choose=input("请输入你要选择的操作[1-5],退出请直接回车:")
    # 仿switch语句 
    if choose=='':
        break
    elif int(choose)==1:
        addsql()
    elif int(choose)==2:
        delsql()
    elif int(choose)==3:
        searchsql()
    elif int(choose)==4:
        changesql()
    elif int(choose)==5:
        view()
    else:
        print("","-"*40,"\n","\t请输入[1-5]!!!!!!!\n","-"*40)
        continue



阅读剩余
THE END