《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

以下是大家的答案
李雷想去东京!
韩梅梅想去伦敦!
请输入你的名字:

  

原文地址:https://www.cnblogs.com/a404790696/p/10985481.html