iT邦幫忙

0

python基礎疑問 設計費式數列 換行問題

  • 分享至 

  • xImage

各位高手好
小弟用工作閒暇時間自學python,其中一題練習為:
生成費波納契數列前20個數
我自己的寫的程式如下

import os
a = 0
b = 1
for x in range(20):
    a = b
    b = a+b 
    print(a )
os.system('pause')

可得出結果
https://ithelp.ithome.com.tw/upload/images/20230424/20159793aKSJ0PZmBk.png

但我希望能得到單純一行的數列,所以參考文章附的參考答案修改後得到下面的程式碼

https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/code/Day05/fibonacci.py

import os
a = 0
b = 1
for _ in range(20):
    a, b = b, a + b
    print(a, end=' ')
os.system('pause')

然而得到的結果如下

https://ithelp.ithome.com.tw/upload/images/20230424/20159793YKr7JUKvT7.png

並沒有顯示任何的內容
我將第六行的end去掉後,能顯示一樣的內容

import os
a = 0
b = 1
for _ in range(20):
    a, b = b, a + b
    print(a)
os.system('pause')

https://ithelp.ithome.com.tw/upload/images/20230424/201597933JMGw4sSvl.png

請問是我哪邊設定有問題呢?還是我搞錯了end的用法。
感謝各位高手

hokou iT邦好手 1 級 ‧ 2023-04-24 15:40:39 檢舉
我看是可以的,但我不知道為什麼要先按任意鍵之後才出現
直接叫OPEN AI教你寫程式會比較快
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
re.Zero
iT邦研究生 5 級 ‧ 2023-04-24 21:25:34
最佳解答

你遇到的是 Python 的 print() 基於 buffer 機制而發生的現象,處理方式能用 flush=True (即 print(a, end=' ', flush=True))。

或者,用下段程式碼的方式亦可:

import os
a, b = 0, 1
for _ in range(20):
    a, b = b, a + b
    print(a, end=' ')
print() ## 這是用以更新畫面用; 若想保險起見而用上 `flush=True` 亦可;
os.system('pause')

有興趣可去看 sys.stdout 的敘述, 還有 What does print()'s flush do? 的討論。
(或是 Google Python print flush)


P.s. 你的:

import os
a = 0
b = 1
for _ in range(20):
    a, b = b, a + b
    print(a, end=' ')
os.system('pause')

沒顯示就關閉視窗, 是因為 os.system('pause') 時, Python 尚未輸出資料至螢幕 (原因已於前敘); 而在按下任意鍵繼續後, Python 才輸出資料至螢幕, 並馬上關閉視窗, 所以你會誤以為沒有顯示。

我是因為習慣開個 Win-Cmd (命令提示字元),用 python myScript.py 方式執行程式碼, 才猜測你遇到是這現象。

jidrwm iT邦新手 5 級 ‧ 2023-04-25 14:53:28 檢舉

原來是這樣,加一行print或是flush=True後確實能正常跑出描述了
貼出的文章我稍後會拜讀的
感謝你的回答

0
suncuxiapple
iT邦新手 1 級 ‧ 2023-04-24 18:51:52

你可以問OPEN AI很方便

jidrwm iT邦新手 5 級 ‧ 2023-04-25 14:54:18 檢舉

感謝你的意見
我會有空了解一下open ai的使用方式

我要發表回答

立即登入回答