今天中午有个朋友问我三个python程序,中午也没什么事,就帮他看看,随便瞥了下题目,觉得不难,题目是这样的:
1 删除一个list
[1,2,3,-3,6,-1,-3,1]中的所有负数,用以下程序实现,两个负数在一起时,会出现错误,原因在于remove移除一个list中的数之后会将后面的数前移,以至于for循环时会遗漏某些数,要求改写程序,程序是这样的:
def remove_negs(num_list):
"Remove the
negative numbers from num list."
for item in
num_list:
if item < 0:
num_list.remove(item)
for item in
num_list:
print (item, end=" ")
remove_negs([1,2,3,-3,6,-1,-3,1])
2 输出以下形状的三角形
T
TT
TTT
TTTT
TTTTT
TTTTTT
TTTTTTT
3 输出以下形状的三角形
T
TT
TTT
TTTT
TTTTT
TTTTTT
TTTTTTT
乍看这是三个题,都不怎么难,可是因为对于python不怎么熟悉(只是用过),却也是花了些心思的。
第一道题,我想了想不能由于remove函数的特性不能用键值来遍历,删除,那就只好用索引值来遍历、删除,解决方案如下:
def remove_negs(num_list):
"Remove the
negative numbers from num list."
i = 0
while i
< len(num_list):
if num_list[i] < 0:
num_list.remove(num_list[i])
else:
i = i + 1
for item in
num_list:
print (item, end=" ")
remove_negs([1,2,3,-3,6,-1,-3,1])
自认为这种解决方案是很简单,有很好的。
第二道题,第三道题我很快写出了代码:
def Output():
for i in
range(1, 8):
j = 1;
while j <= i:
print("T", end="")
j = j + 1
print("")
Output()
#第八道题
def Output():
for i in
range(1, 8):
j = 1;
while j <= 7 - i:
print(" ", end="")
j = j + 1
j = i
while j > 0:
print("T", end="")
j = j - 1
print("")
Output()
可是在朋友的机子上运行的时候出错,报的错误是不识别end。中午在做这两道题的时候,我就上网查了print函数,print函数一般默认输出之后会自动加上换行,要想不换行,在python2.x中是print
"hello",(即在输出的最后加一个逗号)在python3.x中是print("helllo",
end="")(以end来指明以什么结尾)。所以我很快用逗号来代替end,可是输出结果是,逗号虽然能使得它不换行,可是,它又会默认输出一个空格,结果又不如人意,最后在网上百度找到了答案,解决了问题:
#第七道题
import sys
def Output():
for i in
range(1, 8):
j = 1;
while j <= i:
sys.stdout.write("T")
j = j + 1
print("")
Output()
#第八道题
import sys
def Output():
for i in
range(1, 8):
j = 1;
while j <= 7 - i:
sys.stdout.write(" ")
j = j + 1
j = i
while j > 0:
sys.stdout.write("T")
j = j - 1
print("")
Output()
问题解决之后,边真觉得蛮有成就感的,我这个不怎么学过python的人,python程序却一直是会写一些的,这也是因为我觉得语言是一通百通的。其实,除了成就感,我最大的感触是,第一,无论是遇到什么问题,都要自己动手,想尽各种办法,在网上找资料去解决,最终会收获很多。第二,就是网上的这些资源,让人真心觉得是很头痛,大家都是抄来抄去,对于一个问题,答案都是一样的,可是没有一个是真正解决问题的,真是越看越让人生气。同时也让我想起来文本相似性检测的一个应用,网上的资源千篇一律,相似的很多,怎样过滤一些相同的内容,让用户更快捷的找出自己所需要的内容,今天的经历告诉我未来或许这真的是很有必要去做的一件事。