鱼C论坛

 找回密码
 立即注册
查看: 2960|回复: 2

[技术交流] 第5讲 输入

[复制链接]
发表于 2017-6-26 21:46:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
到现在为止,希望程序“处理一些数”时,都必须把这些数直接放在代码中。例如,如果编写了前面讲的温度转换程序,你可能会把要转换的温度直接放在代码中。如果想要转换一个不同的温度,就必须修改代码。
如果你希望用户在程序运行时输入他想转换的温度呢?之前我们说过,一个程序有3大部分:输入、处理和输出。我们的第一个程序只有输出。温度转换程序有处理(转换温度)和输出,但是没有输入。现在该向程 序增加第三个部分了:输入。输入就是指在程序运行时向其提供某样东西,也就是某种信息。
这样一来,我们就能写出与用户交互的程序,这就有趣多了。
Python有一个内置函数,名为raw_input(),可以用这个函数从用户那里得到输入。在这一章中,我们将学习如何在程序中使用raw_input()。
5.1 raw_input()
raw_input()函数从用户那里得到一个字符串。正常情况下会从键盘得到这个输入,也就是说,用户要键入输入。
raw_input()也是一个Python内置函数,就像str()、int()、float()和type()一样(在第4章中已经见过这些函数)。后面还会学习更多有关函数的内容。不过对现在来说,只需要记住使用raw_input()时要加上小括号(圆括号)。
Raw input
在Python 3中,raw_input()改名为input()了。它与Python 2中的raw_input()完全一样。
可以这样来使用:
someName=raw_input()
这会让用户键入一个字符串,并把它赋给名字someName。
现在把它放在程序里。在IDLE中创建一个新文件,键入代码清单5-1中的代码。

代码清单5-1 使用raw_input()得到一个字符串
print "Enter your name: "
somebody=raw_input()
print "Hi", somebody, "how are you today?"
保存这个程序,并在IDLE中运行,看看它如何工作。应该可以看到类似下面的结果:
Enter your name:
Warren
Hi Warren how are you today?
我键入了我的名字,程序把它赋给了somebody。
5.2 print命令和逗号
通常情况下,希望从用户得到输入时,必须告诉他你想要什么,应当提供类似这样的一个消息:
print "Enter your name: "
然后用raw_input()函数得到用户的响应:
someName=raw_input()
如果运行这些代码行,并键入你的名字,会得到:
Enter your name:
Warren
如果希望用户在消息的同一行上键入他的答案,只需要在print语句的末尾放上一个逗号,就像这样:

  1. print "Enter your name: ",
  2. someName=raw_input()
复制代码


注意逗号放在结束引号的外面。
如果运行这个代码,会得到:
Enter your name: Warren
逗号可以用来把多个print语句合并到同一行上。逗号只是表示“打印完这个内容后不要跳转到下一行”。代码清单5-1的最后一行就是这么做的。
在IDLE编辑器窗口中键入代码清单5-2中的代码,并运行这个程 序。
代码清单5-2 逗号用来做什么?

  1. print "My",
  2. print "name",
  3. print "is",
  4. print "Dave."
复制代码


运行这个程序时应该会得到这样的结果:
My name is Dave.
注意到了吗?引号中的每个词末尾都没有空格,但是运行这个程序时每个单词之间却出现了空格。使用逗号将多个print语句合并到同一行时,Python会增加一个空格。
行尾逗号
在Python 3中,通过在行尾添加逗号使得打印的内容都在同一行的方法不再有效。而且,在Python 3中使用print()时,要打印的内容必须被包含在一对括号中。所以如果你在使用Python 3,代码清单5-2应该是这样:

  1. print( "My" , end=" ")
  2. print( "name" , end=" ")
  3. print( "is" , end=" ")
  4. print( "Dave." , end=" ")
复制代码


打印raw_input()提示语的简便方法
打印提示消息还有一种简便方 法。raw_input()函数可以直接打印消息,所以你根本不必使用print语句:
someName=raw_input ("Enter your name: ")
这就像raw_input()函数内置了print一样。从现在起我们都将使用这个简便方法。
说得对!有了raw_input(),
根本不用再另外买其他东西!
没有必要再使用print!
既然raw_input()已经内置了print,又何必另外掏钱呢?
只需要付区区99.95美元,它 就是你的了!

5.3 输入数字
我们已经见过如何使用raw_input()来得到字符串。但是如果希望得到一个数该怎么做呢?毕竟,我们之所以讨论输入,原本就是为了让用户为我们的温度转换程序输入温度。
如果你读过第4章,应该已经知道答案了。可以从raw_input()给我们的字符串使用int()或float()函数创建一个数。可以像这样:

  1. temp_string=raw_input()
  2. fahrenheit=float(temp_string)
复制代码


先使用raw_input()得到用户的输入(一个字符串)。然后使用float()由这个字符串创建一个数。得到温度(作为浮点数)后,为它指定名字fahrenheit。
不过还有一种简便方法。只需一步就可以完成所有这些工作,如下:
fahrenheit=float(raw_input())
所做的工作是一样的。它由用户得到字符串,然后从这个字符串创建一个数。这里只是稍稍少写一点代码。
下面在我们的温度转换程序中使用这种方法。试着运行代码清单5-3中的程序,看看会得到什么。
代码清单5-3 使用raw_input()转换温度
还可以把代码清单5-3最后3行合并为一行,像这样:
print "That is", celsius, "degrees Celsius"
这实际上是之前3个print语句的简写形式。
结合int()使用raw_input()
如果你希望用户输入的数总是整数(而不是小数),可以用int()来转换,例如:

  1. response=raw_input("How many students are in your class: ")
  2. numberOfStudents=int(response)
复制代码


像(Python)程序员一样思考
得到数字输入还有一种方法。Python 2有一个名叫input()的函数,可以直接提供一个数,所以不必使用int()或float()来转换。我们在第1章的猜数程序中用过这个函数,因为这是从用户得到一个数的最简单的方法。
但为了保持一致,我们在本书的剩余部分会始终使用raw_input()。而且,Python 3中 去除了input()函数(可以直接获取数字而不需要进行转换),只有raw_input()。更令人感到混乱的是,Python 2中的raw_input()在Python 3中改名为input(),但它的功能仍然和你在这一章中见到的这个函数一样,只会得到字符串。因为我们很清楚怎样从一个字符串创建一个数,所以建议使用raw_input(),而不要用Python 2中的input()。

5.4 来自互联网的输入
通常,程序的输入都来自用户。不过还有其他一些方法得到输入。可以从计算机硬盘上的文件中得到输入,或者也可以从互联网获取输入。
如果你能连接互联网,可以试试代码清单的程序。它会从这本书的网站打开一个文件,为你显示这个文件中的消息。
代码清单  从互联网上的一个文件得到输入
  1. import urllib2
  2. file=urllib2.urlopen('http://helloworldbook2.com/data/message.txt')
  3. message=file.read()
  4. print message
复制代码


就这么简单。只需要区区4行代码,你的计算机就可以通过互联网得到这本书网站上的一个文件,并显示这个文件。如果试着运行这个程序(假设你的互联网连接工作正常),你会看到这个消息。
向程序员一样思考
根据你使用的操作系统(Windows、Linux或Mac OS X),运行代码清单5-4中的程序时,你可能会在每行末尾看到小方块或类似\r的字符。这是因为,不同的操作系统使用不同的方法来指示文本行的结束。Windows(和之前的MS-DOS)使用两个字符:CR(回车)和LF(换行)来表示。Linux只使用LF,Mac OS X只使用CR。
有些程序可以处理所有这些情况,不过有些程序(比如IDLE)看到行结束符与它期望的不一致时,就会不知所措。发生这种情况时,它们会显示一个小方块,表示“我不理解这个字符”。你可能会看到这样的小方块,也可能看不到,这取决于你在使用什么操作系统,还取决于你如何运行程序(使用IDLE还是采用另外某种方法)。
你学到了什么
在这一章,你学到了以下内容。
用raw_input()输入文本。
向raw_input()增加一个提示消息。
结合int()和float()使用raw_input()输入数字。
使用逗号将多行打印到一行上。

评分

参与人数 1鱼币 +5 收起 理由
小甲鱼 + 5 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-30 10:31:51 | 显示全部楼层
http://www.kidscode.cn/archives/1522
是这个课程上的么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-9 20:13:09 | 显示全部楼层
康小泡 发表于 2017-8-30 10:31
http://www.kidscode.cn/archives/1522
是这个课程上的么?

是这个的,这个使用的python2.7版本,小甲鱼使用3.0版本,差别不大。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表