一、用户输入
函数input()的功能,就是让程序在运行过程中,能够接收到用户的输入进行输出,如下例所示:
prompt = "请按照提示输入您的姓名,我们将根据您的姓名显示信息!\n" prompt += "请输入您的名字:\n" name = input(prompt) print("你好, " + name + "!") #输出结果如下: 请按照提示输入您的姓名,我们将根据您的姓名显示信息! 请输入您的名字: 李雷 你好, 李雷!
在上例中,我们将中文提示信息字样的字符串,赋值给变量prompt,其中“+=“的作用是在已赋值的prompt 后面再新增一串字符串,共同组成新的变量prompt,接着在下段代码中,调用input()函数让用户根据提示信息输入,并用新的变量name来实现这个需求,然后通过print来输出,程序运行以后,首先输出提示信息,然后在输出框内键入名字,以李雷为例(绿色为键入字符),接着敲下回车,系统输出字符串“你好, 李雷!”
对于编程语言中的输入函数,有一个很经典的求奇偶问题,即输入一个随机数,判断它是奇数还是偶数,如下例所示:
number = input("输入一个随机整数,判断它是奇数还是偶数:\n ") number = int(number) if number % 2 == 0: print("\n随机整数 " + str(number) + " 是个偶数.") else: print("\n随机整数 " + str(number) + " 是个奇数.") #输出结果如下: 输入一个随机整数,判断它是奇数还是偶数: 5 随机整数 5 是个奇数.
上例中的逻辑其实很简单,先定义一个变量number封调用函数input的提示信息,由于输入的数据时数值,而默认的输入数据类型是字符串,因此需要在下面将输入内容的数据类型转换成int型,然后进入if判断,将输入的数据进行取模运算,即“number % 2”。取模运算是用来求取余数的,即数据除以“%”后面的数据,余数是多少就返回多少,如上例中输入数据与2取模,如果等于0则是偶数,反之则是奇数。执行程序,经过提示信息后,输入数值5,经过取模运算后发现余数为1,不满足if条件,执行else部分代码,输出“随机整数 5 是个奇数.”的结果。
上述例题只是input()函数的基本运用,反复练习后,解决课后习题难度不大,习题答案如下:
#7-1 car = input("请输入你想租什么车?\n") print("这辆" + car + "就是你想要的车!") #输出结果如下: 请输入你想租什么车? bmw 这辆bmw就是你想要的车! #7-2 hotel = input("请问有多少人就餐?\n") hotel = int(hotel) if hotel <= 8: print("有空桌") else: print("没空桌") #输出结果如下: 请问有多少人就餐? 9 没空桌 # 7-3 number = input("请输入你想测的数?\n") 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 = "随便输入点什么:\n " 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 = "随便输入点什么:\n " 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 = "随便输入点什么:\n" 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 = "请输入配料:\n" 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("\t根据规定您可以免费观影!") elif int(age) <= 12 and (int(age) > 3): print("\t根据规定您需要购买10美元的电影票!") elif int(age) > 12: print("\t根据规定您需要购买15美元的电影票!") print("祝您观影愉快!") #输出结果如下所示: 请输入您的年龄:1 根据规定您可以免费观影! 祝您观影愉快! 请输入您的年龄:6 根据规定您需要购买10美元的电影票! 祝您观影愉快! 请输入您的年龄:16 根据规定您需要购买15美元的电影票! 祝您观影愉快! 请输入您的年龄:quit 祝您观影愉快! 请输入您的年龄: 7-6-3 while True: age = input("请输入您的年龄:") if age == 'quit': break elif int(age) <= 3: print("\t根据规定您可以免费观影!") elif int(age) <= 12: print("\t根据规定您需要购买10美元的电影票!") else: print("\t根据规定您需要购买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("\n已经制作完成的三明治有:") for sandwich in finished_sandwiches: print("\t" + 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("请输入你的名字:\n") city = input("请输入你想去的城市:\n") respones[name] = city repart = input("你想问问别人么?(yes / no)\n") if repart == 'no': active = False print("\n以下是大家的答案") for name,city in respones.items(): print(name.title() + "想去" + city.title() + "!") 7-10-2 respones = {} while True: name = input("请输入你的名字:\n") city = input("请输入你想去的城市:\n") respones[name] = city repart = input("你想问问别人么?(yes / no)\n") if repart == 'no': break print("\n以下是大家的答案") for name,city in respones.items(): print(name.title() + "想去" + city.title() + "!") #输出结果如下所示: 请输入你的名字: 李雷 请输入你想去的城市: 东京 你想问问别人么?(yes / no) yes 请输入你的名字: 韩梅梅 请输入你想去的城市: 伦敦 你想问问别人么?(yes / no) no 以下是大家的答案 李雷想去东京! 韩梅梅想去伦敦! 请输入你的名字: