# Python - open file(3) - Exercise
###### tags: `Python HomeWork`
## 問1:会社ランキング
以下は入社して良かったランキングののテキストファイルです。コードで以下のファイルを書き込んでください。

:::info
code:
```python=
file = open("HW_file(3)_1.txt","w")
file.write("入社してよかった会社ランキング\n")
file.write("\n")
file.write("一位 グーグル合同会社\n")
file.write("二位 株式会社 コスモスイニシア\n")
file.write("三位 マッキンゼー&カンパニー日本支社\n")
file.close()
```
:::
## 問2:終わらない夏、エンドレスファイル
日記を書くプログラムを作りましょう。
入力できるようにし、入力した内容は「diary.txt」ファイルに書き込まれます。なお、"end"が入力されたらプロブラムを終了します。
* 日記のプログラムなので、計5回実行して、毎回違う内容を書き込みます。5回実行したらファイルの内容は以下の通りになります。

```
**入出力1:**
|1973年8月3日
|私には、飼っている犬がいます。
|柴犬で、名前は「コロ」。
|ですがコロは、毎日私の手に噛みついてくるのです。
|本当に愛しくて困ったものです。
|end
---おわり---
**入出力2:**
|1973年8月20日
|コロのこと大好きです。
|でも、餌をやっても、懐いてくれません。
|そんなコロが唯一楽しそうにやってくれる遊びは、ボールをころころと転がす遊びです。
|その遊びだけは、私と一緒に遊んでくれます。
|昨日、ころころしました。
|end
---おわり---
**入出力3:**
|1973年8月21日
|今日も、ころころしました。
|end
---おわり---
**入出力4:**
|1973年8月22日
|今日も、ころころしました。
|今日も、ころころしました。
|今日も、ころころしました。
|end
---おわり---
**入出力5:**
|1973年8月23日
|今日も、&’&ろしました。
|’(A'F日も、ころ((%&ころしました。
|)A&kyoumo korokoしました。
|end
---おわり---
```
:::info
code:
```python=
file = open("HW_file(3)_2.txt","w")
for i in range(5):
text = ""
while text != "end":
text = input("")
if text == "end":
break
text = text+"\n"
file.write(text)
file.write("--\n")
i+=1
file.close()
```
改訂版
```python=
file = open("HW_file(3)_2.txt","a")
text = ""
while True: #最初からtrueにしたほうが楽
print()
text = input("|")
if text == "end":
break
text = text+"\n"
file.write(text)
print("---おわり---\n")
file.close()
```
:::
## 問3:楽しい地獄
:::danger
七つの大罪、人間は生まれながらにして罪を犯すもの。
そこで如何に自分が陥ってしまった罪から目を覚めるか、
どう向き合っていくか.......
:::
デジタル変革時代の到来でサタン様は業務のデジタル化を推進しています。サタン様の指示に従って以下の条件を満たすプログラムを作成してください。
* まず、以下のファイルを書き込んでください。

* 次に、以下の指示に沿って出力してください。
1. タイトルを出力すること。
2. 一番罪深い人間を出力すること。
3. 一番罪が浅い人間を出力すること。
4. 人間がよく犯す二つの罪を出力すること。
* 最後、ユーザーに何番目の人を処刑するかを入力させ、指定した人間のデータをファイルから消してください。
```
入出例1:
Seven deadly sins
一番罪深い人間は? Judy
一番罪が浅い人間は? Jerry
人間がよく犯す二つの罪は?傲慢 怠惰
誰を処刑しますか(1~6までの整数を入力してください);2
Anzu の存在が消された。
```

```
入出例2:
Seven deadly sins
一番罪深い人間は? Judy
一番罪が浅い人間は? Jerry
人間がよく犯す二つの罪は?傲慢 怠惰
誰を処刑しますか(1~6までの整数を入力してください);6
tomo の存在が消された。
```

:::info
code:
```python=
file = open("HW_file(3)_3.txt","w")
def w1():
string = "Seven deadly sins\n"
return string
def w2():
string = "Name ID 怠惰 強欲 傲慢 嫉妬\n"
return string
def w3():
string = "enor ###4442 82 55 99 41\n"
return string
def w4():
string = "Bmo ###6669 89 66 89 49\n"
return string
def w5():
string = "Judy ###3397 69 93 85 81\n"
return string
def w6():
string = "Jerry ###2012 11 76 69 19\n"
return string
def w7():
string = "tomo $$$7777 65 75 84 84\n"
return string
numlist = [w1(),w2(),w3(),w4(),w5(),w6(),w7()]
[file.write(i) for i in numlist]
file.close()
file = open("HW_file(3)_3.txt","r")
title = file.readline()
print(title)
file.close()
file = open("HW_file(3)_3.txt","w")
namelist = ["","","enor","Bmo","Judy","Jerry","tomo"]
character = ["怠惰","強欲","傲慢","嫉妬"]
ave = []
enor = [82,55,99,41]
ave.append(sum(enor))
bmo = [89,66,89,49]
ave.append(sum(bmo))
judy = [69,93,85,81]
ave.append(sum(judy))
jerry = [11,76,69,19]
ave.append(sum(jerry))
tomo = [65,75,84,84]
ave.append(sum(tomo))
high = ave.index(max(ave))
low = ave.index(min(ave))
high += 2 #同じnamelistを使っていて後に不都合が生じるためこうしました。
low += 2
print("一番罪深い人間は? {}".format(namelist[high]))
print("一番罪が浅い人間は? {}".format(namelist[low]))
cha = []
for i in range(4):
cha.append(enor[i]+bmo[i]+judy[i]+jerry[i]+tomo[i])
first = cha.index(max(cha))
cha.remove(max(cha))
second = cha.index(max(cha))
print("人間がよく犯す二つの罪は?{} {}".format(character[first],character[second]))
file.close()
file = open("HW_file(3)_3.txt","w")
num = int(input("誰を処刑しますか(1~6までの整数を入力してください):"))
num += 1
numlist.remove(numlist[num])
print("{} の存在が消された。".format(namelist[num]))
namelist.remove(namelist[num])
for i in numlist:
file.write(i)
file.close()
```
模範解答
```python=
filename = "sin7.txt"
file = open(filename,"w")
stringlist = ["Seven deadly sins\nName ID 怠惰 強欲 傲慢 嫉妬",
"\nenor ###4442 82 55 99 41 ",
"\nAnzu ###7771 97 36 85 35 ",
"\nBmo ###6669 89 66 89 49 ",
"\nJudy ###3997 69 93 85 81 ",
"\nJerry ###2012 11 76 69 19 ",
"\ntomo $$$7777 65 75 84 84 "]
for i in stringlist:
file.write(i)
file.close()
#読み込み
name,sloth,greed,pride,envy,total=[],[],[],[],[],[]
file=open(filename,"r")
title=file.readline()
file.readline()
for i in file.readlines():
line = i.split()
name.append(line[0])
sloth.append(int(line[2]))
greed.append(int(line[3]))
pride.append(int(line[4]))
envy.append(int(line[5]))
total.append(int(line[2])+int(line[3])+int(line[4])+int(line[5]))
print(name,sloth,greed,pride,envy,total,sep="\n")
no1Index = total.index(max(total))
last1Index = total.index(min(total))
print(title)
print("一番罪深い人間は?",name[no1Index])
print("一番罪が浅い人間は?",name[last1Index])
print("人間がよく犯す二つの罪は?",end = "")
#全ての罪の総和のリスト
sinTotalList = [sum(sloth),sum(greed),sum(pride),sum(envy)]
sinTotalList.sort()
no1no2List = [sinTotalList[-1],sinTotalList[-2]]#一位と二位
#print(no1no2List)
for i in no1no2List:
if i == sum(sloth):
print("怠惰",end="")
elif i == sum(greed):
print("強欲",end="")
elif i == sum(pride):
print("傲慢",end="")
elif i == sum(envy):
print("嫉妬",end="")
print(" ",end="")
userInput = int(input("誰を処刑しますか(1~6までの整数を入力してください):"))
filename = "sin7,txt"
file = open(filename,"r")
title = file.readline()
item = file.readline()
contents = file.readlines()
file.close()
sinpeople=contents.pop(userInput-1)
print(sinpeople.split())
filename = "sin7.txt"
file = open(filename,"w")
file.write(title+item)
for i in contents:
file.write(i)
file.close()
print("{} の存在が消された。".format(sinpeople.split()[0]))
```
:::