攝影或3C

Python TQC考題510: 星號輸出;pandas.DataFrame 如何轉為str? .to_string( index=False, header=False)

題目:

範例輸入/輸出:

code:

# -*- coding: utf-8 -*-
"""
Created on Sat Nov 18 23:01:46 2023

@author: SavingKing
"""

# 读取第一行并解析行
first_line = input("请输入rows和columns,用空格分隔(例如 '4 7'):\t")
rows, cols = map(int, first_line.split())
#4 , 7
# 根据行数读取后续的每一行
data = []
for i in range(rows):
    row_data = input(f"请输入第 {i+1} row的数据:\t")
    data.append(row_data)

# 现在 'data' 变量包含了所有输入的行
data2D = [strr.split() for strr in data]
import pandas as pd
import numpy as np

df = pd.DataFrame(data2D)
"""
   0  1  2  3  4  5  6
0  0  0  0  1  0  0  0
1  0  0  1  1  1  0  0
2  0  1  1  1  1  1  0
3  1  1  1  1  1  1  1
df.shape
Out[129]: (4, 7)

type(df[0][0])
Out[130]: str
"""
zeros = np.zeros(shape = df.shape)
"""
array([[0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0.]])
"""

df_new = pd.DataFrame(zeros).astype(str)

lisCol = df.columns.tolist()

r,c = df.shape
#4 , 7

#四邊的Series
ser0 = df[0]
ser6 = df[ c-1 ]
ser_0row = df.iloc[0,:]
ser_3row = df.iloc[r-1,:]

bool_mask = ser0 == "1"
df_new.loc[bool_mask, 0] = '*'
bool_mask = ser0 == "0"
df_new.loc[bool_mask, 0] = ' '

bool_mask = ser6 == "1"
df_new.loc[bool_mask, c-1] = '*'
bool_mask = ser6 == "0"
df_new.loc[bool_mask, c-1] = ' '

bool_mask = ser_0row == "1"
df_new.iloc[0, bool_mask] = '*'
bool_mask = ser_0row == "0"
df_new.iloc[0, bool_mask] = ' '

bool_mask = ser_3row == "1"
df_new.iloc[r-1, bool_mask] = '*'
bool_mask = ser_3row == "0"
df_new.iloc[r-1, bool_mask] = ' '

for rr in range(1,r-1):
    for cc in range(1,c-1):
        if df.iloc[rr, cc] == '1' and (
            df.iloc[rr, cc-1] == '0' or 
            df.iloc[rr, cc+1] == '0' or 
            df.iloc[rr-1, cc] == '0' or 
            df.iloc[rr+1, cc] == '0'):
            df_new.iloc[rr, cc] = "*"

        else:
            df_new.iloc[rr,cc] = " "
            
print(df_new.to_string(index=False, header=False))

輸出結果:

推薦hahow線上學習python: https://igrape.net/30afN

看起來是DataFrame預設就有空白
排列起來不像題目這麼緊密
用雙層for迴圈讀取DF的每一個value
code:

for rr in range(r):
    for cc in range(c):
        print(df_new.iloc[rr,cc],end="")
    print()  # 在每行的末尾添加一个换行符

輸出結果:

看起來輸出跟答案一樣
但檢查結果就是
答案錯誤!
將input() 中的提示文字刪除後
通過測試

推薦hahow線上學習python: https://igrape.net/30afN

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡