layout: post
date: 2019-01-25 00:00:00
author: “Katsu”
title: python小练习




一、猜数字



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


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



二、FizzBuzz



另一道经典编程题。



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



三、猜数字的AI



和猜数字一样,不过这次是设计一个能猜数字的AI



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



四、整点报时



老式挂钟会在整点的报时,响铃的次数和时间相等。我们设计一个在电脑上运行的报时器。


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




代码

一、猜数字

知识点 : random.randint(min, max),用于随机生成一个[min, max]的整数

# 一、猜数字
# 经典的猜数字游戏,几乎所有人学编程时都会做。
# 功能描述:随机选择一个三位以内的数字作为答案。用户输入一个数字,程序会提示大了或是小了,直到用户猜中
import random
digit = int(input("input a digit:"))
answer = random.randint(0,100)
while digit != answer:
    if answer > digit:
        print(answer, " too big")
    else:
        print(answer, " too small")
    answer = random.randint(0,100)
print("you are right! it is ", digit)



### 二、FizzBuzz

# 二、FizzBuzz
# 功能描述:
# 遍历并打印0到100,
# 如果数字能被3整除,显示Fizz;
# 如果数字能被5整除,显示Buzz;
# 如果能同时被3和5整除,就显示FizzBuzz。
# 结果应该类似:0,1,2,Fizz,4,Buzz,6……14,FizzBuzz,16……
for i in range(0, 101):
    if i%3 == 0 and i%5 != 0:
        print("Fizz", end = " ")
    if i%5 == 0 and i%3 != 0:
        print("Buzz", end = " ")
    if i%3 == 0 and i%5 == 0:
        print("FizzBuzz", end = " ")
    if i%3 != 0 and i%5 != 0:
        print(i, end = " ")



### 三、猜数字的AI

知识点 : 二分法查找,取一个四分点用来求下次的猜测值,相比于添加top、base记录上下限省了一个变量

# 三、猜数字的AI
# 和猜数字一样,不过这次是设计一个能猜数字的AI。
# 功能描述:用户输入一个单位以内的数字,AI要用最少的次数猜中,并且显示出猜的次数和数字
import random
digit = int(input("input a digit:"))
times = 0
answer = 100//2
middle = 100//4
times = times + 1
while digit != answer:
    if answer < digit:
        print(answer, " too small")
        answer = answer + middle
        times = times + 1
    if answer > digit:
        print(answer, " too big")
        answer = answer - middle
        times = times + 1
    middle = middle//2
    if middle == 0:
        middle = 1
print(answer, " is right! you have tried for ", times, " times!")



四、整点报时

知识点

1. winsound.Beep(Hz, ms),蜂鸣,频率为Hz,时间为ms,人耳可听到的频率范围为(20,20K)

2. time.localtime(),获取当前时间,tm_hour、tm_minute、tm_sec分别为对应的时分秒

# 四、整点报时
# 老式挂钟会在整点的报时,响铃的次数和时间相等。我们设计一个在电脑上运行的报时器。
# 功能描述:运行后,在每一个整点长响一声,半个整点短响两声。实现睡眠模式,晚上十二点到早上六点不响铃。
import time
import winsound

running = True
def long_Beep():
#   music = "music.mp3"
#   winsound.PlaySound(music, winsound.SND_ALIAS)
    winsound.Beep(370, 4000)
def short_Beep():
    winsound.Beep(370, 2000)    
while running:
    t = time.localtime()
    # fomat = "%H %M"
    # now = time.strftime(fomat, t).split(' ')
    # hour = int(now[0])
    # minute = int(now[1])
    hour = t.tm_hour
    minute = t.tm_min
    second = t.tm_sec
    if hour >= 6 and minute == 0:
        long_Beep()
        time.sleep(60 - second)
    if hour >= 6 and minute == 30:
        short_Beep()
        short_Beep()
        time.sleep(60 - second)
    if hour == 22 and minute == 32:
        long_Beep()
        short_Beep()
        time.sleep(60 - second)