AtCoder APG4bをPythonで解く(Ex6~10)

投稿日:  更新日:2022/09/02

Atcoder Python

B!
Daniel AgreloによるPixabay(https://pixabay.com/)からの画像

こんにちは, Shinoryoです.

今回はC++入門 AtCoder Programming Guide for beginners(APG4b)を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います.

EX6 - 電卓をつくろう

if, elif, elseを用いて条件分岐を行います. 注意すべき点は,

  • B=0のときの除算ではエラーを出力する
  • Python3.xでの除算は浮動小数点で出力されるので, それを整数に変換する

といったところでしょうか.

a, op, b = input().split()
a = int(a)
b = int(b)
if op == "+":
print(a+b)
elif op == "-":
print(a-b)
elif op == "*":
print(a*b)
elif op == "/":
if b == 0:
print("error")
else:
print(int(a/b))
else:
print("error")

EX7 - bool値パズル

お題となっているプログラムをPythonで書き直すと, 下のようになるでしょうか.

a = #True or False
b = #True or False
c = #True or False
if a:
print("At", end="")
else:
print("Yo", end="")
if not a and b:
print("Bo", end="")
elif not b or c:
print("Co", end="")
if a and b and c:
print("foo!", end="")
elif True and False:
print("yeah!", end="")
elif not a or c:
print("der", end="")
  • a:True
  • b:False
  • c:True

とすることで, 「AtCoder」と出力されます.

この問題だけ, 結果がWAになってしまいました. おそらくC++でないとダメなようになっているのだと思いますが, もし上記のプログラムが誤っていたらご連絡いただけますと幸いです.

EX8 - たこ焼きセット

お題となっているプログラムをPythonで書き直すと, 下のようになるでしょうか.

p = int(input())
if p == 1:
price = int(input())
elif p == 2:
text = input()
price = int(input())
n = int(input())
print('{0}!'.format(text))
print(price*n)

これではp=1のときに変数textが定義されておらず, 「name 'text' is not defined」とエラーが出てしまいます. このエラーを解消するためには, 例えば以下のようにすればよいでしょう. if文の中でたこ焼きセットの説明文を出力してしまっています. また, たこ焼き1個あたりの値段の入力を受け付ける部分はp=1のときもp=2のときも共通なので, if文の外に出しています.

p = int(input())
if p == 2:
text = input()
print('{0}!'.format(text))
price = int(input())
n = int(input())
print(price*n)

EX9 - 複合代入演算子を使おう

残念ながらPythonにはインクリメント(「i++」のようなもの)やデクリメント(「i--」のようなもの)はありませんので, おとなしく「i += 1」「i -= 1」のように累算代入で記述しましょう.

x, a, b = [int(x) for x in input().split()]
x += 1
print(x)
x *= (a+b)
print(x)
x *= x
print(x)
x -= 1
print(x)

EX10 - 棒グラフの出力

例にならってwhile文を用いて記述します. Aの値が正のときだけwhile文の中身を実行し続けます. 実行するたびにAの値が1されていくので, 最初のAの数だけwhile文の中身が実行されます.

該当ページにもあるように, Bさんの棒グラフを出力した後にも改行が必要なことに注意してください. print()と記述することによって改行のみを出力しています.

a, b = [int(x) for x in input().split()]
print("A:", end="")
while a > 0:
print("]", end="")
a -= 1
print()
print("B:", end="")
while b > 0:
print("]", end="")
b -= 1
print()

参考にしたサイト等

関連記事

Search

About Me

自分の写真
理系大学生でした. Bloggerを利用して発信を行っています.

Labels

Blog Archives