1. 程式人生 > >Python基礎習題(二)

Python基礎習題(二)

9、一個數如果恰好等於其因子之和,則稱為完數,如6=1+2+3。找出1000以內所有完數。

#一個數如果恰好等於其因子之和,則稱為完數,如6=1+2+3。找出1000以內所有完數。
"""
思路:1、利用迴圈,依次查詢數值的因數
2、同時對其因數求和,當因數之和大於數值則迴圈跳出,查詢下一個合適數值
3、同時對每個數值的因數存放到列表
4、查到合適數值後輸出該數值以及其因數之和表示式
"""
#先定義一個判斷是否為質數的函式
import math
def isPrime(n):
    if n<2:
        return False
    elif n==2:
        return
True else: m=int(math.sqrt(n)) for i in range(2,m+1): if n%i==0: return False return True for n in range(1,1001): #如果為質數或1,則不符合,因為質數!=1+質數本身 if isPrime(n) or n==1: continue else: #建立存放因數的列表 list=[] sum=0 #查詢n的因數
for i in range(1,n): if i==1 or n%i==0: sum=sum+i list.append(i) #如果因數之和已大於數值本身則跳出該內迴圈 if sum>n: break if n==sum: print(str(n)+"=",end="") for i in range(0,len(list)): if
i<len(list)-1: print(str(list[i])+"+",end="") else: print(list[i],end="") print()

10、利用條件運算子的巢狀來完成:成績>=90分的同學用A表示,60-89之間的用B表示低於60份的用C表示。

"""
利用條件運算子的巢狀來完成:成績>=90分的同學用A表示,60-89之間的用B表示
低於60份的用C表示
"""
score=int(input("請輸入成績(0-100):"))
score_level='A' if score>=90 else ('B' if 60<=score<90 else 'C')
print(score_level)

注意條件運算子的巢狀用法。

11、輸入一行字元,分別統計出其中英文字母、空格、數字和其他字元的個數並輸出。

"""
輸入一行字元,分別統計出其中英文字母、空格、數字和其他字元的個數並輸出
"""
str0=input("請輸入一行字串:")
letter_count=0
space_count=0
number_count=0
other_count=0
for c in str0:
    if 'a'<=c<='z' or 'A'<=c<='Z':
        letter_count+=1
    elif c==" ":
        space_count+=1
    elif 0<=int(c)<=9:
        number_count+=1
    else:
        other_count+=1
print("這行字元總共包括"+str(letter_count)+"個字母,",end="")
print(str(space_count)+"個空格,",end="")
print(str(number_count)+"個數字,",end="")
print(str(other_count)+"個其他字元,",end="")

12、求s=a+aa+aaa+aaaa+….;其中加幾次由鍵盤輸入指定。

"""
求s=a+aa+aaa+aaaa+....;其中加幾次由鍵盤輸入指定
"""
n=int(input("請輸入相加的次數:"))
a=int(input("請輸入一個正整數(1-9):"))
s=0
m=a
print("s=",end="")
for i in range(1,n+1):
    if i==n:
        print(str(m),end="")
    else:
        print(str(m)+"+",end="")            
    s=s+m
    m=m*10+a
print("="+str(s))

13、猴子吃桃問題:猴子第一天摘下一堆桃子,吃了一半後又吃了一個;第二天又吃了剩下的一半後又吃了一個;每天都如此吃法,到第十天再想吃時發現只剩一個桃子了,請問第一天共摘了多少隻桃子?

def monkeyEatpeach(days,left_count):
    n=left_count
    for i in range(1,days):
        n=(n+1)*2
    print("第一天摘的桃子數量是:"+str(n)+"只")
    return n
days=int(input("請輸入最後一天是第幾天:"))
left_count=int(input("請輸入最後一天發現還剩幾隻桃子:"))
monkeyEatpeach(days,left_count)

14、有一個分數序列:2/1、3/2、5/3、8/5、13/8、21/13….求這個序列前20項之和。

#建立兩個列表,分別以分子和分母為元素
a=[]
b=[]
a.append(2.0)
a.append(3.0)
b.append(1.0)
b.append(2.0)
for i in range(2,20):
    a.append(a[i-1]+a[i-2])
    b.append(b[i-1]+b[i-2])
s=0
for i in range(0,20):
    s=s+float(a[i]/b[i])
    print(str(s),end="  ")
print()
print("結果為:"+str(s))

15、求1+2!+3!+4!+…+20!的和。

#求1+2!+3!+4!+...+20!的和。
def f1(n):
    if n==1:
        return 1
    else:
        return f1(n-1)*n
s=0
n=int(input("請輸入要進行逐數階乘相加的次數:"))
for i in range(1,n+1):
    s=s+f1(i)
    if i<n:
        print(str(i)+"!+",end="")
    else:
        print(str(i)+"!=",end="")
print(s)

16、對10個數進行排序

#對10個數進行排序
def listInputinfo(n):
    list=[]
    for i in range(0,n):
        print("\n請輸入第"+str(i+1)+"個數:",end="")
        e=int(input())
        list.append(e)
    return list
n=int(input("請輸入要排序的數字數量:"))
#直接利用列表升序函式
lista=listInputinfo(n)
lista.sort()
for i in range(0,len(lista)):
    print(lista[i],end=" ")
#方法二
listb=listInputinfo(n)
for i in range(0,len(listb)-1):
    for j in range(i+1,len(listb)):
        if listb[i]>listb[j]:
            a=listb[i]
            listb[i]=listb[j]
            listb[j]=a
for i in range(0,len(listb)):
    print(listb[i],end=" ")