When Comma-Separated Values Met Regular Expression

新工作跟歐洲人打交道,怪事發生,才第一次知道:https://zh.wikipedia.org/zh-tw/小數點

不同地區用不同的符號來表達小數點。即,其它語言與文化中表示小數與整數部分割區隔的未必是「點」,所以它的英文名字是decimal separator或decimal mark。國際上使用阿拉伯數字國家與地區主要採用兩種小數點符號:「句點」和「逗號」。漢語地區和大多的英語地區都使用「句點」,但是大多的其他歐洲國家和其前殖民地都使用「逗號」。

問題

有一個壞掉的CSV秀逗號小數,試問單兵如何處置?

解法

觀察皆為六位小數,例如:3,141592,這時就是要RE啊?不然要幹嘛?

import rewith open(source_csv_path) as s, open(target_csv_path, 'w') as t:
lines = s.readlines()
for line in lines:
t.write(re.sub(',(\d{6})', r'.\1', line))

被RE校正回歸的CSV就可以如常讀成DataFrame想幹嘛就幹嘛了!

import pandas as pddf = pd.read_csv(target_csv_path)

就用這首歌告別被疫情和工作沒收的這個夏天吧

https://youtu.be/97VRTSm25Qw

something personal to say…

If you run this program:

print('HELLo world')
print(x1001000)
print(5566)

Program stops at line 2 and returns error message:

HELLo world
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(x1001000)
NameError: name 'x1001000' is not defined

Errors detected during execution are called exceptions and are not unconditionally fatal: you will…

第9類:檔案與異常處理

902 資料加總

請撰寫一程式,讀取read.txt的內容(內容為數字,以空白分隔)並將這些數字加總後輸出。檔案讀取完成後要關閉。

輸入說明

讀取read.txt的內容(內容為數字,以空白分隔)

輸出說明

總和

範例輸入

範例輸出

660

💯正解💁‍♀️

904 資料計算

請撰寫一程式,讀取read.txt(每一列的格式為名字和身高、體重,以空白分隔)並顯示檔案內容、所有人的平均身高、平均體重以及最高者、最重者。

提示:輸出浮點數到小數點後第二位。

輸入說明

讀取read.txt(每一行的格式為名字和身高、體重,以空白分隔 …

第7類:數組(Tuple)、集合(Set)以及詞典(Dictionary)

702 數組合併排序

請撰寫一程式,輸入並建立兩組數組,各以-9999為結束點(數組中不包含-9999)。將此兩數組合併並從小到大排序之,顯示排序前的數組和排序後的串列。

輸入說明

兩個數組,直至-9999結束輸入

輸出說明

排序前的數組
排序後的串列

範例輸入與輸出

Create tuple1:
9
0
-1
3
8
-9999
Create tuple2:
28
16
39
56
78
88
-999 …

第6類:串列(List)的運作(一維、二維以及多維)

602 撲克牌總和

請撰寫一程式,讓使用者輸入52張牌中的5張,計算並輸出其總和。

提示:J、Q、K以及A分別代表11、12、13以及1。

輸入說明

5張牌數

輸出說明

5張牌的數值總和

範例輸入

5
10
K
3
A

範例輸出

32

💯正解💁‍♀️

604 眾數

請撰寫一程式,讓使用者輸入十個整數作為樣本數,輸出眾數(樣本中出現最多次的數字)及其出現的次數。

提示:假設樣本中只有一個眾數。

輸入說明

十個整數

輸出說明

眾數
眾數出現的次數

範例輸入

34
18
22
32
1 …

第5類:函式(Function)

502 乘積

請撰寫一程式,將使用者輸入的兩個整數作為參數傳遞給一個名為compute(x, y)的函式,此函式將回傳x和y的乘積。

輸入說明

兩個整數

輸出說明

兩個整數相乘之乘積

範例輸入

56
11

範例輸出

616

💯正解💁‍♀️

504 次方計算

請撰寫一程式,讓使用者輸入兩個整數,接著呼叫函式compute(),此函式接收兩個參數a、b,並回傳a**b的值。

輸入說明

兩個整數

輸出說明

a**b的值

範例輸入

14
3

範例輸出

2744

💯正解💁‍♀️

506 一元二次方程式

請撰寫一程式,將使用者輸入的三個整數(代表一元二次方程式 ax2+bx+c=0 的三個係數a、b、c)作為參數傳遞給一個名為compute()的函式,該函式回傳方程式的解,如無解則輸出【Your equation has no root.】

提示:輸出有順序性

輸入說明

三個整數,分別為a、b、c

輸出說明

代入一元二次方程式,回傳方程式解;如無解則輸出【Your equation has no root.】

範例輸入1

2
-3
1

範例輸出1

1.0, 0.5

範例輸入2

9
9
8

範例輸出2

Your equation has no root.

💯正解💁‍♀️

508 最大公因數

請撰寫一程式,讓使用者輸入兩個正整數x、y,並將x與y傳遞給名為compute()的函式,此函式回傳x和y的最大公因數。

輸入說明

兩個正整數(以半形逗號分隔)

x,y

輸出說明

最大公因數

範例輸入1

12,8

範例輸出1

4

範例輸入2

4,6

範例輸出2

2

💯正解💁‍♀️

510 費氏數列

請撰寫一程式,計算費氏數列(Fibonacci numbers),使用者輸入一正整數num (num>=2),並將它傳遞給名為compute()的函式,此函式將輸出費氏數列前num個的數值。

提示:費氏數列的某一項數字是其前兩項的和,而且第0項為0,第一項為1,表示方式如下:

輸入說明

一個正整數num (num>=2)

輸出說明

依輸入值num,輸出費氏數列前num個的數值(每個數值後方為一個半形空格)

範例輸入1

10

範例輸出1

0 1 1 2 3 5 8 13 21 34

範例輸入2

20

範例輸出2

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

第4類:進階控制流程

402 不定數迴圈-最小值

請撰寫一程式,讓使用者輸入數字,輸入的動作直到輸入值為9999才結束,然後找出其最小值,並輸出最小值。

輸入說明

n個數值,直至9999結束輸入

輸出說明

n個數值中的最小值

範例輸入

29
100
948
377
-28
0
-388
9999

範例輸出

-388

💯正解💁‍♀️

404 數字反轉判斷

請撰寫一程式,讓使用者輸入一個正整數,將此正整數以反轉的順序輸出,並判斷如輸入0,則輸出為0。

輸入說明

一個正整數或0

輸出說明

正整數反轉輸出。如輸 …

第3類:迴圈敘述

302 迴圈偶數連加

請使用迴圈敘述撰寫一程式,讓使用者輸入兩個正整數a、b(a < b),利用迴圈計算從a開始的偶數連加到b的總和。例如:輸入a=1、b=100,則輸出結果為2550(2 + 4 + … + 100 = 2550)。

輸入說明

兩個正整數(a、b,且a < b)

輸出說明

計算從a開始的偶數連加到b的總和

範例輸入

14
1144

範例輸出

327714

💯正解💁‍♀️

304 迴圈倍數總和

請使用迴圈敘述撰寫一程式,讓使用者輸入一個正整數a,利用迴圈計算從1到a之間,所有5之倍數數字總和。

輸入說明

一個正整數

輸出說明

所有5之倍數數字總和

範例輸入

21

範例輸出

50

💯正解💁‍♀️

306 迴圈階乘計算

請使用迴圈敘述撰寫一程式,讓使用者輸入一個正整數n,利用迴圈計算並輸出n!的值。

輸入說明

一個正整數

輸出說明

計算n!的值

範例輸入

15

範例輸出

1307674368000

💯正解💁‍♀️

308 迴圈位數加總

請使用迴圈敘述撰寫一程式,要求使用者輸入一個數字,此數字代表後面測試資料的數量。每一筆測試資料是一個正整數(由使用者輸入),將此正整數的每位數全部加總起來。

輸入說明

先輸入一個正整數代表後面測試資料的數量
依測試資料的數量,再輸入正整數的測試資料

輸出說明

將測試資料的每位數全部加總

範例輸入與輸出1

1
98765
Sum of all digits of 98765 is 35

範例輸入與輸出2

3
32412
Sum of all digits of 32412 is 12
0
Sum of all digits of 0 is 0
769
Sum of all digits of 769 is 22

💯正解💁‍♀️

310 迴圈公式計算

請使用迴圈敘述撰寫一程式,讓使用者輸入正整數n (1 < n),計算以下公式的總和並顯示結果:

提示:輸出結果至小數點後四位。

輸入說明

一個正整數

輸出說明

代入公式計算結果

範例輸入

8

範例輸出

1.8284

💯正解💁‍♀️

Phil Alive

coder / hacker / learner

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store