python実験七辞書と集合(上)


1.モールス符号は、「・」および「−」の異なる配列順序によって異なる英字、数字、および句読点を表す初期のデジタル通信形式である.次の表の内容を辞書で格納し、ユーザーが入力した文字列(英字のみを含むと仮定)をモールス符号で出力するプログラムを作成してみます.
dic_morse={
     "A":"•−","B":"−•••","C":"−•−•","D":"−••","E":"•","F":"••−•","G":"−−•",
           "H":"••••","I":"••","J":"•−−−","K":"−•−","L":"•−••","M":"−−","N":"−•",
           "O":"−−−","P":"•−−•","Q":"−−•−","R":"•−•","S":"•••","T":"−",
           "U":"••−","V":"•••−","W":"•−−","X":"−••−","Y":"−•−−","Z":"−−••"}	
s=input("      (     ):").upper()
morse_code=""
for c in s:
    morse_code+=dic_morse[c]
print(morse_code)



#出力サンプル
文字列(アルファベットのみ含む):abcd•−−••−•−•−
2.プログラムを作成し、以下の機能を実現する:(1)空の辞書dic_studentを作成する.(2)ユーザーが5名の学生の名前と年齢を順次入力し、辞書dic_studentに保存する.(3)辞書dic_studentの内容を出力する.形式は:王建18張雲19張秋雨18劉歓17姜宇19
dic_student={
     }
for i in range(1,6):
    name=input("    "+str(i)+"      :")
    age=input("    "+str(i)+"      :")
    dic_student[name]=age
for k,v in dic_student.items():
    print("{:<3}\t{} ".format(k,v))


#出力結果
1番目の学生の名前を入力してください:王建は1番目の学生の年齢を入力してください:18 2番目の学生の名前を入力してください:張雲は2番目の学生の年齢を入力してください:19 3番目の学生の名前を入力してください:張秋雨は3番目の学生の年齢を入力してください:18 4番目の学生の名前を入力してください:劉歓は4番目の学生の年齢を入力してください:17 5番目の学生の名前を入力してください:姜宇は入力してください5番目の学生の年齢:19王建18歳張雲19歳張秋雨18歳劉歓17歳姜宇19歳
3.以下はある電子商取引の売り手が製品を販売している価格の一覧表である.
表7-2
製品名
価格/元
スクロース
99
X1
499
マジックボックス
399
プログラムを作成してみます.(1)辞書myDictを使用して表7-2の情報を格納し、製品名をキーとし、価格を値とする.(2)販売中のすべての製品の価格表を出力する.形式はスクロース……99元X 1……499元マジックボックス……399元クッキー………299元(3)すべての製品の価格を出力する.(4)輸出価格が最も高い製品価格.
myDict={
     '  ':99,'x1':499,'  ':399,'  ':299}
print('\t   ')
for k,v in myDict.items():
    print(k+'\t…………\t'+str(v))
lst=[]
for v in myDict.values():
    lst.append(v)
print('         :{}'.format(sum(lst)/len(lst)))
newlst=[(v,k) for k,v in myDict.items()]
newlst.sort()
print('        :{}'.format(newlst[-1][1]))

#出力結果
角糖............99 x 1............499魔箱............399クッキー......299すべての製品の平均価格は:324.0価格が最も高い製品は:x 1
4.プログラムを作成し、(1)空の辞書dic_studentを作成する.(2)ユーザが学生の名前、年齢、上昇、体重を順番に入力し、辞書dic_studentに格納し、名前をキーとし、年齢、上昇、体重を値とする.(3)辞書dic_studentの内容を出力する.
dic_student={
     }
for i in range(1,6):
    name=input("    "+str(i)+"      :")
    age=input("    "+str(i)+"      :")
    height=input("    "+str(i)+"      :")
    weight=input("    "+str(i)+"      :")
    dic_student[name]=[age,height,weight]
for k,v in dic_student.items():
    print("{:<3}\t{} \t{}cm\t{}kg".format(k,v[0],v[1],v[2]))

#出力結果
1番目の学生の名前を入力してください:王建は1番目の学生の年齢を入力してください:18最初の学生の身長を入力してください:172最初の学生の体重を入力してください:80 2番目の学生の名前を入力してください:張雲は2番目の学生の年齢を入力してください:19 2番目の学生の身長を入力してください:165 2番目の学生の体重を入力してください:55 3番目の学生の名前を入力してください:張秋雨は3番目の学生の名前を入力してください学生の年齢:18第3の学生の身長を入力してください:178第3の学生の体重を入力してください:82第4の学生の名前を入力してください:劉歓第4の学生の年齢を入力してください:17第4の学生の身長を入力してください:169第4の学生の体重を入力してください:75第5の学生の名前を入力してください:姜宇は第5の学生の年齢を入力してください:19第5の学生の身長を入力してください:1705人目の生徒の体重入力:70王建18歳172 cm 80 kg張雲19歳165 cm 55 kg張秋雨18歳178 cm 82 kg劉歓17歳169 cm 75 kg姜宇19歳170 cm 70 kg
5.プログラムを作成し、以下の機能を実現する:(1)空の辞書dic_studentを作成する.(2)ユーザが学生のクラス、氏名、年齢、上昇と体重を順次入力し、辞書dic_studentに格納し、名前をキーとし、年齢、上昇と体重を値とする.(3)辞書dic_studentの内容を出力する.
dic_student={
     }
for i in range(1,6):
    Class=input("    "+str(i)+"      :")
    name=input("    "+str(i)+"      :")
    age=input("    "+str(i)+"      :")
    height=input("    "+str(i)+"      :")
    weight=input("    "+str(i)+"      :")
    dic_student[(Class,name)]=[age,height,weight]
for k,v in dic_student.items():
    print("{:<3}\t{}\t{} \t{}cm\t{}kg".format(k[0],k[1],v[0],v[1],v[2]))


#出力結果
4題と同じように自分で順番に5人の同級生のクラスを入力して、名前、年齢、上昇と体重はすぐできます
6.辞書変数dic_を仮定countryは,一部の国の国名と首都名の対応関係を格納し,そのうち国名はキー,首都名は値である.ユーザーが入力した国名に基づいて首都名を照会し、存在する場合は照会結果を出力します.そうしないと、「国名を照会していません!」というプロンプトが表示されます.国名をクエリーして大文字と小文字を区別しないとします.
dic_country={
     "China":"Beijing","America":"Washington","Norway":"Oslo","Japan":"Tokyo","Germany":"Berlin","Canada":"Ottawa","France":"Paris","Thailand":"Bangkok"}
country=input("      :").lower().capitalize()
if country in dic_country:
    print("   :{}".format(dic_country[country]))
else:
    print("        !")


#出力サンプル
国家名:China首都名:Beijingを入力してください
7.プログラムを作成して、以下の機能を実現する:(1)登録されたすべてのユーザーのユーザー名とパスワードを保存する辞書を作成し、内容を表7-4に示す.
表7-4
ユーザー名
パスワード
John
123
Maryy
111
Tommy
123456
(2)ユーザにユーザ名とパスワードの入力を求める.(3)ユーザ名とパスワードを順番に判断し、それに対応するヒントを与える.ユーザ名の入力が間違っている場合、「ユーザ名が正しくない!」パスワードの入力が間違っている場合は、「パスワードが正しくありません!」というメッセージが表示されます.ユーザー名とパスワードが正しい場合は、「ログイン成功!」というメッセージが表示されます.
myDict={
     "John":"123","Marry":"111","Tommy":"123456"}
username=input('      :')
if username not in myDict:
    print('      !')
else:
    password=input('     :')
    if password!=myDict[username]:
        print('     !')
    else:
        print('    !')


#出力サンプル
ユーザー名を入力してください:Tommyパスワードを入力してください:123456正常にログインしました!
8.年末になると、ある会社は年末ボーナスを出す.リストlst_スタッフには「李梅」、「張富」、「付妍」、「趙諾」、「劉江」という従業員全員のリストが保管されている.辞書dic_awardには、会社に優れた貢献をした従業員のリストとボーナス金額が格納されています.内容は{「張富」:10000、「趙諾」:15000}です.プログラムを作成して、従業員1人当たりの年末ボーナスの金額を出力します.dic_awardに含まれていない従業員の年末ボーナスは5000元/人です.
lst_staff=["  ","  ","  ","  ","  "]
dic_award={
     "  ":10000,"  ":15000}
for x in lst_staff:
    if x in dic_award:
        print("{}   :{} ".format(x,dic_award[x]))
    else:
        print("{}   :{} ".format(x,5000))


#出力結果
李梅年末賞:5000元張富年末賞:10000元付妍年末賞:5000元趙諾年末賞:15000元劉江年末賞:5000元
9.仮定リストlst_busstop=[「龍江新都市」、「サンシャインプラザ」、「漢江路」、「嫩江路」、「清涼山公園」、「ラサ路」、「五台山」、「莫愁路」、あるバス路線ルートのバス停名を預けた.別の辞書dic_estate={"龍江新都市":["白雲園","騰飛園"],"サンシャインプラザ":["龍江団地","芳草園"],"漢江路":["金信花園","龍鳳花園"],"嫩江路":["西城藍湾","花咲く四季"]}は、一部のバス停付近の団地が保管されている.試写プログラムは、ユーザーが入力した起点(団地名)と終点に基づいている(団地名)、バス路線を調べる.例えば、始点が「白雲園」、終点が「龍鳳花園」であれば、出力結果は「始駅:龍江新都市駅、終点:漢江路駅、計2駅」である.始点が「龍鳳花園」、終点が「白雲園」であれば、「逆方向路線に乗る必要がある」と出力する.
lst_busstop=["     ","    ","   ","   ","     ","   ","    ","   "]
dic_estate={
     "     ":["   ","   "],"    ":["    ","   "],"   ":["    ","    "],"   ":["    ","    "]}
start=input("     (   ):")
end=input("     (   ):")
for k,v in dic_estate.items():
    if start in v:
        startStop=k
        break
for k,v in dic_estate.items():
    if end in v:
        endStop=k
        break
startIndex=lst_busstop.index(startStop)
endIndex=lst_busstop.index(endStop)
if startIndex>endIndex:
    print("          。")
else:
    print("   :{} ,   :{} , {} 。".format(startStop,endStop,endIndex-startIndex))


#出力サンプル
起点(団地名):白雲園は終点(団地名):龍鳳花園起点駅:龍江新都市駅、終点駅:漢江路駅、計2駅を入力してください.
10.辞書dic_を仮定cityは一人一人が旅行した都市を保存して、内容は{“張三鳳”:[“北京”,“成都”,“李茉絹”:[“上海”,“広州”,“蘭州”,“慕容海”:[“太原”,“西安”,“済南”,“上海”}}である.プログラムを作成してみて、以下の機能を実現します.(1)一人一人が旅行した都市の数を集計する.(2)上海に行ったことがある人数とリストを集計する.
dic_city={
     "   ":["  ","  "],"   ":[ "  ", "  ", "  "], "   ":[ "  ", "  ","  ","  "]}
for k,v in dic_city.items():
    print("{}   {}   ".format(k,len(v)))
name=[]
for k,v in dic_city.items():
    if "  " in v:
        name.append(k)
print("      {} ,   {}".format(len(name),"、".join(name)))


#出力結果
張三風は2つの都市に行ったことがあります李茉絹は3つの都市に行ったことがあります慕容福は4つの都市に行ったことがあります上海に行ったことがある2人、彼らは李茉絹、慕容福です
11.辞書変数dic_があると仮定scoreは学生の成績情報(表7-5参照)を格納し、名前はキーである.試写プログラムは、学生1人当たりの平均成績を統計し、辞書に追加し、最後に辞書を出力する.
表7-5
名前
国語
数学
英語
けいさんき
へいきんぶん
徐麗
88
90
98
95
92.75
張興
85
92
95
98
92.5
劉寧
89
89
90
92
90.0
張旭
82
86
89
90
86.75
dic_score={
     "  ":[88,90,98,95],"  ":[85,92,95,98],"  ":[89,89,90,92],"  ":[82,86,89,90]}
for k,v in dic_score.items():
    dic_score[k].append(sum(v)/len(v))
print("  \t  \t  \t  \t   \t   ")
for k,v in dic_score.items():
    print(k,end="\t")
    for x in v:
        print(x,end="\t")
    print()


#出力結果
名前の国語の数学の英語のコンピュータの平均点徐麗88 90 98 95 92.75張興85 92 95 98 92.5劉寧89 90 92 90.0張旭82 86 89 90 86.75