2016-10-04 46 views
0

对于一个任务,如果字符等于一个偶数,我想用一个用户输入做一个三角形。三角形假设打印高达5行,其左侧应该是字符串的左半部分,而三角形的右侧应该是字符串的右侧。从用户输入创建一个三角形字符

Example of what the triangle is suppose to look like

问题是我无法弄清楚如何划分了我的一半三角形没有硬编码,或如何正确地显示没有环的白色空间(未在分配允许)。现在,如果我把在 “AB”,它将返回:

 aabb 
    aabbaabb 
    aabbaabbaabb 
    aabbaabbaabbaabb 
aabbaabbaabbaabbaabb 

相反的:

  aabb 
     aaaabbbb 
    aaaaaabbbbbb 
    aaaaaaaabbbbbbbb 
aaaaaaaaaabbbbbbbbbb 

这里是我的代码:

#GET Users String 
userString = input("Please enter a string with a value of 7 or less characters: ") 

#CALCULATE IF userString is less than or equal to 7 and is even 
if len(userString) <= 7 and len(userString) % 2 == 0: 
    print (" " * 5 + userString) 
    print(" " * 4 + userString * 2) 
    print(" " * 3 + userString * 3) 
    print(" " * 2 + userString * 4) 
    print(" " + userString * 5) 

#CALCULATE IF userString is less than 7 but and off 
elif len(userString) <=7 and len(userString) % 2 == 1: 
    print("You are odd") 

#CALCULATE IF userString is over 7 characters 
else: 
    print ('The string is too long. \nGood-bye!') 
+0

如果你不允许使用循环,我想你应该使用递归... – Julien

回答

2

这里是你如何能做到这一点:

def print_next(st, index): 
    if index < 6: # have not reached 5 - print offset and string 
     offset = 6-index 
     print ' '*offset+st 
     index=index+1 # increase counter 
     print_next((st[0:2]+st[-2:len(st)])*index,index) # recursively go next 


print_next('aabb',1) # initial call with index set to 1 
0

我认为你可以使用一个堆栈每行都有,所以你可以很容易地得到一个三角形的输出。另外,因为你不能使用循环,所以我的建议是递归的。

public_stack = [] 

def my_func(original_str, line_count, space_num): 
    if(line_count == 0): 
     return 
    times = line_count * 2 
    half_length = len(original_str)/2 
    left_str = original_str[:half_length] * times 
    right_str = original_str[half_length:] * times 
    space_str = ' ' * space_num 
    complete_str = space_str + left_str + right_str 
    global public_stack 
    public_stack.append(complete_str) 
    space_num += len(original_str) 
    line_count -= 1 
    return my_func(original_str,line_count,space_num) 

if __name__ == '__main__': 
    original_str = 'ab' 
    line_count = 5 
    space_num = 0 
    my_func(original_str,line_count,space_num) 

    global public_stack 
    for i in range(len(public_stack)): 
     line = public_stack.pop() 
     print line