iT邦幫忙

1

關於python解題程式碼的問題

  • 分享至 

  • xImage

題目:使用python語言寫一個無窮波浪,然後按下ctrl + c停止

    ********
   ********
  ********
 ********
********
 ********
  ********
   ********
    ********

以下為我的程式碼:

import time, sys
indent = 0 #how many space to indent
indentIncreasing = True

try:
    while True: #The main program loop.
        print(' ' * indent, end='')
        print('********')
        time.sleep(0.1) #pause for 1/10 of a second.

    if indentIncreasing:
        #increase the number of spaces:
        indent = indent + 1
        if indent == 20:
            #change direction
            indentIncreasing = False
        else:
            #Decrease the number of space:
            indent = indent - 1
            if indent == 0:
                #change direction:
                indentIncreasing  = True
except KeyboardInterrupt:
    sys.exit()

用我的程式碼輸出為寬八顆星,長無窮大的長方形,
請問是哪裡出錯了呢?找了很久還是找不到問題...
謝謝

你的邏輯判斷式,寫的方式, 過於繁瑣.
你可以試試看, 增加一個方向變數, indent 為 >= 20 時, 方向變數為 -1,
indent = indent + 方向變數. indent 為 <= 0 時, 方向變數為 1. 還是 indent = indent + 方向變數. 中間一般的值時,就不用判斷.我只是舉例,細節部分,你再調整.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
wrxue
iT邦好手 1 級 ‧ 2021-08-15 16:49:51
最佳解答

程式碼是不是排版有排錯?

    if indentIncreasing:
        #increase the number of spaces:
        indent = indent + 1
        if indent == 20:
            #change direction
            indentIncreasing = False

上面這段程式碼應該縮排進去變成以下

import time, sys
indent = 0 #how many space to indent
indentIncreasing = True

try:
    while True: #The main program loop.
        print(' ' * indent, end='')
        print('********')
        time.sleep(0.1) #pause for 1/10 of a second.
        if indentIncreasing:
            #increase the number of spaces:
            indent = indent + 1
            if indent == 20:
                #change direction
                indentIncreasing = False
        else: 
            #Decrease the number of space:
            indent = indent - 1
            if indent == 0:
                indentIncreasing  = True
except KeyboardInterrupt:
    sys.exit()

看更多先前的回應...收起先前的回應...
rooit iT邦新手 5 級 ‧ 2021-08-15 16:57:55 檢舉

似乎還是有錯?輸出變成空格很多

wrxue iT邦好手 1 級 ‧ 2021-08-15 17:04:14 檢舉

https://ithelp.ithome.com.tw/upload/images/20210815/20117357iEzriIxTnY.png
我看起來很正常啊

rooit iT邦新手 5 級 ‧ 2021-08-15 17:24:00 檢舉

最多只能有四個空格

wrxue iT邦好手 1 級 ‧ 2021-08-15 17:27:17 檢舉

程式就這樣寫,已經幫你改成無窮波浪了,沒能力自己改為 4 個空格嗎?

if indent == 20:

改為

if indent == 4:
rooit iT邦新手 5 級 ‧ 2021-08-15 19:31:38 檢舉

謝謝你!/images/emoticon/emoticon41.gif

wrxue iT邦好手 1 級 ‧ 2021-08-15 20:06:38 檢舉

若問題解決的話,請選出最佳解答結束此問題哦~

1
一級屠豬士
iT邦大師 1 級 ‧ 2021-08-15 17:33:11

寫了個簡化版的,你觀察看看.當然這個並不是最好的.方法有很多,你可以多嘗試.
在做無窮的版本之前,可以先做簡化版本的,方便觀察.

#!/usr/bin/env python3

indent = 0
leftright = 1

for i in range(60):
  print(' ' * indent, end='')
  print('*')
  
  if indent >= 20:
    leftright = -1
  if indent <= 0:
    leftright = 1
  
  indent = indent + leftright

rooit iT邦新手 5 級 ‧ 2021-08-15 19:32:03 檢舉

好的謝謝!

1
froce
iT邦大師 1 級 ‧ 2021-08-15 22:10:15
indent = 9
increasing = -1

bound = abs(indent) + abs(increasing)

while True:
    if abs(indent + increasing) >= bound:
        increasing = -increasing

    print(" " * abs(indent) + "****")
    indent += increasing

這樣就好了吧...

我要發表回答

立即登入回答