9.12 已经算长篇的两个程序

一、猜年龄抽奖游戏:

  1. 给定年龄,用户可以猜三次年龄
  2. 年龄猜对,让用户选择两次奖励
  3. 用户选择两次奖励后可以退出
age = 18
count = 0
prize_dict = {0: '多拉爱梦', 1: '百宝箱', 3: 'python学习宝典', 4: '境外游资助费'}
while count < 3:
    age_inp = input('请输入你猜的年龄:')
    if not age_inp.isdigit():   #如果输入的不是纯数字
        print('只能输入数字,请重新输入')
        continue
    age_inp_int = int(age_inp)
    if age_inp_int == age:
        print('猜中了,可以抽两次奖')
        print(prize_dict)
        # 获取两次奖品:
        for i in range(2): #猜中后的内循环
            prize_choice = input('请输入你想要的奖品序号,如果不需要输入n退出!!')
            if prize_choice != 'n':
                print(f'恭喜你获得奖品:{prize_dict[int(prize_choice)]}')  #字典按key取值
            else:
                break
        break
    elif age_inp_int > age:
        print('猜大了')
    else:
        print('猜小了')
    count += 1  # 玩一次游戏次数加1
    if count != 3:
        continue
    again_choice = input('你还想继续玩吗?继续请回复y,否则按其他任意键退出!')
    if again_choice == 'y':
        count = 0

二、菜单:

  1. 打印省、市、县三级菜单
  2. 可返回上一级
  3. 可随时退出程序
menu={
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}
tag=True
while tag:
    menu1=menu
    for key in menu1:  #打印第一层
        print(key)
    choice1=input('第一层:').strip()   #选择第一层
    if choice1=='b':
        break
    if choice1=='q':
        tag=False
        continue
    if choice1 not in menu1:
        continue
    while tag:
        menu2=menu1[choice1]
        for key in menu2:
            print(key)
        choice2 = input('第二层:').strip()  # 选择第二层
        if choice2 == 'b':
            break
        if choice2== 'q':
            tag = False
            continue
        if choice2 not in menu2:
            continue
        while tag:
            menu3 = menu2[choice2]
            for key in menu3:
                print(key)
            choice3 = input('第三层:').strip()  # 选择第三层
            if choice3 == 'b':
                break
            if choice3 == 'q':
                tag = False
                continue
            if choice3 not in menu3:
                continue
            while tag:
                menu4 = menu3[choice3]
                for key in menu4:
                    print(key)
                choice4 = input('第四层:').strip()  # 选择第四层
                if choice4 == 'b':
                    break
                if choice4 == 'q':
                    tag = False
                    continue
                if choice4 not in menu4:
                    continue

这个程序主要应用了while的嵌套循环,实现了菜单的层层包含关系,每一层循环的内容一样,都是把上一层的值当做键,开始遍历,if条件判断中,如果输入‘b‘就返回上一层,跳出本层循环,如果输入‘q‘就退出全部循环,因为tag=false相当于一个条件,在每层的while判断中不通过。如果输入其他内容就一直输入,直到输入菜单里有的子菜单,方进入下一层。

原文地址:https://www.cnblogs.com/lidandanaa/p/11515133.html

时间: 2024-10-13 20:32:58

9.12 已经算长篇的两个程序的相关文章

Java内存分析1 - 从两个程序说起

这次看一些关于JVM内存分析的内容. 首先来看两个程序,这里是程序一:JVMStackTest,看下代码: package com.zhyea.robin.jvm; public class JVMStackTest { private static int count = 0; private void recur() { ++count; recur(); System.out.println("recur()方法执行结束"); } public static void main(

VC++ 在两个程序中 传送字符串等常量值的方法:使用了 WM_COPYDATA 消息(转载)

转载:http://www.cnblogs.com/renyuan/p/5037536.html VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的 消息作用:    在进程间共享数据(内部通过创建内存映射文件) 消息介绍:需要用到的数据结构/类型:typedef struct tagCOPYDATASTRUCT {    ULONG_PTR dwData;    DWORD cbData;    PVOID lpData;} COPYDATASTRUCT,

DELPHI低版本开发的两层程序平稳升级到三层

N年前,我们用DELPHI低版本开发的两层程序(比如工厂ERP系统),现在仍然在企业广泛地得到使用,但老系统有些跟不上企业的发展需要了.主要表现在:虽然我们的老系统对企业的业务实现得很好,可以很好地满足企业目前的业务需求,但现在企业要求我们的服务器要能够远程分布式地布署,于是我们自然会想到将原来的两层程序升级为三层,这样无疑将满足企业新的需求.大家都知道DELPHI低版本中间件的开发框架是基于微软陈旧的COM架构的MIDAS,这是一种一.二十年前的技术,MIDAS以前完全没有考虑对后来新的64位

计算机网络|C语言Socket编程,实现两个程序间的通信

C语言Socket编程,实现两个程序间的通信 server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的流程图?? 服务端server 服务端需要 "两个"套接字 : 1.服务端套接字serverSocket 2.客户端connect连接请求时,发来的套接字clientSocket 按流程图来看, server服务端主要就是实现下面几个步骤: 0.WSAStartup初始化 //这个东西也不知道是什么鬼,反正就是要初始化一下,

算法导论 10.1-2 用一个数组实现两个栈

一.题目 用一个数组A[ 1....N ]实现两个栈,除非数组的每一个单元都被使用,否则栈例程不能有溢出,注意PUSH和POP操作的时间应为O(1). 二.解法 对于一个数组,由它的两端作为栈底,栈向数组中间扩展.当数组中每个元素被用到时,栈满. 三.代码 struct Node; typedef Node *ComStack; struct Node { int Capacity; int TopL; int TopR; ElementType *Array; }; ComStack Crea

实验12:Problem D: 判断两个圆之间的关系

Home Web Board ProblemSet Standing Status Statistics Problem D: 判断两个圆之间的关系 Problem D: 判断两个圆之间的关系 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 381  Solved: 325[Submit][Status][Web Board] Description 定义Point类,包括double类型的两个属性,分别表示二维空间中一个点的横纵坐标:定义其必要的构

1.11-1.12 Sqoop导入数据时两种增量方式导入及direct

一.增量数据的导入 1.两种方式 ## query 有一个唯一标识符,通常这个表都有一个字段,类似于插入时间createtime where createtime => 20150924000000000 and createtime < 20150925000000000 ##sqoop参数 Incremental import arguments: --check-column <column> Source column to check for incremental ch

做了两年程序员对未来迷茫怎么办?

近期新霸哥看了一些关于技术交流的QQ群聊天记录,其中感慨最深的就是有一哥们说自己做程序员都快两年了,不知道自己想要啥,该怎么做,是继续做程序员该是转型做其他的行业?这个问题,新霸哥相信有很多的朋友也经历吧. 回想过去刚刚进入职场,特别是进入了一个高薪的职位的时候,虽然会很苦,很累,但是一想到是自己的专业工作,知道自己想要啥,就一股劲的拼命的向前冲.可是两年后的今天为什么会出现不知道该做啥好呢?这个时候新霸哥建议是时候该停下工作好好的重新认识自己,这样不仅对公司还是对个人都是有利的. 新霸哥觉得,

两个程序之间的通行(邮槽)

*Windows环境下,实现进程间的通信方式消息.命名管道(Name Pipes).剪贴板(ClipBoard)等,邮槽(MailSlot)也是其中一种. 1.邮槽 邮槽(Mailslot)也称为邮件槽,它是 Windows 提供的一种用来实现进程间通信的手段,是单向数据传输的服务. 邮槽的弊端:邮槽是单向通信.服务器端只能读取,客户端只能写入.如果要双向通信就需要服务端写一个邮槽,客户端在写一个邮槽.创建两个邮槽. 服务端和客户端的区分:创建邮槽的为服务端,已存在的邮槽的哪一端. 客户端在使用