Python: 每日一题 62
本帖最后由 ooxx7788 于 2017-6-9 23:44 编辑写出这个diamond函数吧!如果是偶数和负数则返回None。参数n为中间最长的*的数量。
很多朋友都喜欢直接看答案,但说真的,看10题的答案,也不如你写一题的作用大。
**** Hidden Message ***** 本帖最后由 jerryxjr1220 于 2017-6-9 20:28 编辑
def diamond(n):
if not n%2: return None
blank = (n-1)//2
s = ''
for i in range(1, n+1, 2):
s += ' '*blank+'*'*i+'\n'
blank -= 1
blank = 1
for i in range(n-2, 0, -2):
s += ' '*blank+'*'*i+'\n'
blank += 1
return s
*
***
*****
*******
*********
***********
`*************
***************
`*************
***********
*********
*******
*****
***
* 本帖最后由 SixPy 于 2017-6-9 20:53 编辑
>>> def diamond(n):
if n<0 or ~n&1: return
ls=[('%%%ds'%(n//2-i//2+i))%('*'*i)for i in range(1,n+1,2)]
ls+=ls[-2::-1]
return '\n'.join(ls)
>>> print(diamond(15))
*
***
*****
*******
*********
***********
_*************
***************
_*************
***********
*********
*******
*****
***
*
>>> print(diamond(16))
None
>>> print(diamond(-17))
None SixPy 发表于 2017-6-9 20:48
if n<0 or ~n&1: return
你就等着给人问这一句什么意思吧! ooxx7788 发表于 2017-6-9 22:13
你就等着给人问这一句什么意思吧!
如果是偶数和负数则返回None。
不就是题目设定的条件嘛~ def diamond(num):
if num % 2 == 0 or num < 0:
return
string = ''
for i in range(1, num + 1, 2):
string += ('*' * i).center(num) + '\n'
for i in range(num - 2, 0, -2):
string += ('*' * i).center(num) + '\n'
return string
num % 2 == 0写成~num&1,运算速度会快些。 做出来了,不过不是太精简。
def diamond(n):
if(n%2 == 0 or n<0):
print "输入错误"
return None
lis = list(filter(lambda x:x%2!=0,range(1,n+1)))
sp = 30
for i in lis:
print(" "*sp,end="")
print("*"*i)
sp -= 1
lis.pop()
sp += 2
for i in reversed(lis):
print(" "*sp,end="")
print("*"*i)
sp += 1
n = int(input("请输入要多少行*:"))
diamond(n)
本帖最后由 ooxx7788 于 2017-6-9 23:37 编辑
可乐爱宅着 发表于 2017-6-9 23:34
做出来了,不过不是太精简。
sp=30是什么意思啊。哦知道了,你这个不是输出在边上的。 ooxx7788 发表于 2017-6-9 23:36
sp=30是什么意思啊。哦知道了,你这个不是输出在边上的。
空格。
jerryxjr1220 发表于 2017-6-9 20:21
为什么我看你的输出,第7,第9多了两个` 本帖最后由 SixPy 于 2017-6-10 01:11 编辑
用format的居中格式,更简单
def diamond(n):
if n<0 or ~n&1: return
ls=[('{: ^%d}'%n).format('*'*i)for i in range(1,n+1,2)]
return '\n'.join(ls+ls[-2::-1])
str自带 center 方法,何必舍近求远~
def diamond(n):
if n<0 or ~n&1: return
ls=[('*'*i).center(n)for i in range(1,n+1,2)]
return '\n'.join(ls+ls[-2::-1])
{:10_245:} def diamond(n):
b = 1
if n % 2 == 0 or n < 0:
return None
for x in range(1, n + 1, 2):
print(((n - x) // 2) * ' ' + x * '*')
for y in range(n - 2, 0, -2):
print(b * ' ' + y * '*')
b += 1
自己想不出来{:10_269:} 看了评论就懂了{:10_266:} {:9_241:} def diamond():
count = int(input('请输入一个基数:'))
if count%2==0 or count==0:
print('输入错误')
maxcount=count
for a in range(2,count,4):
if maxcount-a>0:
maxcount=maxcount-a
else:
break
spe=maxcount//2
start=1
for i in range(spe,-1,-1):
print(' '*i+'*'*start)
if start+2<=maxcount:
start+=2
else:
break
yama 发表于 2017-6-11 09:56
你有自己运行过吗? 中规中矩的程序:
def diamond(n):
if n%2 == 0 or n<0:
return None
else:
for i in range(0, n//2+1):
print ' '*(n//2-i), '*'*(2*i+1)
for i in range(1, n//2+1):
print ' '*i, '*'*(n-2*i) def diamond(n):
l = ""
if n%2==1 and n>0:
for i in range(1,n+1,2):
l += " "*int((n-i)/2) + "*"*i + " "*int((n-i)/2)+"\n"
for x in range(n+2,2*n+1,2):
l += " "*int((x-n)/2) + "*"*(x-2*(x-n)) + " "*int((x-n)/2)+"\n"
else:
l = None
return l
for n in [-5,3,14,15]:
print(diamond(n))
输出
None
*
***
*
None
*
***
*****
*******
*********
***********
*************
***************
*************
***********
*********
*******
*****
***
*
页:
[1]
2