当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]2月5日 周二 上午劳动,编写程序,下午偶尔浏览电视剧
帖子发表于 : 2008-02-14 15:56 
头像

注册: 2007-08-02 14:52
帖子: 425
地址: Beijing
系统: 15.10
送出感谢: 0 次
接收感谢: 0 次
2月5日 周二 上午劳动,编写程序,下午偶尔浏览电视剧
今天中午的时候,弟弟看一部电视剧,叫做《碧血剑》,是金庸的原著改编的,第十集中,有这样一个情节,女主人公(长得很漂亮)说官兵到处奸淫掳掠、无恶不作,早该死了,我觉得凭此一句话,就该被禁止放映,明显地对国家不满嘛!我们为什么要禁映完整版本的《色戒》?为什么禁映《苹果》,这些对国家没有什么危害,仅能令成年人微微一笑的影片,凭什么要禁止呢?倒是类似于这种出言不逊,反对国家,讽刺时事的片子,真该被禁映,这不很明显针对我们国家日日夜夜为人民服务的城管部队吗?我们英明强干的城管联席会议真该通电全国,凡是放映《碧血剑》的电视台,均可以通过英武的城管队伍捣毁,我们的城管可以打死一个扛着摄像机的人,相信更多的城管绝对可以打死一群扛着摄像机的人,电视台不就是由一群扛着摄像机的人组成的嘛!对了,那些另外的脑满肠肥的家伙,还用城管吗?有业余的临时工城管队伍就可以,正规的城管队伍绝对顶得上一只飞虎队了。
来吧,英明的城管,我支持你们向播放反对城管,讽刺城管的电视剧《碧血剑》播放台进攻,你们大打出手吧,反正,看热闹的不怕事大!
看到CCTV的将要开始春节联欢晚会的预告,突然想到,我们英勇无敌的城管为什么不好好地打死几个人,让我们过一个更加血色浪漫的红红的大年呢?期待你们,天下无双,四方不败的城管兄弟们,上!
中午练习用python写程序的时候,发现这样一个现象,如果在IDLE解释器中输入这样的文字:
for n in range(2,10):
for x in range(2,n):
if n % x==0:
print n,'equals',x,'*',n/x
break
else:
print n,'is a prime number'

结果是这样的:
3 is a prime number
4 equals 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals 2 * 3
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
8 equals 2 * 4
9 is a prime number
9 equals 3 * 3
这明显是不对的,9不是一个素数,不应该出来“9 is a prime number”这样的意义,而且,关于7的项目出来太多次了。
如果我们复制代码:
for n in range(2,10):
for x in range(2,n):
if n % x==0:
print n,'equals',x,'*',n/x
break
else:
print n,'is a prime number'
就可以得出:
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
这样的结论,这个是正确的,为什么呢?我百思不得其解,在终端中打开python就没有问题,为什么呢?我认为很有意思,不知道列位有没有知道的?
几经试验,我发现IDLE的缩进有些问题,只需要在else:这一行的前面摁下backspace键一次,退一格,就解决了问题。
还有一个问题,在IDLE中输入以下代码:
while True:
pass # busy-wait for keyboard interrupt
结果,IDLE就没有反应了,似乎是陷入了死循环,导致罢工了。在普通的终端中输入以上代码就没有问题,如果有问题,只需要按下ctrl+c中断程序就恢复正常了。
按照一个案例,我输入了以代码:

def fib2(n): # return Fibonacci series up to n
"""Return a list containing the Fibonacci series up to n."""
result=[]
a,b=0,1
while b<n:
result.append(b)
a,b=b,a+b
return result
在enter之后,输入:
f100=fib2(100)
>>> f100
得出的结果是:[1]
而我复制案例中的:
def fib2(n): # return Fibonacci series up to n

"""Return a list containing the Fibonacci series up to n."""

result = []

a, b = 0, 1

while b < n:

result.append(b) # see below

a, b = b, a+b

return result


f100 = fib2(100) # call it

f100 # write the result

得出的结果是:[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
在命令行中用python编写也能得出以上结论,难道,我的IDLE有问题?
几经查证,IDLE好像对于python的缩进不是很清楚,我只需要在IDLE中把return result这一行的最前面用backspace键删除一下,得出的结论就是正确的[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89],看来,这个解释器还是有点不准,有什么办法校正呢?
有没有人可以请教一下?
几天之后,我找到这样几句话:
“Python的解释器不会从多行的文档字符串中去除缩进,所以必要的时候应当自己清除缩进。这符合通常的习惯。第一行之后的第一个非空行决定了整个文档的缩进格式。(我们不用第一行是因为它通常紧靠着起始的引号,缩进格式显示的不清楚。)留白“相当于”是字符串的起始缩进。每一行都不应该有缩进,如果有缩进的话,所有的留白都应该清除掉。留白的长度应当等于扩展制表符的宽度(通常是8个空格)。”
大概,这样可以解释我之前的错误了吧!?


_________________
过往惊艳之谈,青春陨落之地
Mac Love Me
http://maclove.me/


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-06-29 12:01 

注册: 2007-04-16 22:21
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
计费程序:
def pay(x):
if x<1000&x>0:
pay=50
else:
i=1
while (x-500)-500*i>0:
i=i+1
pay=50+5*i
return pay
在SHELL里输入:
>>>import shiyan
>>>print pay(3000)
假如return前面不删除一个空格的话,得到的答案是:(‘’,75),删除一个空格是75


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-06-29 12:06 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
拿第一个例子讲, 两种缩进都是正确的, else 可以是 if 的也可以是 for 的.
所以要自己决定..


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译