python项目之购物街价格竞猜

购物街价格竞猜

程序说明

本项目尝试用Python语言设计一个简单的交互式程序,来模仿购物街价格竞猜。程序模板已经给出,文件名为GuessPrice.py。计算机将扮演主持人,而你则扮演竞猜者。针对一件未标明价格的商品,计算机会在某个已知的范围内产生一个秘密数,而你则要尝试猜出这个数字。将你猜测的价格通过输入框送给计算机,计算机将会提示你“比实际价格高了”,“比实际价格低了”或者“竞猜正确!”等一些提示信息。计算机会在你竞猜开始时给你规定一个有限的竞猜次数,在规定的竞猜次数内你可以反复猜价。猜中价格或竞猜次数剩余为0时,游戏结束。

我们将通过使用一个可以输入价格的输入框和几个按钮来实现交互。对于这个项目,我们将忽略画布,而直接在控制台打印输出计算机的提示信息。当然我们可以尝试在画布上以更生动、直观的方式显示信息,但因为实现图形输出是一个比较复杂的过程,我们在后面的课程里会陆续接触到。目前,作为一名初学者,我们应该首先注重程序的逻辑正确性,重点放在如何建立你的项目风格和在掌握基于事件驱动编程的编程步骤上。

在这个程序里你将首次接触到框架、输入框、按钮等交互式对象,你会体验到人机交互的乐趣。

编写基于事件驱动的程序需要以下步骤:

定义全局变量(初始化)
定义程序需要的辅助函数
定义类(当前的这个程序不需要此环节,后面的作业中我们会用到)
定义事件处理函数
创建框架(交互界面)
注册需要的事件处理函数
启动框架和程序中的定时器(定时器的内容下一个作业会接触到)

通过该项目你可以有以下收获:

获得数学问题(随机)的具体化和试验验证能力
获得问题分解并分而治之的技巧
掌握编写交互式应用程序的步骤
熟悉事件驱动编程
了解算法的作用和意义

以下为完整代码:

# -*- coding: utf-8 -*-
# 猜物价游戏 - GuessPrice项目模板
# 通过按钮和文本框实现输入
# 所有和游戏相关的输出都显示在控制台上

#请在此处填写代码,分别导入math、simpleguitk、random模块
import math
import simpleguitk
import random

# 初始化全局变量
random_num = 0   #  电脑生成的随机数,初始化为0
num_range = 10   #  生成随机数的范围
remain_time = 0  #  剩余的竞猜次数,初始化为0

# 自定义函数,用于游戏和新一轮游戏的启动
def new_game():
    global random_num, num_range, remain_time
    remain_time = int(math.ceil(math.log(num_range + 1, 2)))
    print("\n欢迎来到购物街!")
    print("新一轮商品竞猜开始。竞猜价格范围从0到", num_range)
    print("总的竞猜机会有", remain_time,"次")
    random_num = random.randrange(0, num_range)

# 为控制面板定义事件处理程序
def range10():
    # 改变竞价范围[0,10)和重新启动游戏的按钮
    global num_range
    num_range = 10
    new_game()

def range100():

    # 改变竞价范围[0,100)和重新启动游戏的按钮
    global num_range
    num_range = 100
    new_game()

def range1000():
    # 改变竞价范围[0,1000)和重新启动游戏的按钮
     global num_range
     num_range = 1000
     new_game()

def input_guess(guess):
    # 游戏主要的逻辑设计在这一部分
    # 首先判断竞猜机会是否已用完,如果没有用完就判断输入的价格和电脑产生的价格是否相同,
    # 根据比较结果输出相应内容,并修改剩余的竞猜次数。如果用完了竞猜机会就提示用户,
    # 并显示商品实际价格,然后重新开始游戏。
    global random_num, num_range, remain_time
    if remain_time > 0:
        if random_num == int(guess):
            print('你猜对了')

        elif random_num > int(guess):
            print('价格低了,你还有',str(remain_time-1) , '次机会')
            remain_time = remain_time-1

        elif random_num < int(guess):
            print('价格高了,你还有',str(remain_time-1),'次机会')
            remain_time = remain_time-1
    if remain_time == 0:
        print('竞猜结束')
        new_game()

# 创建框架
# 请在此处填写代码,示例:frame = simpleguitk.create_frame('框架名', 300, 300)
frame = simpleguitk.create_frame('', 300, 300)

# 为框架添加按钮和输入框对象及处理事件
# 请在此处填写代码,示例:frame.add_button('按钮名', range10, 200)
frame.add_button('第一个商品的竞猜价格是0到10元', range10, 200)
frame.add_button('第二个商品的竞猜价格是0到100元', range100, 200)
frame.add_button('第三个商品的竞猜价格是0到1000元', range1000, 200)
frame.add_input('请输入竞猜价格',input_guess,200)
# 调用new_game
new_game()
#启动框架
frame.start()
  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值