「みんな教えて! 選手権!!」開催のお知らせ

1から100の数字を表示し、9の倍数の場合は横に9をつける。それに加えて、3の倍数のみ表示させ、さらに5以上の場合は5で割り切れる数のみ表示する方法を教えてください。
一つ一つのやり方は分かりますが、条件を複数加える方法が分かりません。

A 回答 (5件)

あ〜。


あるいはこういう事がやりたいのか?

print(''.join([f'{i}{''.join([j[1] if i % j[0] == 0 else '' for j in ((9, ' 9'), (3, ' 3の倍数'), (5, ' 5で割り切れる数'))])}\n' for i in range(1, 101)]))

いずれにせよ、 #3氏が言う通り、

> 「仕様通りに動く」ことが正解です。

はその通りだし、

> 必要になってくるのは
>・仕様を読み解く「国語」

ってのも完全に同意するんだけど、一方、「仕様を書いてる側の国語力が怪しい」ってのがままあるんだよな(笑)。
読んでる側が忖度せなアカン「仕様」なんつーのは無いも同然だ(笑)。
#2氏が書いてる通り、

> 仕様がよくわからん

ってのは全くその通りだと思う。
クソだ(笑)。
「pythonの質問です。」の回答画像5
    • good
    • 0

これはヘンな問題だよ。



> 1から100の数字を表示し

これはそのまま1から100の数字を表示するじゃん。

> 1から100の数字を表示し、9の倍数の場合は横に9をつける。

まぁここまではいいだろう。なんにせよ1から100の数字を「全部」表示せよ、ってのが題意になる。

print(''.join([f'{i} 9\n' if i % 9 == 0 else f'{i}\n'for i in range(1, 101)]))

ところが以降が問題だ。

> それに加えて、3の倍数のみ表示させ

3の倍数「のみ」ってのは「1から100の数字を表示し」に反してる。
つまり、「それに加えて」ってのの「それ」が何を指してるのかサッパリ分からん。
仮に、上のルーティン内に「組み込め」っつーのなら、「1から100の数字を表示し」と言う命題と「3の倍数のみ表示」と言う命題は「同時には満たせない」、つまり「出来ない」と言うのが答えとなる。
あるいは上のルーティンに加えて「別の」ルーティンを作れ、ってのなら、貴女が言う「条件を複数加える」必要は全くない。単に別にルーティンを書けばいいだけだ。

print(''.join([f'{i}\n' for i in range(1, 101) if i % 3 == 0]))

同様に、

> 3の倍数のみ表示させ、さらに5以上の場合は5で割り切れる数のみ表示する方法を教えてください。

「3の倍数"のみ"表示」と「5で割り切れる数"のみ"表示」は同時に満たせない。あるいは、3の倍数かつ5の倍数を表示しろ、って事なんだろうか。ここでも「さらに」があるルーティン内に別のルーティンを入れろって言ってんだか、ルーティンを分けろって言ってんだかサッパリだ。

print(''.join([f'{i}\n' for i in range(1, 101) if i % 5 == 0]))

print(''.join([f'{i}\n' for i in range(1, 101) if i % 15 == 0]))

どっちなんだ?

いずれにせよ、「ルーティンを別分けしろ」って言ってるんじゃなければ「この問題は解けません」ってのが解答だし、ルーティンを別分けしてもいい、のなら貴女が悩む「条件を複数加える」必要は全くない。
    • good
    • 0

「条件を複数加える方法」自体は簡単です。


・ and or not で計算する
https://www.python.jp/train/logical_oper/index.h …
・if,elif,elseのブロックの中にif文(等)を書く


「仕様通りに動く」ことが正解です。
その書き方は一つとは限りません。
まずは、自分で考えて書いてみることです。

if 3の倍数 and (5以上 and 5で割り切れる) and 9の倍数:
  横に9を付ける
if 3の倍数 and (5以上 and 5で割り切れる) and (not 9の倍数):
  表示
....
のようにベタに書いても、仕様通りに動けば「正解」です。


必要になってくるのは
・仕様を読み解く「国語」
・条件を正しく表現するための「数学」(論理、集合あたりの分野)
です。


その内容だと
for i in range(1,101):
 if 表示する条件を満す:
  表示の処理
とし、「表示する条件を満す」「表示の処理」を別々に考えたあとで上記にあてはめる、というのがよさそうです
    • good
    • 0

仕様がよくわからんけど



for i in range(1, 100 + 1):
 s = ""
 if i % 9 == 0:
  s += " 9"
 if i % 3 == 0:
  s += " 3の倍数"
 if i % 5 == 0:
  s += " 5で割り切れる数"

 if s != "":
  print(str(i) + s)

こんな感じ?

インデントは全角空白にしてるので
コピペするときは半角スペース4個に置き換えてください。

3 3の倍数
5 5で割り切れる数
6 3の倍数
9 9 3の倍数
10 5で割り切れる数
12 3の倍数
15 3の倍数 5で割り切れる数
18 9 3の倍数
20 5で割り切れる数
21 3の倍数
24 3の倍数
25 5で割り切れる数
27 9 3の倍数
30 3の倍数 5で割り切れる数
33 3の倍数
35 5で割り切れる数
36 9 3の倍数
39 3の倍数
40 5で割り切れる数
42 3の倍数
45 9 3の倍数 5で割り切れる数
48 3の倍数
50 5で割り切れる数
51 3の倍数
54 9 3の倍数
55 5で割り切れる数
57 3の倍数
60 3の倍数 5で割り切れる数
63 9 3の倍数
65 5で割り切れる数
66 3の倍数
69 3の倍数
70 5で割り切れる数
72 9 3の倍数
75 3の倍数 5で割り切れる数
78 3の倍数
80 5で割り切れる数
81 9 3の倍数
84 3の倍数
85 5で割り切れる数
87 3の倍数
90 9 3の倍数 5で割り切れる数
93 3の倍数
95 5で割り切れる数
96 3の倍数
99 9 3の倍数
100 5で割り切れる数
    • good
    • 0

if文を入れ子にすることでandと同じ意味になって複数の条件をすべて満たすものだけを処理できます。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報