2

私は現在、Python 3.3.0 で最初の n 個の二乗数を出力し、最終的にそれらの合計を出力するプログラムを作成しています。条件は、ユーザーがゼロより大きい整数の項のみを計算できることです。コードは次のとおりです。

print("WELCOME!")

n = input("How many numbers to sum up?: ")

while n <= 0:
    print("You have to write a positive integer; try again!")
    n = input("How many numbers to sum up?: ")

i = 1
sum = 0
while 0 < i <= n:
    print(i,"*",i,"=", i**2)
    sum += i**2
    i += 1
print("Sum:", sum)

これで、ユーザーが負の数を入力したときのエラー メッセージをコーディングすることができました。ただし、ユーザーが「fifteen」などの文字列を入力したときのエラー メッセージをコーディングするのに苦労しています。

プログラムで、ユーザーが負の数を入力したかのように、値 'n' を何度も割り当てられるようにしたいと考えています。基本的に、ユーザーが文字列を入力すると、同じことを何度も要求するループをコーディングしたいと考えています。

問題は、input() が常に任意の変数に文字列を代入することなので、文字列を整数に変換するコードを書いてみました。ユーザーが整数値を入力すると問題なく動作しますが、「n」が整数でない場合は int(n) を定義できません。

私はこの問題に関して多くのことをグーグルで調べました.tryとexcept ValueErrorを使用したいくつかの例を見つけましたが、それらのどれもそれからループを作成できないようです.

誰かがアイデアを得ましたか?

4

3 に答える 3

1

str.isdigit()を使用してこれを実現できます。ドキュメントによると、 isdigit() は \u0660123 などの互換性の上付き数字を受け入れます。しかし、python 3 の input() は、このタイプの入力のバックスラッシュをエスケープするため、これらの文字列が問題を引き起こすことはありません。

while True:
  n = input("How many numbers to sum up?: ")
  if n.isdigit() and int(n) > 0:
    break
  else:
    print("You have to write a positive integer; try again!")

squares = (i**2 for i in range(1,int(n)+1))
s = 0
for integer in range(1,int(n)+1):
  nextsquare = next(squares)
  s += nextsquare
  print(integer, "*", integer, '=', nextsquare, sep='')

print('Sum', s)
于 2013-02-10T08:55:33.253 に答える
1

try/exceptループの中に入れます。

while True:
    try:
        n = int(input("How many numbers to sum up?: "))
        if n <= 0:
            print("You have to write a positive integer; try again!")
            continue
        break
    except ValueError:
        print("You have to write a positive integer; try again!")

コードの最後の部分 (最初のループの後の部分) を次のように置き換えることもできます。

squares = lambda x: [print('{0} * {0} = {1}'.format(x, x**2)), x**2][1]

print("Sum:", sum(squares(i) for i in range(1, n+1))

ただし、ラムダはお勧めしません;)。もちろん、代わりに通常の関数を使用できます。

def squares(x):
    print('{0} * {0} = {1}'.format(x, x**2))
    return x**2
于 2013-02-10T01:57:58.393 に答える
0

こんな感じかな?擬似 python:

n = None
while n is None:
    try:
        n = int(input("How many numbers to sum up?: "))
    except ValueError:
        pass
于 2013-02-10T01:56:08.797 に答える