python基礎練習1-25
1.有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位數?各是多少?
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if( i != k ) and (i != j) and (j != k):
print (i,j,k)
2.企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
按階段輸出
i=float(input('淨利潤:'))
arr=[1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r=0
for index in range(0,6):
if i > arr[index]:
r+=(i - arr[index]) * rat[index]
print(i- arr[index] * rat[index])
i=arr[index]
print(r)
3.一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
分析過程如下
X+100=N**2------------------------------------1
X+100+168=M**2--------------------------------2
2-1
M**2-N**2=168
(M-N)*(M+N)=168
M OR N >2
THE OTHER
1<OTHER<168/2+1
for i in range(1,85): if 168%i == 0: j=168/i if (i>j) and (i%2==0) and(j%2==0): m=(i+j)/2 n=(i-j)/2 x=n*n-100 print(x)
4.輸入某年某月某日,判斷這一天是這一年的第幾天?
year=int(input('year:'))
month=int(input('month:'))
day=int(input('day'))
sum=0
months = [0,31,59,90,120,151,181,212,243,273,304,334]
if 0<month<=12:
sum+=months[month-1]
else:
print('wrong')
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('{}days'.format(sum))
5.輸入三個整數x,y,z,請把這三個數由小到大輸出
l=[]
for i in range(3):
x=int(input('int:'))
l.append(x)
l.sort()
print(l)
6.斐波那契數列。
def fib(n):
a,b=1,1
for i in range(n-1):
a, b=b, a+b
return a
7.輸出 9*9 乘法口訣表。
for i in range(1, 10):
print()
for j in range(1, i+1):
print('{}*{}={}'.format(i, j, i*j)
8.判斷101-200之間有多少個素數,並輸出所有素數。
count=0
pn=1
for m in range(101,201):
k=int(sqrt(m))
for i in range(2,k+1):
if m%i == 0:
pn=0
break
if pn == 1:
count+=1
print(m)
pn=1
print('total number is {}'.format(count))
9.打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
for n in range(100,1000):
i =int(n / 100)
j = int(n / 10 % 10)
k = int(n % 10)
if n == i ** 3 + j ** 3 + k ** 3:
print (n)
10.將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
x=int(input('again? yes:1, no:0'))
while x:
n=int(input('int:'))
while n!=1:
for i in range(2, n+1):
if n%i ==0:
n=int(n/i)
if n==1:
print('{}'.format(i), end='')
else:
print('{}*'.format(i), end='')
break
x=int(input('again? yes:1, no:0'))
11.利用條件運算子的巢狀來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。
score = int(raw_input('輸入分數:\n'))
if score >= 90:
grade = 'A'
elif score >= 60:
grade = 'B'
else:
grade = 'C'
print '%d 屬於 %s' % (score,grade)
12.輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。
import string
s = raw_input('請輸入一個字串:\n')
letters = 0
space = 0
digit = 0
others = 0
for c in s:
if c.isalpha():
letters += 1
elif c.isspace():
space += 1
elif c.isdigit():
digit += 1
else:
others += 1
print 'char = %d,space = %d,digit = %d,others = %d' % (letters,space,digit,others)
13.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制
for j in range(5):
a = str(input("提示:請輸入1~9之間的正整數:"))
n = int(input("提示:請輸入大於零的正整數:"))
if n <= 0 or int(a) >= 10 or int(a) <= 0:
print("請根據提示輸入正確的數")
continue
sum = 0
for i in range(1, n+1):
print(int(a*i), end = ' ')
sum += int(a*i)
print("這些數的總和為:%d"%sum)
14.:一個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如6=1+2+3.程式設計找出1000以內的所有完數
for i in range(1, 1001):
sum = 0
for j in range(1, i):
if i % j == 0:
sum += j
if sum == i:
print(i)
15.一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?
hei = 100 # 總高度
tim = 10 # 次數
height = [] # 每次反彈高度
for i in range(2,tim+1): # 計算第二次落地到第十次落地
hei /= 2
height.append(hei)
print('第10次落地時,反彈%s高'%(min(height)/2)) # 第十次反彈為第十次落地距離的一半
print('第10次落地時,經過%s米'% (sum(height)*2+100)) # 總和加上第一次的 100
16.猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
x2=1
for i in range(0,9):
x1=(x2+1)*2
x2=x1
print(x1)
17.打印出如下圖案(菱形):
for i in range(1, 5):
print(' ' * (4 - i), end="")
for j in range(1, 2 * i):
print('*', end="")
print()
for i in range(3, 0, -1):
print(' ' * (4 - i), end="")
for j in range(1, 2 * i):
print('*', end="")
print()
18.有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。
a=2
b=1
s=0
for i in range(0,20):
s+=a/b
t=a
a=a+b
b=t
print(s)
19.求1+2!+3!+...+20!的和。
n = 0
s = 0
t = 1
for n in range(1,21):
t *= n
s += t
print('1! + 2! + 3! + ... + 20! = %d' % s)
20.利用遞迴方法求5!。
def fac(n):
sum=0
if n==0:
sum=1
else:
sum=n*fac(j-1)
return sum
21.利用遞迴函式呼叫方式,將所輸入的5個字元,以相反順序打印出來。
S = input('Input a string:')
L = list(S)
L.reverse()
for i in range(len(L)):
print(L[i])
22.有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最後問第一個人,他說是10歲。請問第五個人多大?
def age(n):
if n==1:
c=10
else:
c=age(n-1)+2
return c
print(age(c))
23.給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。
print( '請輸入大於10的數字:' )
n=int(input())
x=[]
i=0;
while(int(n)!=0):
x.append(int(n%10))
i+=1
n/=10
print( '該數有 %d 位\n' %i )
print( '逆序為:\n')
print( x[::] )
24.一個5位數,判斷它是不是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。
a = input("輸入一串數字: ")
b = a[::-1]
if a == b:
print("%s 是迴文"% a)
else:
print("%s 不是迴文"% a)
25.請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母。
letter = raw_input("please input:")
#while letter != 'Y':
if letter == 'S':
print ('please input second letter:')
letter = raw_input("please input:")
if letter == 'a':
print ('Saturday')
elif letter == 'u':
print ('Sunday')
else:
print ('data error')
elif letter == 'F':
print ('Friday')
elif letter == 'M':
print ('Monday')
elif letter == 'T':
print ('please input second letter')
letter = raw_input("please input:")
if letter == 'u':
print ('Tuesday')
elif letter == 'h':
print ('Thursday')
else:
print ('data error')
elif letter == 'W':
print ('Wednesday')
else:
print ('data error')