0

こんにちは私は私のループの終わりに問題があります。「stop」または「」を取得するには、入力を文字列として受け入れる必要がありますが、他の文字列入力は必要ありません。入力はfloatに変換されてからリストに追加されますが、ユーザーが「bob」と入力すると変換エラーが発生し、「stop」を受け入れることができないため、input(float)を設定できません。

現在の完全なコードは以下のとおりです。

私の現在の考え方は次のとおりです。

  1. 「停止」を確認してください
  2. 入力がフロートであるかどうかを確認します。
  3. 1または2でない場合は、有効な入力を求めてください。

何かアイデアはありますか?それが単純なものである場合は、その方向に私を向けるだけで、それを解約してみます。さもないと...

ありがとう

# Write a progam that accepts an unlimited number of input as integers or floating point.
# The input ends either with a blank line or the word "stop".


mylist = []

g = 0
total = 0
avg = 0


def calc():
    total = sum(mylist);
    avg = total / len(mylist);
    print("\n");
    print ("Original list input: " + str(mylist))
    print ("Ascending list: " + str(sorted(mylist)))
    print ("Number of items in list: " + str(len(mylist)))
    print ("Total: " + str(total))
    print ("Average: " + str(avg))


while g != "stop":
    g = input()
    g = g.strip()  # Strip extra spaces from input.
    g = g.lower()  # Change input to lowercase to handle string exceptions.
    if g == ("stop") or g == (""):
        print ("You typed stop or pressed enter") # note for testing
        calc() # call calculations function here
        break

# isolate any other inputs below here ????? ---------------------------------------------
        while g != float(input()):
            print ("not a valid input")
    mylist.append(float(g))
4

1 に答える 1

3

pythonicの方法は次のようになると思います:

def calc(mylist): # note the argument
    total = sum(mylist)
    avg = total / len(mylist) # no need for semicolons
    print('\n', "Original list input:", mylist)
    print("Ascending list:", sorted(mylist))
    print ("Number of items in list:", len(mylist))
    print ("Total:", total)
    print ("Average:", avg)

mylist = []
while True:
   inp = input()
   try:
       mylist.append(float(inp))
   except ValueError:
       if inp in {'', 'stop'}:
            calc(mylist)
            print('Quitting.')
            break
       else:
            print('Invalid input.')
于 2012-10-15T12:55:33.083 に答える