問題
与えられたあなたが投稿したコードは、実際にはPython 2.7で動作しますよう。これはのリスト(input())の機能を持たないPython 3です。
幸いにも、変数名は非常に明確です。他の人たちはすぐに問題を詳述しました - 私は特に良いと思う説明に投票しました。あなたのプログラムの設計に損傷を与えることなくのは、この問題を修正しましょう:
def count_pos():
user_input = input("Please enter a list of numbers seperated by commas"))
# user_input is a raw string of the input, such as "1, 2, 3, 4"
# break this into individual numbers:
str_numbers = user_input.split(',')
# str_numbers would now be ["1", " 2", " 3", " 4"]
# These individual strings are suitable to convert to integer
numbers = [int(str_num) for str_num in str_numbers]
# NOW we can continue with the rest of your program, as written:
count=0
for number in numbers:
if number > 0:
count += 1
add=sum(1 for number in numbers if number > 0)
return add
追加のクリーンアップすべての
まず、あなたがあなたのループの最初の正の数を見つける後に返します。 カウントは決して1より高くなりません。しかし、あなたのadd =ステートメントは実際にループが行うことに置き換わるので、正しい答えが得られます。あなたは完全にループを取り除く、あなたはそれがその仕事をすることができますので、それは最後まで実行してみましょう、ループ内でこれを実行する必要がある場合は、単に
return sum(1 for number in numbers if number > 0)
を使用することができます。そうしてあなたは結果を返します:
for number in numbers:
if number > 0:
count += 1
return count
編集ノート
あなたのオリジナルテキストはcount_posは「番号のリストを取ります」と述べています。これは通常、呼び出しプログラムがそのリストを提供する責任を負うことを意味し、ユーザー入力を読み取るのではなく、関数に入力パラメーターが必要です。その場合、関数のヘッダーを修正して入力と変換を削除し、1行のソリューションのみを使用して、問題全体を解決します:
def count_pos(numbers):
return sum(1 for number in numbers if number > 0)
数字は文字列であり、実際には文字ですそれを整数と比較する。おそらく 'numbers = [int(x)numbers.split( '、')]'またはそれらの行に沿った何かの中のxのために。 – mgilson
@mgilsonは何を言ったのですか?明らかにするために、 'numbers'を定義する前の行は' list() 'なしでなければなりません。 –
編集ノート:オリジナルのテキストには** count_pos **"これは通常、呼び出しプログラムがそのリストを提供する責任を負うことを意味し、ユーザー入力を読み込むのではなく、関数*に入力パラメータが必要です。 – Prune