Python経典基礎プログラミング練習問題(一)——毎日10題


1.ここには4つの数字があります.それぞれ:1、2、3、4で、互いに異なり、重複していない3桁の数を構成することができますか.列挙し、スペースで区切ってください.
3桁の数字が同じ場合を選別し、無視する.
list1=[]
count=0
for a in range(1,5):
    for b in range (1,5):
        for c in range(1,5):
            if a!=b and b!=c and a!=c:
                d=100*a+10*b+c
                count+=1
                list1.append(d)
print('   %d    ' % count)
for i in list1:
    print(i,end=' ')

2.企業が支給するボーナスは利益によって引き上げられる.利益(I)が10万元以下の場合、ボーナスは10%引き上げることができる.利益が10万元を上回り、20万元を下回った場合、10万元を下回った部分は10%で、10万元を上回った部分は、ココアが7.5%に上昇した.20万から40万の間で、20万元を下回る部分は7.5%で、20万元を超える部分は5%になる.40万から60万の間で、40万元を下回る部分は5%で、40万元を超える部分は3%になる.60万から100万までの間、60万元以下の部分は3%で、60万元以上の部分は1.5%で、100万元以上の場合、100万元以下の部分は1.5%で、100万元以上の部分は1%で、キーボードから当月の利益Iを入力して、ボーナスの総数を求めますか?
解題構想:if文で各条件区間を判断する.
lirun=int(input('       :'))
if lirun <= 100000:
    p=lirun*0.1
if lirun >100000 and lirun <=200000:
    p=10000*0.1+(lirun - 100000)*0.075
if lirun >200000 and lirun <=400000:
    p=200000*0.075+(lirun - 200000)*0.05
if lirun >400000 and lirun <=600000:
    p=400000*0.05+(lirun - 400000)*0.03
if lirun >600000 and lirun <=1000000:
    p=600000*0.03+(lirun - 600000)*0.015
if lirun >1000000:
    p=1000000*0.015+(lirun-1000000)*0.01
print(p)

3.1つの整数、それは100をプラスした後に1つの完全な平方数で、168をプラスしてまた1つの完全な平方数で、この数が1000000未満の情況の下で、この数はいくらですか?
解題の構想:ある数が完全な平方数であれば、その数は整数である.
import math
for i in range(1,1000000):
    if math.sqrt(i+100)==int(math.sqrt(i+100)) and math.sqrt(i+268)==int(math.sqrt(i+268)):
        print(i)

4.プログラムを作成して、7で除算できるが5ではない倍数のすべての数字を見つけ、2000~3200の間(いずれも含む).得られた数字はカンマで区切られた順序で1行に印刷されます.
解題構想:if文を判断として出力フォーマットに注意する.
list1=[]
for i in range(2000,3201):
    if i%7==0 and i%5!=0:
        list1.append(i)
for i in list1:
    print(i, end=',')#   print(','.join(l))  ,       S      

5.所定の数値の階乗を計算できるプログラムを作成する.プログラムに次の入力が提供されたと仮定します:8、出力は:40320です.
解題構想:関数を定義して再帰するか、forループを使用します.
a=int(input('      :'))
b=1
for i in range(1,a+1):
    b=b*i
print(b)

6.所定の整数nを使用して、プログラムを作成して(i:i*i)を含む辞書を生成する.これは1とnの間の整数である(両者を含む).次に、プログラムは辞書を印刷すべきである.プログラムは以下の入力を提供すると仮定する:8、出力結果:{1:1,2:4,3:9,4:16,5:25,6:36,7:49,8:64}
解題構想:辞書を定義し、forループを使用します.
n=int(input('      :'))
d=dict()
for i in range(1,n+1):
    d[i]=i*i

print(d)

7.カンマで区切られた文字列を入力し、リストとメタ入力に変換します.34,67,55,33,12,98出力:['34','67','55','33','12','98']('34','67','55','33','12','98')
解題の考え方:文字列の区切り方法に注意します.
value=input('       :')
a=value.split(',')
print(a)
b=tuple(a)
print(b)

8.少なくとも2つのメソッドを含むクラスを定義します.getString:コンソール入力から文字列printStringを取得します.文字列を大文字で印刷します.
問題解決の考え方:クラスのフォーマットを定義することに注意します.
class A():
    def getString(self):
        self.x =input('        :')
    def printString(self):
        print(self.x.upper())
a=A()
a.getString()
a.printString()

9.与えられた式に従って、Q=[(2*C*D)/H]の平方根以下はCとHの固定値である.Cは50.Hは30である.Dは変数であり、その値はカンマで区切られた順序でプログラムに入力される.入力:100150180、出力:18,22,24
解題構想:math関数をインポートし、入出力フォーマットに注意する.
import math
c=50
h=30
d=input('   :')
list1=d.split(',')
m=list1[-1]
for i in list1:
    i=int(i)
    q=int(math.sqrt((2*c*i)/h))
    if i !=int(m):
        print(q,end=',')
    else:
        print(q,end='')

10.入力としてX,Yを作成し、X行,N列の2次元配列を生成する.配列のi行目とj列目の要素値はi*jである必要があります.
問題解決の考え方:2 D配列の定義方法に注意します.
input_str = input()
dimensions = [int(x) for x in input_str.split(',')]
rowNum = dimensions[0]
colNum = dimensions[1]
multilist = [[0 for col in range(colNum)] for row in range(rowNum)]#          

for row in range(rowNum):
    for col in range(colNum):
        multilist[row][col] = row * col

print(multilist)