我正在使用python IDE wing 4.1版
我正在尝试编写一个只有1个输入的函数,它将是一个整数并返回下一个星形:
* ** ***
我尝试使用以下代码,但它提供了另一种形式:
from math import *
from string import *
def tri_1(n):
x=n*'*'
i=0
while i<5:
x=i*'*'
i=i+1
print x
n=input()
tri_1(n)
答案 0 :(得分:0)
您需要更仔细地考虑算法应该做什么。对于1
到n
范围内的每个整数,您希望打印n-1
个空格,后跟n
个星号,那么硬编码的5
做什么那里?你为什么没有任何空格?鉴于您知道循环次数,为什么要使用while
而不是for
?
实现这一目标的最有效方法是使用内置字符串方法rjust
,它用空格填充提供的字符串:
def tri_1(n):
for i in range(1, n+1):
print(str.rjust("*"*i, n))
答案 1 :(得分:-1)
由于这似乎是一项基本的编程练习,我认为我们不应该过多依赖内置函数。以下功能可以解决这个问题。
def print_triangle(n):
for i in range(1, n+1):
for j in range(n-i):
print(' ', end='')
for k in range(i):
print('*', end='')
print()
调用print_triangle(3)
将打印
*
**
***
这个功能稍短,但做同样的事情。
def print_triangle2(n):
for i in range(1, n+1):
print(' '*(n-i), end='')
print('*'*i)
希望有所帮助。
编辑:
谢谢Jon,我已经习惯了Python 3的print语句,我忘了end=''
部分除非你使用的是Python 3才能工作。这应该适用于Python 2.7:
import sys
def print_triangle(n):
for i in range(1, n+1):
for j in range(n-i):
sys.stdout.write(' ')
for k in range(i):
sys.stdout.write('*')
sys.stdout.write('\n')
def print_triangle2(n):
for i in range(1, n+1):
sys.stdout.write(' '*(n-i))
sys.stdout.write('*'*i)
sys.stdout.write('\n')