Python経典基礎プログラミング練習問題(四)——毎日10題
3996 ワード
1.スコアシーケンスがあります:2/1、3/2、5/3、8/5、13/8、21/13...この数列の上位20項の和を求める
解題構想:分子分母の法則に注意する
2.1+2!+3!+...+20!の和
3.再帰的な方法で5を求める!
4.再帰関数呼び出し方式により、入力したn文字を逆の順序で印刷する
5.5人が一緒に座って、5人目は何歳ですか.彼は4人目より2歳年上だと言った.4人目の年齢を聞くと、3人目より2歳年上だという.3人目に聞くと、2人目より2歳年上だという.2人目に聞くと、1人目より2歳年上だという.最後に最初の人に聞いて、彼は10歳だと言った.5人目はおいくつですか
解題の考え方:再帰
6.5桁以下の正の整数を与えて、要求:一、それが何桁であることを求めて、二、逆順に各位の数字を印刷します
問題を解く構想:スタックの思想を使う
7.1つの5桁の数が返信数かどうかを判断する
8.指定されたフォーマットの日付を出力
解題の考え方:datetimeの方法を理解する
9.2つの卓球チームが試合を行い、それぞれ3人ずつ出た.甲チームはa,b,cの3人,乙チームはx,y,zの3人である.抽選で試合のリストが決まる.選手に試合のリストを聞く人がいる.aは彼がx比と合わないと言って、cは彼がxと合わないと言って、z比、プログラムを作って3チームの選手のリストを見つけてください.
問題を解く構想:3層の循環を利用して、それぞれa,b,cの3人を代表して(x,y,z)の中からそれぞれ1人を選んで、問題の中の条件を利用します.
10.曜日の最初のアルファベットを入力して曜日を判断し、最初のアルファベットが同じであれば、2番目のアルファベットを判断し続けてください.
解題構想:分子分母の法則に注意する
a = 2.0
b = 1.0
s = 0
for n in range(1,21):
s += a / b
t = a
a = a + b
b = t
print (s)
2.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)
3.再帰的な方法で5を求める!
sum=0
def digui(n):
if n==0:
sum=1
else:
sum=n*digui(n-1)
return sum
print(digui(5))
4.再帰関数呼び出し方式により、入力したn文字を逆の順序で印刷する
def out(s,n):
if n == 0:
return
else:
print(s[n-1],end=' ')
out(s,n-1)
s=input(' :')
#s=s.split(',')
n= len(s)
out(s,n)
5.5人が一緒に座って、5人目は何歳ですか.彼は4人目より2歳年上だと言った.4人目の年齢を聞くと、3人目より2歳年上だという.3人目に聞くと、2人目より2歳年上だという.2人目に聞くと、1人目より2歳年上だという.最後に最初の人に聞いて、彼は10歳だと言った.5人目はおいくつですか
解題の考え方:再帰
def age(n):
if n == 1:
a=10
else:
a=age(n-1)+2
return a
print(age(5))
6.5桁以下の正の整数を与えて、要求:一、それが何桁であることを求めて、二、逆順に各位の数字を印刷します
問題を解く構想:スタックの思想を使う
def jisuan(n):
l=[]
while n!=0:
a=n%10
l.append(a)
n=n//10
return l
n=int(input(' :'))
l=jisuan(n)
a= len(l)
for i in range(a):
print(l[i],end=' ')
7.1つの5桁の数が返信数かどうかを判断する
str=input(' :')
a=int(str)
t=1
for i in range(5//2):
if str[i] != str[5-i-1]:
t=0
break
if t:
print('%d ' % a)
else:
print('%d ' % a)
8.指定されたフォーマットの日付を出力
解題の考え方:datetimeの方法を理解する
import datetime
if __name__ == '__main__':
# , dd/mm/yyyy。 strftime()
print(datetime.date.today().strftime('%d/%m/%Y'))
#
miyazakiBirthDate = datetime.date(1998,3,18)
print(miyazakiBirthDate.strftime('%d/%m/%Y'))
#
miyazakiBirthNextDay = miyazakiBirthDate + datetime.timedelta(days=1)
print(miyazakiBirthNextDay.strftime('%d/%m/%Y'))
#
miyazakiFirstBirthday = miyazakiBirthDate.replace(year=miyazakiBirthDate.year + 1)
print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))
9.2つの卓球チームが試合を行い、それぞれ3人ずつ出た.甲チームはa,b,cの3人,乙チームはx,y,zの3人である.抽選で試合のリストが決まる.選手に試合のリストを聞く人がいる.aは彼がx比と合わないと言って、cは彼がxと合わないと言って、z比、プログラムを作って3チームの選手のリストを見つけてください.
問題を解く構想:3層の循環を利用して、それぞれa,b,cの3人を代表して(x,y,z)の中からそれぞれ1人を選んで、問題の中の条件を利用します.
t=0
for i in range(ord('x'),ord('z') + 1):#a
for j in range(ord('x'),ord('z') + 1):#b
if i != j:
for k in range(ord('x'),ord('z') + 1):#c
if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):# a x,c x z
print('order is a -- %s\t b -- %s\tc -- %s' % (chr(i), chr(j), chr(k)))
t=1
break
if t==1:
break
if t==1:
break
10.曜日の最初のアルファベットを入力して曜日を判断し、最初のアルファベットが同じであれば、2番目のアルファベットを判断し続けてください.
letter = input("please input:")
if letter == 'S':
letter = input("please input second letter:")
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':
letter = input("please input second letter:")
if letter == 'u':
print('Tuesday')
elif letter == 'h':
print('Thursday')
else:
print('data error')
elif letter == 'W':
print('Wednesday')
else:
print('data error')