Python第三週作業

Allan Cheng發表於2020-10-19

1. 完美立方

【描述】

費馬大定理斷言:當整數n>2時,關於a,b,c的方程an=bn+cn沒有正整數解。該定理被提出後,歷經三百多年,經歷多人猜想辯證,最終在1995年被英國數學家安德魯·懷爾斯證明。當然,可以找到大於1的4個整數滿足完美立方等式:a3=b3+c3+d3(例如123=63+83+103)。編寫一個程式,對於任意給定的正整數N(N ≤100),尋找所有的四元組(a,b,c,d),滿足a3=b3+c3+d3,其中1<a,b,c,d≤N。

【輸入】

輸入一個正整數N(N<=100)

示例 1 :24

【輸出】

按照a的值從小到大,每行輸出一個完美立方等式,其中b,c,d按照非降序排列輸出。若兩個完美立方等式中a的值相同,則b的值小的先輸出;在b值相等的情況下,c值小的先輸出;在b,c都相等的情況下,d值小的先輸出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

示例 1 :
Cube = 6,Triple = (3,4,5)
Cube = 12,Triple = (6,8,10)
Cube = 18,Triple = (2,12,16)
Cube = 18,Triple = (9,12,15)
Cube = 19,Triple = (3,10,18)
Cube = 20,Triple = (7,14,17)
Cube = 24,Triple = (12,16,20)

【程式碼】

import math

n = eval(input())
for a in range(2,n+1):
    for b in range(2,a):
        for c in range(b,a):
            for d in range(c,a):
                if math.pow(a,3) == math.pow(b,3)+math.pow(c,3)+math.pow(d,3):
                    print("Cube=%d,Triple=(%d,%d,%d)" %(a,b,c,d))

【參考】

2. 雞兔同籠

【描述】

一個籠子裡面關了若干只雞和兔子(雞有2只腳,兔子有4只腳,沒有例外)。已經知道了籠子裡腳的總數為a,則籠子裡面至少有多少隻動物,至多有多少隻動物?

【輸入】

第1行輸入一個正整數n(n≤1000),表示測試資料的組數n,接下來n組測試資料每組一行,每行一個正整數a(a<32768)。提示: 輸入使用input(),不要增加額外的提示資訊 。

示例 1 :
2‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
3‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
20

【輸出】

輸出包含n行,每行對應一個輸入,包含兩個正整數,第一個是最少的動物數,第二個是最多的動物數,兩個正整數之間用一個空格分開。輸出包含n行,每行對應一個輸入,包含兩個正整數,第一個是最少的動物數,第二個是最多的動物數,兩個正整數之間用一個空格分開。 如果沒有滿足要求的答案,則輸出兩個0。

示例 1 :
0 0‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
5 10

【程式碼】

n = int(input())
for i in range(n):
    a = int(input())
    if a<32768:
        xmin = a%4
        xmax = a%2
        if xmin==0 and xmax==0:
            print("{:.0f} {:.0f}".format(a/4,a/2))
        else:
            print(0,0)
    else:
        print(0, 0)

3. 算24

【描述】

給出4個小於10的正整數,可以使用加、減、乘、除4種運算以及括號把4個數連線起來得到一個表示式。現在問題是,是否存在一種方式使得所得表示式的結果等於24。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

這裡加、減、乘、除以及括號的運算結果和運算優先順序跟平常定義一致。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

例如,對於5,5,5,1,可知5×(5-1/5)=24。又如,對於1,1,4,2無論如何都不能得到24

編寫函式計算兩點的歐式距離,並輸出(保留小數點後兩位)。

【輸入】

在程式碼中的輸入部分輸入4個小於10的正整數。輸入使用input(),不要增加額外的提示資訊。

示例 1 :
5‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
5‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
5‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
1

示例 2 :
1‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
1‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
1‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
1

【輸出】

對於每一組測試資料,輸出一行,如果可以得到24,輸出"YES"其演算法;否則“NO”。

示例 1 :
YES
((5-(1/5))*5)

示例 2 :
NO

【程式碼】

from itertools import permutations
 
a = int(input("請輸入第1個數字:"))
b = int(input("請輸入第2個數字:"))
c = int(input("請輸入第3個數字:"))
d = int(input("請輸入第4個數字:"))
list1 = [a, b, c, d]
p=[c for c in permutations(list1,4)] #對4個整數隨機排列的列表
 
symbols = ["+", "-", "*", "/"]
 
list2 =[]     #算出24的排列組合的列表
 
flag=False
 
for n in p:
    one,two,three,four=n    #p中每個元素有4個整陣列成
    for s1 in symbols:
        for s2 in symbols:
            for s3 in symbols:
                if s1+s2+s3=="+++" or s1+s2+s3=="***":
                    express = [ "{0}{1}{2}{3}{4}{5}{6}".format(one,s1, two,s2,three,s3,four)]  #全加或者乘時,括號已經沒有意義。
                else:
                    express = [ "(({0}{1}{2}){3}{4}){5}{6}".format(one, s1, two, s2, three, s3, four),
                               "({0}{1}{2}){3}({4}{5}{6})".format(one, s1, two, s2, three, s3, four),
                               "(({0}{1}({2}{3}{4})){5}{6})".format(one, s1, two, s2, three, s3, four),
                               "{0}{1}(({2}{3}{4}){5}{6})".format(one, s1, two, s2, three, s3, four),
                               "{0}{1}({2}{3}({4}{5}{6}))".format(one, s1, two, s2, three, s3, four)]
                
                for e in express:
                    try:
                        if eval(e) == 24:
                            list2.append(e)
                            flag=True
                    except ZeroDivisionError:
                        pass

list3=set(list2)  #去除重複項
 
for c in list3:
    print("YES"+" "+c)
 
if flag==False:
    print("NO")

【參考】
https://www.cnblogs.com/Mindf/p/12571829.html

4. 溫度轉換異常處理

【描述】

溫度的刻畫有兩個不同體系:攝氏度(Celsius)和華氏度(Fabrenheit)。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

請編寫程式將使用者輸入華氏度轉換為攝氏度,或將輸入的攝氏度轉換為華氏度。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

轉換演算法如下:(C表示攝氏度、F表示華氏度)‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

C = ( F - 32 ) / 1.8‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
F = C * 1.8 + 32‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

(1) 輸入輸出的攝氏度採用大寫字母 C 或小寫字母 c 結尾,溫度可以是整數或小數,如:12.34C 指攝氏度 12.34 度;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

(2) 輸入輸出的華氏度採用大寫字母 F 或小字字母 f 結尾,溫度可以是整數或小數,如:87.65F 指華氏度 87.65 度;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

(3) 考慮異常輸入的問題,如輸入不合法則丟擲異常;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

(4) 使用input()獲得測試用例輸入時,不要增加提示字串。

【輸入】

輸入一個帶單位的溫度

示例 1 :102F‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

示例 2 :102D‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

示例 3 :AC‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

示例 4 :102ff

【輸出】

輸入正常,輸出轉換後的溫度,保留小數點後2位小數。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

當使用者輸入值末位不是“C、c、F、f”中的一個時,輸出"輸入錯誤,末位只能是’C’,‘c’,‘F’,‘f’"‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

當檢測到NameError錯誤時輸出’試圖訪問的變數名不存在’‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

當檢測到SyntaxError 錯誤時輸出’存在語法錯誤’

示例 1 :38.89C‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

示例 2 :輸入錯誤,末位只能是’C’,‘c’,‘F’,'f’‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

示例 3 :試圖訪問的變數名不存在‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

示例 4 :存在語法錯誤‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

【程式碼】

CtoF=input()
try:
    if CtoF[-1] in ["c", "C"]:
        f=1.8*eval(CtoF[0:-1])+32
        print("{:.2f}F".format(f))
    elif CtoF[-1] in ["f", "F"]:
        c=(eval(CtoF[0:-1])-32)/1.8
        print("{:.2f}C".format(c))
    else:
        print("輸入錯誤,末位只能是'C','c','F','f'")
except NameError:
    print("試圖訪問的變數名不存在")
except SyntaxError:
    print('存在語法錯誤')

5. a除以b

【描述】

計算a除以b,結果四捨五入,保留2位小數。

【輸入】

輸入包括兩行, 每行一個實數, b不能等於0

示例 1 :
5
0

示例 2 :
5
3

【輸出】

正常計算結果為一個實數,當使用者輸入b為0時輸出"除零錯誤"

示例 1 :除零錯誤

示例 2 :1.67

【程式碼】

a = float(input())
b = float(input())
if b == 0:
    print("除零錯誤")
else:
    print("{:.2f}".format(a/b))

6. 2的n次方

【描述】

計算2的n次方,n由使用者輸入

【輸入】

示例 1 :5

【輸出】

示例 1 :32

【程式碼】

print(2**eval(input()))

7. 階乘

【描述】

使用者輸入一個正整數,計算其階乘

【輸入】

示例 1 :5

【輸出】

示例 1 :120

【程式碼】

n = eval(input())
sum = 1                 
for i in range(1,n+1):
    sum = sum * i
print(sum)

8. 階乘求和

【描述】

求1!+2!+3!+…的前n項的和,n從鍵盤輸入

【輸入】

示例 1 :5

【輸出】

示例 1 :153

【程式碼】

n = eval(input())
temp = 0
while n>=1:
    sum = 1                #初始化sum為1準備做n與n-1的階乘
    for i in range(1,n+1): #求n階乘
        sum = sum * i      #求n階乘
    temp = temp + sum      #臨時存放一個階乘
    n=n-1                  #做n-1的階乘
print(temp)

9. 表示式求值

【描述】

已知a,b,c的值分別為5,8和3,利用以下公式計算並輸出x的值。
在這裡插入圖片描述

【輸入】

【輸出】

-0.6

【程式碼】

import math as m
a,b,c = 5,8,3
x = (-b+m.sqrt(pow(b,2)-4*a*c))/(2*a)
print(x)

相關文章