返回信息流在做一道题问题如下:
print "%s took clay from %s" % (Aname,Bname)
的输出结果是Bill took clay from Will
print "%s took clay from %s." % (Aname,Bname)
的输出结果是
Bill
took clay from Will
.
为什么加了句号在名字后面多了换行,我在自己的环境里是正常的输出Bill took clay from Will.但是那个网站里就多了换行,试了strip('\n')等都不行,求助大神~~~
题目是计蒜客挑战难题的第六课 http://ti.jisuanke.com/problem/6 如下:
第6题:泥塑课
尝试次数 10411次 通过率 21.7% 时间限制 1000 ms 内存限制 10000 K
小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过250立方厘米的等量橡皮泥,教大家做泥塑。在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥,于是她决定,在正式开始做泥塑前,让大家把手里的橡皮泥都捏成一个立方体,并且测量手里捏好的橡皮泥的长、宽和高。这样,她就可以知道谁被谁抢了橡皮泥了。
小米老师在不同的学期可能会带一个班或者同时带多个班,因此输入数据可能有一组或者多组。每组输入数据的第一行为一个整数n,表示了这个班的小朋友数,之后n行每行包括了由空格分隔的三个整数和一个字符串,那个字符串表示了小朋友的名字,前面三个整数则是这个学生手里橡皮泥块的长、宽、高数据。按照幼儿园的规定,每个班最多有9个小朋友,最少也要有2个小朋友,每个小朋友在学籍系统中的名称不超过8个字符长。当出现一个班级的小朋友数为-1时,表示没有更多的班级了。
输出行数与小米老师带的班级数相同,形式为“X took clay from Y.”,具体请参考样例输出。
样例输入
3
10 10 2 Jill
5 3 10 Will
5 5 10 Bill
4
2 4 10 Cam
4 3 7 Sam
8 11 1 Graham
6 2 7 Pam
-1
样例输出
Bill took clay from Will.
Graham took clay from Cam.
我写的程序如下:
classlist=[]
classdict={}
def calculate(classlist):
#print classlist
for i in range(len(classlist)):
totalnum=0
average=0
Aname=''
Bname=''
for q in classlist[i]:
totalnum=int(classlist[i][q])+totalnum
average=totalnum/len(classlist[i])
for j in classlist[i]:
if(classlist[i][j]>average):
Aname=j
elif(classlist[i][j]<average):
Bname=j
print "%s took clay from %s." % (Aname,Bname)
def datainput():
while True:
n=input()
if n==-1:
break
else:
classdict.clear()
for i in range(n):
studentdata=raw_input()
datalist=studentdata.split(' ')
number=int(datalist[0])*int(datalist[1])*int(datalist[2])
name=datalist[3]
classdict[name]=number
#print classdict
classlist.append(classdict.copy())
#print classlist
calculate(classlist)
if __name__=='__main__':
datainput()
就是标红地方的问题,输出是:
Bill
took clay from Will
.
多了好几个换行。
这是一条镜像帖。来源:北邮人论坛 / python / #4957同步于 2015/1/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
加了句号换行的问题
ssssssss
2015/1/22镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
计蒜客http://ti.jisuanke.com/problem/6
但是如果不加“.”输出就没有换行啊,而且这个程序我在linux里运行加了“.”是没有换行的啊……
print "%s took clay from %s" % (Aname,Bname)
的输出结果是Bill took clay from Will
【 在 Chon 的大作中提到: 】
: 哪个网站?
: 我猜 Aname 和 Bname 里包含换行,和 . 没有什么关系。
看到了,Aname和Bname都是从标准输入读入的吧?是不是不小心把换行符读进去了?
【 在 ssssssss 的大作中提到: 】
: 计蒜客http://ti.jisuanke.com/problem/6
: 但是如果不加“.”输出就没有换行啊,而且这个程序我在linux里运行加了“.”是没有换行的啊……
: print "%s took clay from %s" % (Aname,Bname)
: ...................
Aname和Bname是程序里赋值的变量,不是输入的
Aname=j这样的,j是字典里的key值
【 在 Chon 的大作中提到: 】
: 看到了,Aname和Bname都是从标准输入读入的吧?是不是不小心把换行符读进去了?
字典里的key值不也是来源于程序的输入。。。
【 在 ssssssss 的大作中提到: 】
: Aname和Bname是程序里赋值的变量,不是输入的
: Aname=j这样的,j是字典里的key值
刚才简单写了一下,通过了。
def main():
while(True):
n = input()
if n < 0:
break
total = 0
kids = {}
for i in range(n):
line = raw_input()
x = int(line.split()[0])
y = int(line.split()[1])
z = int(line.split()[2])
name = line.split()[3]
clay = x * y * z
total += clay
kids[name] = clay
average = total / n
aname = ""
bname = ""
for name in kids.keys():
if kids[name] > average:
aname = name
elif kids[name] < average:
bname = name
print "%s took clay from %s." % (aname, bname)
if __name__ == '__main__':
main()
比较简陋,将就看看吧。
你的输出
aname = ""
bname = ""
for name in kids.keys():
if kids[name] > average:
aname = name
elif kids[name] < average:
bname = name
print "%s took clay from %s." % (aname, bname)
这里和我写的没区别啊,为什么你的能过
【 在 Chon 的大作中提到: 】
: 刚才简单写了一下,通过了。
: [code=py]
: def main():
: ...................