2023年3月24日 星期五

Python3 100範例-4 <<這天第幾天


 輸入某年某月某日,判斷這一天是這一年的第幾天?



def isLeapYear(y):

    return (y%400==0 or (y%4==0 and y%100!=0))


DofM=[0,31,28,31,30,31,30,31,31,30,31,30]

res=0

year=int(input('Year:'))

month=int(input('Month:'))

day=int(input('day:'))

if isLeapYear(year):

    DofM[2]+=1

for i in range(month):

    res+=DofM[i]

print(res+day)



year = int(input('year:'))

month = int(input('month:'))

day = int(input('day:'))

 

months = (0,31,59,90,120,151,181,212,243,273,304,334)

#             [1]31,[2]28,[3]31,[4]30,[5]31,[6]30,[7]31,8[31],9[30],[10]31,11[30],12[31]

#             0 , 31 , 59 , 90 , 120 , 151 , 181 , 212 , 243, 273, 304 , 334

if 0 < month <= 12:

    sum = months[month - 1]

else:

    print ('data error')

sum += day

leap = 0

if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):

    leap = 1

if (leap == 1) and (month > 2):

    sum += 1

print ('it is the %dth day.' % sum)


>>> %Run -c $EDITOR_CONTENT

Year:2023

Month:3

day:24

83

year:2023

month:3

day:24

it is the 83th day.

>>> 

利用chatGPT解

利用 python 解出 输入某年某月某日,判断这一天是这一年的第几天?


可以使用 Python 的 datetime 模块来解决这个问题。具体来说,可以将输入的年、月、日作为参数传递给 datetime.date() 函数,然后使用 date.toordinal() 函数将日期转换为自公元1年1月1日以来的天数,再用当前日期与该年1月1日的日期差计算出该天是该年的第几天。

以下是代码实现:

以下是代码实现:

python
import datetime
year = int(input("请输入年份:")) month = int(input("请输入月份:")) day = int(input("请输入日期:")) date1 = datetime.date(year, 1, 1) # 该年1月1日的日期 date2 = datetime.date(year, month, day) # 输入的日期 days = (date2 - date1).days + 1 # 日期差加1,即为该天是该年的第几天 print("%d年%d月%d日是第%d天" % (year, month, day, days))

以输入日期为2023年3月25日为例,输出结果为:

yaml
请输入年份:2023
请输入月份:3 请输入日期:25 2023年3月25日是第84天

因此,2023年3月25日是第84天。

ChatGPT + Python 實例001:數位組合 有四個數位:1、2、3、4,能組成多少個互不相同且無重複數字的三位元數?各是多少?

ChatGPT + Python 

利用 python 解出 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

可以使用 Python 的嵌套循环和条件语句来解决这个问题。

以下是代码实现:

python

count = 0   # 用于计数

for i in range(1, 5):   # 百位数从1到4

    for j in range(1, 5):   # 十位数从1到4

        for k in range(1, 5):   # 个位数从1到4

            if i != j and j != k and i != k:   # 保证三个数字互不相同

                print(i * 100 + j * 10 + k)   # 输出三位数

                count += 1   # 计数器加1

print("共有%d个三位数" % count)   # 输出结果


输出结果为:
123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432 共有24个三位数

因此,能组成24个互不相同且无重复数字的三位数,分别为123、124、132、134、142、143、213、214、231、234、241、243、312、314、321、324、341、342、412、413、421、423、431、432。

Python3 100範例-2 << 完全平方數 >>

 

實例3:完全平方數

題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?

假設該數為 x

1、則:x + 100 = n2, x + 100 + 168 = m2

2、計算等式:m2 - n2 = (m + n)(m - n) = 168

3、設置: m + n = im - n = ji * j =168i j 至少一個是偶數

4、可得: m = (i + j) / 2 n = (i - j) / 2i j 要麼都是偶數,要麼都是奇數。

5、從 3 4 推導可知道,i j 均是大於等於 2 的偶數。

6、由於 i * j = 168 j>=2,則 1 < i < 168 / 2 + 1

7、接下來將 i 的所有數字迴圈計算即可。



#!/usr/bin/python

# -*- coding: UTF-8 -*-

print ('方法1')       


n=0

while (n+1)**2-n*n<=168:

    n+=1


for i in range((n+1)**2):

    if i**0.5==int(i**0.5) and (i+168)**0.5==int((i+168)**0.5):

        print(int (i-100))



print ('方法2')       

for i in range(1,85):

    if 168 % i == 0:

        j = 168 / i;

        if  i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :

            m = (i + j) / 2

            n = (i - j) / 2

            x = n * n - 100

            print(int (x))




>>> %Run -c $EDITOR_CONTENT

方法1

-99

21

261

1581

方法2

-99

21

261

1581

>>> 


利用chatGPT 解答


利用 python 解出 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?


可以使用 Python 的循环和条件语句来解决这个问题。

以下是代码实现:

python

import math


for i in range(1, 10000):

    x = i + 100

    y = i + 268

    if math.sqrt(x) == int(math.sqrt(x)) and math.sqrt(y) == int(math.sqrt(y)):

        print(i)


输出结果为:

21 
261

因此,该整数是21和261。验证一下:

  • 21 + 100 = 121 = 11^2,21 + 168 = 289 = 17^2
  • 261 + 100 = 361 = 19^2,261 + 168 = 429 = 21^2

因此,答案是21和261。

Python3 100範例-2 “個稅計算”

Python3 100範例-2 “個稅計算”

題目:企業發放的獎金根據利潤分紅提成。

利潤(I)低於或等於10萬元時,獎金分紅可提10%

利潤高於10萬元,低於20萬元時,分紅提成7.5%

20萬到40萬之間時,高於20萬元的部分,可分紅提成5%

40萬到60萬之間時高於40萬元的部分,可分紅提成3%

60萬到100萬之間時,高於60萬元的部分,可分紅提成1.5%

高於100萬元時,超過100萬元的部分按1%分紅提成,

從鍵盤輸入當月利潤I,求應發放獎金總數?

 

#!/usr/bin/python

# -*- coding: UTF-8 -*-

'''

利潤(I)低於或等於10萬元時,獎金可提10%;

利潤高於10萬元,低於20萬元時,可提成7.5%;

20萬到40萬之間時,高於20萬元的部分,可提成5%;

40萬到60萬之間時高於40萬元的部分,可提成3%;

60萬到100萬之間時,高於60萬元的部分,可提成1.5%,

高於100萬元時,超過100萬元的部分按1%提成,

'''


#!/usr/bin/python

# -*- coding: UTF-8 -*-

'''

利潤(I)低於或等於10萬元時,獎金可提10%;

利潤高於10萬元,低於20萬元時,可提成7.5%;

20萬到40萬之間時,高於20萬元的部分,可提成5%;

40萬到60萬之間時高於40萬元的部分,可提成3%;

60萬到100萬之間時,高於60萬元的部分,可提成1.5%,

高於100萬元時,超過100萬元的部分按1%提成,

'''


i = int(input('請輸入淨利潤 : '))

arr = [1000000,600000,400000,200000,100000,0]

rat = [0.01,0.015,0.03,0.05,0.075,0.1]

r = 0

for idx in range(0,6):

    if i>arr[idx]:

        r+=(i-arr[idx])*rat[idx]

        print (r,arr[idx] , (i-arr[idx])*rat[idx],(i-arr[idx]))

        i=arr[idx]

print ("可提成-->",r)


>>> %Run -c $EDITOR_CONTENT

請輸入淨利潤 : 110000

750.0 100000 750.0 10000

10750.0 0 10000.0 100000

可提成--> 10750.0

>>> 



2023年3月23日 星期四

Python3 100範例-1 << 有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位元數?各是多少?>>

 Python3 100範例-1

有四個數字:1234,能組成多少個互不相同且無重複數字的三位元數?各是多少?



print ("有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位元數?各是多少?")


total=0

for i in range(1,5):

    for j in range(1,5):

        for k in range(1,5):

            if ((i!=j)and(j!=k)and(k!=i)):

                print("%1d%1d%1d" %(i,j,k))

                # print(i,j,k)

                total+=1

print("總數=%d" %(total))

'''

itertools 包含一系列用來產生不同類型迭代器的方法,這些方法都會回傳一個迭代器,

可以透過迴圈的方式取值,也可以使用 next() 來取值

permutations(p) 

itertools.permutations(p) 會將可迭代物件按照順序,進行所有不重複的排列組合,並回傳最後的結果

'''

import itertools

sum2=0

a=[1,2,3,4]

for i in itertools.permutations(a,3):

    print(i)

    sum2+=1

print(sum2)


>>> %Run -c $EDITOR_CONTENT

有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位元數?各是多少?

123

124

132

134

142

143

213

214

231

234

241

243

312

314

321

324

341

342

412

413

421

423

431

432

總數=24

(1, 2, 3)

(1, 2, 4)

(1, 3, 2)

(1, 3, 4)

(1, 4, 2)

(1, 4, 3)

(2, 1, 3)

(2, 1, 4)

(2, 3, 1)

(2, 3, 4)

(2, 4, 1)

(2, 4, 3)

(3, 1, 2)

(3, 1, 4)

(3, 2, 1)

(3, 2, 4)

(3, 4, 1)

(3, 4, 2)

(4, 1, 2)

(4, 1, 3)

(4, 2, 1)

(4, 2, 3)

(4, 3, 1)

(4, 3, 2)

24

>>> 



2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...