2017-11-29 15 views
4

数字のリスト(縦棒で分割)を使用するコードを書くと、ユーザーが数字以外を入力するとスローされますそのオブジェクトを0で置き換えます。リストを降順(最大から最小)で表示し、その間に垂直バーを表示することを意図しています。 これは現在私のコードですが、動作させることはできません。ブロック以外に追い出すますtryブロックでリストの内包を行う"ValueError"例外をリスト内のアイテムに置き換える方法

fixed_numbers=[] 
for n in numbers: 
try: 
    fixed_numbers.append(int(n)) 
except ValueError: 
    fixed_numbers.append(0) 

、あなたが戻ってリストを終了する方法がありません:

numbers = input("Please enter several integer numbers separated by 
    vertical bars. ").split('|') 
    for item in numbers: 
     try: 
      numbers = [int(item) for item in numbers] 
     except ValueError: 
      item = item.replace(item,'0') 
    numbers = sorted(numbers, reverse = True) 
    print(' | '.join(str(num) for num in numbers)) 

答えて

0

あなたはこのような何かを探しています。たとえば、次の番号の最初の非整数値のため

try: 
    numbers = [int(n) for index, n in enumerate(numbers)] 
except ValueError: 
    numbers[index] = 0 

作品、我々はそれを反復処理している間、ここで我々はnumbersを変更しないことだけ

1
numbers = input("Please enter several integer numbers separated by vertical bars. ") 
numbers = numbers.split('|') 
temp = [] 
for item in numbers: 
    try: 
     temp.append(int(item)) 
    except ValueError: 
     temp.append(0) 
numbers = temp 

注意。あなたが実際にあなたがインデックス化要素に割り当てる必要があり、リスト内の要素を交換したい場合は同じタスクを実行する別の方法は

def eval_number(s): 
    try: 
     return int(s) 
    except ValueError: 
     return 0 

numbers = input("Please enter several integer numbers separated by vertical bars. ") 
numbers = numbers.split('|') 
numbers = list(map(eval_number, numbers)) 
0

ようなものになるだろう。

def int_or_zero(s): 
    try: 
     return int(s) 
    except ValueError: 
     return 0 

for i in range(len(numbers)): 
    numbers[i] = int_or_zero(numbers[i]) 

私は、操作機能と交換ループを分離したいです

関連する問題