Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python3.x-使用字符串打印没有填充的菱形_Python 3.x - Fatal编程技术网

Python 3.x Python3.x-使用字符串打印没有填充的菱形

Python 3.x Python3.x-使用字符串打印没有填充的菱形,python-3.x,Python 3.x,我试图创建一个函数,diamond(num),其中num是由前/后斜杠和空格组成的“diamond”的大小。 例如 但是,我觉得我的代码太复杂了。有没有更简单的方法 def reverse(value,end): if end %2 != 0: return None MAX = end/2 START = (end/2)-1 turningPoint = (end/2)+1 numbers = {} second = -MAX

我试图创建一个函数,diamond(num),其中num是由前/后斜杠和空格组成的“diamond”的大小。 例如

但是,我觉得我的代码太复杂了。有没有更简单的方法

def reverse(value,end):
    if end %2 != 0:
        return None
    MAX = end/2
    START = (end/2)-1
    turningPoint = (end/2)+1
    numbers = {}
    second = -MAX
    for x in range(1,end+1):
        if x < turningPoint:
            numbers[x] = START-(2*(x-1))
        if x >= turningPoint:
            numbers[x] = second
    return value + numbers[value]


def diamond(length):
    output = ''
    MAX = length
    length *= 2
    if length == 0 or length % 2 != 0:
        return None
    for x in range(1,length+1):
        var = int(reverse(x,length))
        if x < MAX+1:
            output += ' '*var + '/' + ' '*((MAX-var)*2) + '\\' + '\n'
        else:
            output += ' '*var + '\\' + ' '*((MAX-var)*2) + '/' + '\n'
    return print(output)
def反转(值,结束):
如果结束%2!=0:
一无所获
最大值=结束/2
开始=(结束/2)-1
转折点=(结束/2)+1
数字={}
秒=-MAX
对于范围内的x(1,结束+1):
如果x<转折点:
数字[x]=开始-(2*(x-1))
如果x>=转折点:
数字[x]=秒
返回值+数字[值]
def菱形(长度):
输出=“”
最大值=长度
长度*=2
如果长度==0或长度%2!=0:
一无所获
对于范围(1,长度+1)内的x:
var=int(反向(x,长度))
如果x
这将有助于:

def printDiamond(n):
       upperHalf = ""
       lowerHalf = ""

       for row in range(1, n + 1):
              outerSpaces = n - row
              innerSpaces = 2*row - 2

              rowTempl = outerSpaces * " " + "{c1}" + innerSpaces * " " + "{c2}" + "\n"

              upperHalf += rowTempl.format(c1='/', c2='\\')
              lowerHalf = rowTempl.format(c1='\\', c2='/') + lowerHalf

       print(upperHalf + lowerHalf)

printDiamond(1)    
printDiamond(2)
printDiamond(5)
printDiamond(7)
输出:

/\
\/

 /\
/  \
\  /
 \/

    /\
   /  \
  /    \
 /      \
/        \
\        /
 \      /
  \    /
   \  /
    \/

      /\
     /  \
    /    \
   /      \
  /        \
 /          \
/            \
\            /
 \          /
  \        /
   \      /
    \    /
     \  /
      \/

我可以推荐以下功能吗

def get_diamond(size):
    return '\n'.join([' ' * (size - i - 1) + '/' + '  ' * i + '\\'
                      for i in range(size)] +
                     [' ' * (size - i - 1) + '\\' + '  ' * i + '/'
                      for i in reversed(range(size))])
您可以这样使用它:

for i in range(5):
    print(get_diamond(i + 1))
运行代码后,屏幕应如下所示:

/\
\/
 /\
/  \
\  /
 \/
  /\
 /  \
/    \
\    /
 \  /
  \/
   /\
  /  \
 /    \
/      \
\      /
 \    /
  \  /
   \/
    /\
   /  \
  /    \
 /      \
/        \
\        /
 \      /
  \    /
   \  /
    \/
如果您不介意更复杂的内容,此函数与第一个函数相同:

def get_diamond(s):
    return '\n'.join(' ' * (s - w - 1) + a + '  ' * w + z for a, z, r in (
        ('/', '\\', range(s)), ('\\', '/', reversed(range(s)))) for w in r)

不返回预期结果:/
def get_diamond(s):
    return '\n'.join(' ' * (s - w - 1) + a + '  ' * w + z for a, z, r in (
        ('/', '\\', range(s)), ('\\', '/', reversed(range(s)))) for w in r)