LoginSignup
kennpi
@kennpi (ぴ けん)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

python while文を使い 1-nを表示するやり方

1からnまでの値を:(全角)で区切りながら1行に表示するプログラムで while文を使い

入力される値

期待される出力値
1:2:3:4:5:6:7
を表示したいんですが

'''py
k = 1
n = str(input()
while k % n != 0:
print(str(k),":")
k = +1
'''
ここまでかけたんですが
いくら考えてもここで詰まってしまい
教えてくれませんか、、、

0

2Answer

while文を使うの、逆に難しい気がしますね。

input関数は入力を文字列型として返します。
while文で数値として比較するのなら、int関数で数値型にしておきましょう。

さて、while文の内容ですが、いろんな書き方があると思います。以下は一つの例です。

n = int(input())
k = 1
while k <= n:
    if k == n:  # 最後は「:」をつけない
        print(k)
    else:
        print(str(k) + ":", end="")  # print関数にキーワード引数として end="" を与えると改行しません
    k += 1

ちなみに、while文を使う必要がなければ、このように書けます。
n = int(input())
print(":".join([str(i+1) for i in range(n)]))

ついでの指摘ですが、質問文でコードの挿入ができていません。
「'''py」と「'''」の部分は、シングルクォート「'」ではなくバッククォート「`」です。
Shift+@で入力できます。
コードの挿入は見やすくなるだけではなく、コピーも簡単になるので、実際にプログラムを実行したりして、質問に答えやすくなります。(特にPythonはインデントが重要な言語なので)
以後気をつけてくださいね。

3

Comments

  1. @kennpi

    Questioner
    shift+@ で行けるんですか、今試したら上手くいけました...
    物凄く勉強になりました、!!
    ありがとうございます!!

まず入力をint型に変換してnに代入するようにしましょう。

そして、ループごとにprintすると改行が入ってしまうため、ループごとにprintしないほうがいいです。(※改行せずにprintする方法もあります)
出力用の変数を1つ用意して、ループごとにその変数に文字列連結して、ループ脱出後にprintするようにすればうまくいくと思います。


参考までに、実際に組んでみたコードはこちらです。
n = int(input())
out = ''
k=1
while k<=n:
    out += str(k)+':'
    k+=1

#末尾の':'は不要のため、最後の文字の1つ前まで出力します
print(out[:-1])

2

Comments

  1. @kennpi

    Questioner
    すみません、、out + とはどういう意味ですか?
  2. @kennpi

    Questioner
    あと、最後の print(out[:-1])の意味がわかりません、、
  3. @kennpi

    Questioner
    あ、、最後の-1は -1なしで出力したら 1:2:3:4:5:←この最後に:がついてしまうからこの :を消すために-1してるんですね!! 
  4. @kennpi

    Questioner
    すみません、理解しました、、、ありがとうございます!!!
  5. out = out + str(k)+':'

    out += str(k)+':'
    は同じ意味です。

    変数自身に加算や減算するときなどの、簡略した書き方です。
  6. @kennpi

    Questioner
    ありがとうございます、、、、勉強になりました!!

Your answer might help someone💌