• 《Python编程从入门到实践》学习笔记<7>:用户输入和while循环


    一、用户输入

      函数input()的功能,就是让程序在运行过程中,能够接收到用户的输入进行输出,如下例所示:

    prompt = "请按照提示输入您的姓名,我们将根据您的姓名显示信息!
    "
    prompt += "请输入您的名字:
    "
    
    name = input(prompt)
    print("你好, " + name + "")
    
    #输出结果如下:
    请按照提示输入您的姓名,我们将根据您的姓名显示信息!
    请输入您的名字:
    李雷
    你好, 李雷!

      在上例中,我们将中文提示信息字样的字符串,赋值给变量prompt,其中“+=“的作用是在已赋值的prompt 后面再新增一串字符串,共同组成新的变量prompt,接着在下段代码中,调用input()函数让用户根据提示信息输入,并用新的变量name来实现这个需求,然后通过print来输出,程序运行以后,首先输出提示信息,然后在输出框内键入名字,以李雷为例(绿色为键入字符),接着敲下回车,系统输出字符串“你好, 李雷!”

      对于编程语言中的输入函数,有一个很经典的求奇偶问题,即输入一个随机数,判断它是奇数还是偶数,如下例所示:

    number = input("输入一个随机整数,判断它是奇数还是偶数:
     ")
    number = int(number)
    
    if number % 2 == 0:
        print("
    随机整数 " + str(number) + " 是个偶数.")
    else:
        print("
    随机整数 " + str(number) + " 是个奇数.")
    
    
    
    
    
    #输出结果如下:
    输入一个随机整数,判断它是奇数还是偶数:
     5
    
    随机整数 5 是个奇数.

      上例中的逻辑其实很简单,先定义一个变量number封调用函数input的提示信息,由于输入的数据时数值,而默认的输入数据类型是字符串,因此需要在下面将输入内容的数据类型转换成int型,然后进入if判断,将输入的数据进行取模运算,即“number % 2”。取模运算是用来求取余数的,即数据除以“%”后面的数据,余数是多少就返回多少,如上例中输入数据与2取模,如果等于0则是偶数,反之则是奇数。执行程序,经过提示信息后,输入数值5,经过取模运算后发现余数为1,不满足if条件,执行else部分代码,输出“随机整数 5 是个奇数.”的结果。

      上述例题只是input()函数的基本运用,反复练习后,解决课后习题难度不大,习题答案如下:

    #7-1
    car = input("请输入你想租什么车?
    ")
    print("这辆" + car + "就是你想要的车!")
    
    #输出结果如下:
    请输入你想租什么车?
    bmw
    这辆bmw就是你想要的车!
    
    
    #7-2
    hotel = input("请问有多少人就餐?
    ")
    hotel = int(hotel)
    
    if hotel <= 8:
        print("有空桌")
    else:
        print("没空桌")
    
    #输出结果如下:
    请问有多少人就餐?
    9
    没空桌
    
    
    
    # 7-3
    number = input("请输入你想测的数?
    ")
    number = int(number)
    
    if number % 10 == 0:
        print("是10的整数倍")
    else:
        print("不是10的整数倍")
    
    #输出结果如下:
    请输入你想测的数?
    80
    是10的整数倍

    二、while循环

      while循环也是一种常用的循环方式,执行while循环后,程序会无限循环,直到条件不满足为止,如下例所示:

    number = 0
    while number <=5 :
        print(number)
        number += 1
    
    #输出结果如下所示:
    0
    1
    2
    3
    4
    5

      如上例所示,创建变量numbe并赋值为0,执行while循环,当number小于等于5的时候,输出number,并自增1,依次循环到number大于5以后,程序中断跳出。

      中断循环除了程序自己运行以外,还可以通过自动触发条件来进行,如下所示:

    prompt = "随便输入点什么:
     "
    message = ""
    while message != 'quit':
        message = input(prompt)
    
        if  message != 'quit':
            print(message)
    
    #输出结果如下所示:
    随便输入点什么:
     hello everyone
    hello everyone
    随便输入点什么:
     quit
    
    进程完成,退出码 0

      上例这种创建变量prompt赋值提示信息字符串,同时定义变量message 赋值空字符串,原因在于执行while循环时需要将变量message 'quit'进行对比,因此要先定义变量message并随意赋值字符串,为方便起见赋值空字符串,随后进入while循环,当变量message的值不等于quit时,循环无限执行,直到键入quit后,循环条件不满足,程序中断。其中if循环的作用在于,当输入不是quit时,会输出键入的字符串,当输出为quit时,会跳出判断,不显示quit

      对于简单的需求,设置中断条件很方便,但是对于复杂的需求,尤其是中断条件多的时候,通过使用标志来让程序种子循环则是很方便的选择,如下所示:

    prompt = "随便输入点什么:
     "
    
    active = True
    while active:
        message = input(prompt)
    
        if message == 'quit':
            active = False
        else:
            print(message)
    
    #输出结果如下:
    随便输入点什么:
     lalala
    lalala
    随便输入点什么:
     quit
    
    进程完成,退出码 0

      上例中创建变量prompt保存提示信息,同时创建变量active 保存True,即active 代表条件为真,执行while循环,根据提示输入字符。当输入字符为quit时,将active 重新赋值为False,再次循环时,系统读取active的值为False,默认判断条件为假,程序中断。

      此外,有时候也可以用break的方法让程序中断,如下例所示:

    prompt = "随便输入点什么:
    "
    
    while True:
        message  = input(prompt)
    
        if message  == 'quit':
            break
        else:
            print( message )
    
    #输出结果如下:
    随便输入点什么:
    lalaal
    lalaal
    随便输入点什么:
    quit
    
    进程完成,退出码 0

      同样是定义变量prompt用来存放提示信息,当条件为真的时候循环开始,当输入内容为quit时执行break终止程序循环结束。

      除了跳出循环,python还提供了continue用来跳过输出进入下一次循环,如下例所示:

    number = 0
    
    while number < 5:
        number  += 1
    
        if number > 1 and number < 4 :
            continue
        print( number )
    
    #输出结果如下所示:
    1
    4
    5

      由上例可看出,当变量number的值在1到4之间的时候,程序没有继续执行打印输出的部分,而是直接返回循环开始的地方重新循环,这就是continue跳过的作用。

      关于while的基础用法如上所示,相关习题如下:

    #7-4
    #比萨配料:编写一个循环,提示用户输入一系列的比萨配料,并在用户输入
    #'quit'时结束循环。每当用户输入一种配料后,都打印一条消息,说我们会在比萨中添
    #加这种配料。
    mi = "请输入配料:
    "
    pizz = ""
    
    while pizz != 'quit':
        pizz = input(mi)
    
        if pizz != 'quit':
            print("我们会加入" + pizz)
    
    #输出结果如下所示:
    请输入配料:
    培根
    我们会加入培根
    请输入配料:
    quit
    
    进程完成,退出码 0
    
    
    
    
    #7-5
    #有家电影院根据观众的年龄收取不同的票价:不到 3 岁的观众免费;
    #3~12 岁的观众为 10 美元;超过 12 岁的观众为 15 美元。请编写一个循环,在其中询问
    #用户的年龄,并指出其票价。
    while True:
        age = input( "请输入你的年龄:")
        age = int(age)
        if age <= 3 :
            print("免费")
        elif age <= 12 :
            print("$10")
        else :
            print("$15")
    
    #输出结果如下所示:
    请输入你的年龄:1
    免费
    请输入你的年龄:5
    $10
    请输入你的年龄:19
    $15
    请输入你的年龄:
    
    
    
    
    #7-6-1
    #以另一种方式完成练习 7-4 或练习 7-5,在程序中采取如下所有做法。
    #在 while 循环中使用条件测试来结束循环。
    #使用变量 active 来控制循环结束的时机。
    #使用 break 语句在用户输入'quit'时退出循环。
    while True:
        age = input( "请输入你的年龄:")
        if age == 'quit' :
            break
        elif int(age) <= 3 :
            print("免费")
        elif int(age) <= 12 :
            print("$10")
        else :
            print("$15")
    
    #输出结果如下所示:
    请输入你的年龄:12
    $10
    请输入你的年龄:1
    免费
    请输入你的年龄:16
    $15
    请输入你的年龄:quit
    
    进程完成,退出码 0
            
            
            
    #7-6-1-2 让输出结果存入列表中,最后打印列表中的元素
    pizz = []
    ingredient = "请输入披萨配料:"
    pizz_ingredient = ""
    
    while pizz_ingredient != '不要了':
        pizz_ingredient = input(ingredient)
    
        if pizz_ingredient != '不要了':
            pizz.append(pizz_ingredient)
    
    print("您一共添加了:" )
    for p in pizz:
        print(p,end=" ")  #end=" "可让输出横向,双引号中可输入需要的分隔符,此处用空格分隔
        
    #输出结果如下所示:
    请输入披萨配料:培根
    请输入披萨配料:香肠
    请输入披萨配料:鸡蛋
    请输入披萨配料:火腿
    请输入披萨配料:生菜
    请输入披萨配料:不要了
    您一共添加了:
    培根 香肠 鸡蛋 火腿 生菜 
    进程完成,退出码 0
    
    
    
    #7-6-2 
    active = True
    
    while active:
        age = input("请输入您的年龄:")
        age = age
        if age == 'quit':
            active == False
        elif (int(age) <= 3) and (int(age) > 0):
            print("	根据规定您可以免费观影!")
        elif int(age) <= 12 and (int(age) > 3):
            print("	根据规定您需要购买10美元的电影票!")
        elif int(age) > 12:
            print("	根据规定您需要购买15美元的电影票!")
        print("祝您观影愉快!")
        
    #输出结果如下所示:
    请输入您的年龄:1
        根据规定您可以免费观影!
    祝您观影愉快!
    请输入您的年龄:6
        根据规定您需要购买10美元的电影票!
    祝您观影愉快!
    请输入您的年龄:16
        根据规定您需要购买15美元的电影票!
    祝您观影愉快!
    请输入您的年龄:quit
    祝您观影愉快!
    请输入您的年龄:
        
        
        
        
    7-6-3
    while True:
        age = input("请输入您的年龄:")
        if age == 'quit':
            break
        elif int(age) <= 3:
            print("	根据规定您可以免费观影!")
        elif int(age) <= 12:
            print("	根据规定您需要购买10美元的电影票!")
        else:
            print("	根据规定您需要购买15美元的电影票!")
            
    #输出结果如下所示:
    请输入您的年龄:1
        根据规定您可以免费观影!
    请输入您的年龄:4
        根据规定您需要购买10美元的电影票!
    请输入您的年龄:22
        根据规定您需要购买15美元的电影票!
    请输入您的年龄:

      对于while的高级应用,常见的是用来处理列表或字典中的值,书中分三个例子介绍,课后习题难度与例题相似,答案如下所示:

    #7-8
    #创建一个名为 sandwich_orders 的列表,在其中包含各种三明治的名字;再创建一个名为 finished_sandwiches 的空列表。
    #遍历列表 sandwich_orders,对于其中的每种三明治,都打印一条消息,如 I made your tuna sandwich,并将其移到列表finished_sandwiches。
    #所有三明治都制作好后,打印一条消息,将这些三明治列出来。
    sandwich_orders = ['鸡蛋三明治','培根三明治','金枪鱼三明治']
    finished_sandwiches = []
    
    while sandwich_orders:
        sandwich_order = sandwich_orders.pop()
        print("您的" + sandwich_order + "正在制作中,请稍等。")
        finished_sandwiches.append(sandwich_order)
    
    print("
    已经制作完成的三明治有:")
    for sandwich in finished_sandwiches:
        print("	" + sandwich)
    
    #输出结果如下所示:
    您的金枪鱼三明治正在制作中,请稍等。
    您的培根三明治正在制作中,请稍等。
    您的鸡蛋三明治正在制作中,请稍等。
    
    已经制作完成的三明治有:
        金枪鱼三明治
        培根三明治
        鸡蛋三明治
    
    进程完成,退出码 0
    
    
    
    
    #7-9
    #使用为完成练习 7-8 而创建的列表sandwich_orders,并确保'pastrami'在其中至少出现了三次。
    #在程序开头附近添加这样的代码:打印一条消息,指出熟食店的五香烟熏牛肉卖完了;
    #再使用一个 while 循环将列表 sandwich_orders 中的'pastrami'都删除。确认最终的列表 finished_sandwiches 中不包含'pastrami'。
    
    
    sandwich_orders = ['鸡蛋三明治', '烟熏牛肉', '培根三明治', '烟熏牛肉', '金枪鱼三明治', '烟熏牛肉']
    print(sandwich_orders)
    
    while '烟熏牛肉' in sandwich_orders:
        sandwich_orders.remove('烟熏牛肉')
    
    print(sandwich_orders)
    
    #输出结果如下所示:
    ['鸡蛋三明治', '烟熏牛肉', '培根三明治', '烟熏牛肉', '金枪鱼三明治', '烟熏牛肉']
    ['鸡蛋三明治', '培根三明治', '金枪鱼三明治']
    
    进程完成,退出码 0
    
    
    
    
    #7-10
    #编写一个程序,调查用户梦想的度假胜地。使用类似于“If
    #you could visit one place in the world, where would you go?”的提示,并编写一个打印调
    #查结果的代码块。
    respones = {}
    active = True
    
    while active:
        name = input("请输入你的名字:
    ")
        city = input("请输入你想去的城市:
    ")
    
        respones[name] = city
    
        repart = input("你想问问别人么?(yes / no)
    ")
        if repart == 'no':
            active = False
    
    print("
    以下是大家的答案")
    for name,city in respones.items():
        print(name.title() + "想去" + city.title() + "!")
    7-10-2
    respones = {}
    
    while True:
        name = input("请输入你的名字:
    ")
        city = input("请输入你想去的城市:
    ")
    
        respones[name] = city
    
        repart = input("你想问问别人么?(yes / no)
    ")
        if repart == 'no':
            break
    
    print("
    以下是大家的答案")
    for name,city in respones.items():
        print(name.title() + "想去" + city.title() + "!")
    
    #输出结果如下所示:
    请输入你的名字:
    李雷
    请输入你想去的城市:
    东京
    你想问问别人么?(yes / no)
    yes
    请输入你的名字:
    韩梅梅
    请输入你想去的城市:
    伦敦
    你想问问别人么?(yes / no)
    no
    
    以下是大家的答案
    李雷想去东京!
    韩梅梅想去伦敦!
    请输入你的名字:

      

  • 相关阅读:
    base64转图片的两种方式
    perl表达 匿名数组和匿名哈希
    perl语言中的定义枚举
    两个字符串连接输出乱码问题解决
    perl LibXML模块使用详解
    SQL优化-标量子查询(数据仓库设计的隐患-标量子查询)
    CDH版hbase-0.98.1单机安装
    CDH版本hadoop2.6伪分布式安装
    MYSQL数据的安装、配置
    Redis介绍、安装部署、操作
  • 原文地址:https://www.cnblogs.com/a404790696/p/10985481.html
Copyright © 2020-2023  润新知