笨方法学Python(11-15)

习题11、提问

#!/usr/bin/python
# -*- coding:utf-8 -*-

print "How old are you?",
age = raw_input()
print "How tall are you?",
height = raw_input()
print "How much do you weight?",
weight = raw_input()

print "So, you're %r old, %r tall and %r height." % (
    age, height, weight)

#每行print后面加了‘,’,
#这样的话print就不会输出新行符而结束这儿一行跑到下一行去。    

小结

  1. 如何读取用户输入的数字进行计算?
    这个有点算高级话题了。试试x = int(raw_input()),他会把用户输入的字符串用 int()
    转换成整数。
  2. 我把身高写到 raw inputraw_input("6'2")怎么不灵?
    不应该写成这样,只有从命令行输入才可以。首先回去把代码写成和我的一模一样,然后运行脚本,当脚本暂停下来的时候,用键盘输入你的身高。这样做就可以了。
  3. 为什么第 8 行要新写一行而不是放在一整行里边?
    这样是为了保持每行不多于 80 个字符,Python 程序员喜欢这样的风格。放在一整行里边也不是不行。
  4. input()raw_input()有何不同?
    input() 函数会把你输入的东西当做 Python 代码进行处理,这么做会有安全问题,你应该避开
    这个函数。
  5. 打印出来后我的字符串前面有个 u,像 u'35'这样。
    它表示 Python 告诉你你的字符串是 unicode。使用 %s就一切正常了。

习题12、提示别人

#!/usr/bin/python
# -*- coding:utf-8 -*-

age = raw_input("How old are you? ")
height = raw_input("How tall are you? ")
weight = raw_input("How much do you weight? ")

print "So, you're %r old, %r tall and %r heavy." % (
    age, height, weight)

小结

  1. %r%s该用哪个?
    记住%r 是 debug 专用,它显示的是原始表示出来的字符,而 %s是为了显示给用户。这个问题以后我就不再回答了,你要牢牢记住。这个问题是人们重复问的最多的问题,如果同一个问题要问很多遍,那说明你没记住你该记住的东西。别问了,现在我要求你必须记住。
  2. 写成print "How old are you?" , raw_input()为什么不行?
    你觉得可以,但 Python 不这么认为。我唯一能给你的答案是:这样就是不行。

习题13、参数、解包、变量

#!/usr/bin/python
# -*- coding:utf-8 -*-

#import 模组modules, 将python的功能引入到脚本中
from sys import argv

#解包unpack,含义:把avgy中的东西解包,将所有的参数一次赋予左边的变量名
script, first, second, third = argv

print "The script is called:", script
print "Your first variable is: ", first
print "Your second variable is: ", second
print "Your third variable is: ", third

小结

  1. 运行时错误信息 ValueError: need more than 1 value to unpack
    记住,有一个很重要的技能是注重细节。如果你仔细阅读并且完整重复了“你应该看到的结果”部
    分的命令参数,你就不会看到这样的错误信息。
  2. argvraw_input()有什么不同?
    不同点在于用户输入的时机。如果参数是在用户执行命令时就要输入,那就是 argv,如果是在
    脚本运行过程中需要用户输入,那就使用raw_input()
  3. 命令行参数是字符串吗?
    是的,就算你在命令行输入数字,你也需要用 int() 把它先转成数字,和在raw_input()
    里一样。
  4. 命令行该怎么使用?
    这个你应该已经学会了才对。如果你还没学会,就去读读我写的《命令行迫降式入门》吧
    http://cli.learncodethehardway.org/book/
  5. argvraw_input()不能合起来用。
    别想太多了。在脚本结尾加两行raw_input() 随便读取点用户输入就行了,然后再慢慢在脚
    本中玩玩这两个东东。
  6. 为什么 raw_input('? ') = x不灵?
    因为你写反了。照着我的写就没问题了。

习题14、提示和传递

#!/usr/bin/python
# -*- coding:utf-8 -*-

from sys import argv

script, user_name = argv
prompt = '>'

print "Hi %s, I'm the %s script." % (user_name, script)
print "I'd like to ask you a few questions."
print "Do you like me %s?" % user_name
likes = raw_input(prompt)

print "Where do you live %s?" % user_name
lives = raw_input(prompt)

print "What kind of computer do you have?"
computer = raw_input(prompt)

print """
Alright, so you said %r about liking me.
You live in %r. Not sure where that is.
And you have a %r computer. Nice.
""" % (likes, lives, computer)

习题15、读取文件

#!/usr/bin/python
# -*- coding:utf-8 -*-

from sys import argv

script, filename = argv

txt = open(filename)

print "Here's your file %r:" % filename
print txt.read()

print "Type the filename again:"
file_again = raw_input(">")

txt_again = open(file_again)

print txt_again.read()

小结

  1. txt = open(filename) 返回的是文件的内容吗?
    不是,它返回的是一个叫做“file object”的东西,你可以把它想象成一个磁带机或者DVD机。你
    可以随意访问内容的任意位置,并且去读取这些内容,不过这个 object 本身并不是它的内容。
  2. from sys import argv 是什么意思?
    现在能告诉你的是, sys 是一个代码库,这句话的意思是从库里取出 argv 这个功能来,供我
    使用。后面你会学到更多相关知识。
  3. 我把文件名写进去写成script, ex15_sample.txt = argv不过这样不灵。
    这么做是错的。把代码写成和我一模一样,然后从命令行运行,照着我的方式。你不需要把文件名
    放到代码中,而是让 Python 把文件名当做参数接纳进去。
  4. 为什么打开了两次文件没有报错?
    Python 不会限制你打开文件的次数,事实上有时候多次打开同一个文件是一件必须的事情。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值