2016-10-04 47 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