python 練習


一. PTA習題

1001 害死人不償命的(3n+1)猜想

卡拉茲(Callatz)猜想

對任何一個正整數 n,如果它是偶數,那么把它砍掉一半;如果它是奇數,那么把 (3n+1) 砍掉一半。這樣一直反復砍下去,最后一定在某一步得到 n=1。卡拉茲在 1950 年的世界數學家大會上公布了這個猜想,傳說當時耶魯大學師生齊動員,拼命想證明這個貌似很傻很天真的命題,結果鬧得學生們無心學業,一心只證 (3n+1),以至於有人說這是一個陰謀,卡拉茲是在蓄意延緩美國數學界教學與科研的進展……

我們今天的題目不是證明卡拉茲猜想,而是對給定的任一不超過 1000 的正整數 n,簡單地數一下,需要多少步(砍幾下)才能得到 n=1?

輸入格式:

每個測試輸入包含 1 個測試用例,即給出正整數 n 的值。

輸出格式

輸出從 n 計算到 1 需要的步數。

輸入樣例:

3

輸出樣例:

5

代碼實現:

def even(num):
    num = num / 2
    return num


def odd(num):
    num = (3 * num + 1) / 2 
    return num


step = 0
n = int(input())
m = n
while n != 1:
    if n % 2 == 0:
        n = even(n)
        step += 1
    else:
        n = odd(n)
        step += 1
print(step)

1002 寫出這個數

讀入一個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。

輸入格式:

每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這里保證 n 小於 
10 ** 100。

輸出格式:

在一行內輸出 n 的各位數字之和的每一位,拼音數字間
有 1 空格,但一行中最后一個拼音數字后沒有空格。

輸入樣例:

1234567890987654321123456789

輸出樣例:

yi san wu

代碼實現:

# 數字轉漢語拼音
# 數字轉漢語拼音
def tran(num):
    if num == 0:
        str = 'ling'
        return str
    elif num == 1:
        str = 'yi'
        return str
    elif num == 2:
        str = 'er'
        return str
    elif num == 3:
        str = 'san'
        return str
    elif num == 4:
        str = 'si'
        return str
    elif num == 5:
        str = 'wu'
        return str
    elif num == 6:
        str = 'liu'
        return str
    elif num == 7:
        str = 'qi'
        return str
    elif num == 8:
        str = 'ba'
        return str
    elif num == 9:
        str = 'jiu'
        return str


n = input()
k = 0  # 記錄循環次數
outputStr = ''  # 創建字符串
sum = 0  # 記錄各數字之和
num = 0  # 讀取 sum 每一位數字

# 計算輸入數字之和
for i in n:
    sum = sum + int(i)
    
# 數字轉字母
for j in str(sum):
    k = k + 1
    print(k)
    num = int(j)
    outputStr += tran(num)
    if(k != len(str(sum))):
        outputStr += ' '

print(outputStr[:])

  • 難點:
    • 將數字轉換成字符串時,一行中最后一個拼音數字后沒有空格
  • 解決:
    • 通過定義一個outputStr = ''字符串,保存轉換的字符+空格,添加變量k記錄錄入字符數目,當k!=len(str(sum))outputStr += ' ',以此來添加空格,不滿足判斷時,退出!

二.課后作業

1.星座轉換

輸入生日(年-月-日),轉換為對應的星座

輸入樣例:

12-2

輸出樣例:

射手座

代碼:

def get_xz(month, date):
    days = (20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22)
    xz = ("摩羯座", "水瓶座", "雙魚座", "白羊座", "金牛座", "雙子座", "巨蟹座", "獅子座", "處女座", "天秤座", "天蠍座", "射手座", "摩羯座")
    if date < days[month - 1]:
        print(xz[month - 1])
    else:
        print(xz[month])


month, date = map(int, input("請輸入(月-日):").split('-'))
try:
    get_xz(month, date)
except IndexError:
    print("請輸入正確的日期格式!")

2.年月日轉天數

輸入樣例:

2019-10-1

輸出樣例:

2019年非閏年,2019-10-1在2019年的第274天

代碼:

def leapYear(year):
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        return True
    else:
        return False


def dates(year, month, day):
    sumDays = 0
    leapYearDays = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    leapYear(year)
    if not leapYear(year):
        leapYearDays[2] = 28

    for m in range(month):
        sumDays += leapYearDays[m]
    sumDays = sumDays + day
    return sumDays


# year = int(input("請輸入年份:"))
year, month, day = map(int, input("請輸入(年-月-日):").split('-'))
Dates = dates(year, month, day)
if leapYear(year):
    print("%d年是閏年,%d-%d-%d在%d年的第%d天" % (year, year, month, day, year, Dates))
elif not leapYear(year):
    print("%d年非閏年,%d-%d-%d在%d年的第%d天" % (year, year, month, day, year, Dates))

3.素數

輸入樣例:

請輸入(2,N-1):

 2,99

輸出樣例:

素數: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

代碼:

# 素數判斷
ss = []
begin, end = map(int, input('請輸入(2,N-1):').split(','))

for i in range(begin, end, 1):
    tool = True
    for j in range(begin, i, 1):
        if i % j == 0 or i % 2 == 0:
            tool = False
    if tool:
        ss.append(i)

print("素數:",ss)

4.百錢買百雞問題

'''
題目很簡單:公雞5文錢一只,母雞3文錢一只,小雞3只一文錢,
用100文錢買一百只雞, 其中公雞,母雞,小雞都必須要有,問公雞,母雞,小雞要買多少只剛好湊足100文錢。

m:母雞  m<=33
g:公雞  g<=20
x:小雞  x = 100 - m -g
5*g + 3*m + x/3 == 100
g + m + x == 100
'''

m = 0  # 母雞,m<=33
g = 0  # 公雞,g<=20
x = 0  # 小雞,x = 100 - m -g
for m in range(0, 33, 1):
    for g in range(0, 20, 1):
        x = 100 - m - g
        if 5 * g + 3 * m + x * (1 / 3) == 100:
            print("母雞:%d,公雞:%d,小雞:%d" % (m, g, x))

5.九九乘法表(四種樣式)

# 左下三角
print("左下三角")
for x in range(1, 10, 1):
    for y in range(1, x + 1, 1):
        print("%2d * %2d = %2d" % (y, x, x * y), end="  ")
    print()

# 左上三角
print("左上三角")
for x in range(1, 10, 1):
    for y in range(x, 10, 1):
        print("%2d * %2d = %2d" % (x, y, x * y), end="  ")
    print()


# 右上三角
print("右上三角")
for x in range(1, 10, 1):
    for k in range(1, x):
        print(end="            ")
    for y in range(x, 10, 1):
        print("%2d * %2d = %2d" % (x, y, x * y), end="")
    print("")

# 右下三角
print("右下三角")
for x in range(1, 10, 1):
    for k in range(1, 10 - x):
        print(end="            ")
    for y in range(1, x + 1, 1):
        print("%2d * %2d = %2d" % (y, x, x * y), end="")
    print()

6.7或11整除

'''
求出1到100能被7或11整除,卻不能被7和11同時整除的數,並將它們輸出,每行輸出10個
'''

count = 0
for i in range(1, 101):
    if ((i % 7 == 0) and (i % 11 != 0)) or ((i % 7 != 0) and (i % 11 == 0)):
        print(i, end="  ")
        count += 1
        if count % 10 == 0:
            print("")

7.周長判斷三角形

'''
從屏幕讀入一個數字作為三角形的周長,輸出所有邊長為整數的三角形。
(假設周長為I,每條邊為x,y,z,x+y+z=I,
組成三角形的條件是任意兩邊大於第三邊)
'''
I = int(input("請輸入三角形的周長:"))
for x in range(1, I, 1):
    for y in range(1, I, 1):
        z = I - x - y
        if (x + y > z) and (x + z > y) and (y + z > x) and (x <= y <= z):
            print("三角形邊長:x = %d,y = %d,z = %d" % (x, y, z))

'''
if語句添加判斷語句 x<=y<=z 就可以排除重復的三角形
'''

8.數字金字塔

I = int(input("請輸入最底層數字:"))
for i in range(1, I + 1, 1):
    for k in range(0, I - i):
        print(end=" ")
    for m in range(0, 2 * i - 1):
        print(i, end="")
    print()

9.求π(普通累加法)


代碼:

補充中...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM