2017-11-02 13 views
0
私は次のコードを使用

ベース10とのint()のリテラル無効:「ジョンの

students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]] 

のようであるリストで2番目に低いグレードを印刷しようとしています

a = [[input(), float(input())] for i in range(int(input()))] 
s = sorted(set([x[1] for x in a])) 
for name in sorted(x[0] for x in a if x[1] == s[1]): 
    print (name) 

しかし、私は取得していますエラーは次のとおりです。

Traceback (most recent call last): 
    File "test.py", line 1, in <module> 
    a = [[input(), float(input())] for i in range(int(input()))] 
ValueError: invalid literal for int() with base 10: 'john' 

ないで述べたように、ネストされたリストの形式で入力を取得する方法がわから。誰もそれで私を助けることができますか?この場合

+0

最初に入力するのは 'range(int(input())'です。これは、リストの生徒がどれくらい長くなるかを尋ねています。 "john"は数字ではないため、エラーが発生しています。 –

+0

あなたの質問の接線ですが、 'sorted 'の' key'引数があなたのコードを単純化できるようになります。 – SpoonMeiser

+0

ありがとう、Patrick Haugh&SpoonMeiser –

答えて

2

a = [[input(), float(input())] for i in range(int(input()))]

input()コールは次の順序で実行されます。

[[input(), float(input())] for i in range(int(input()))] 
# 2   3        1 

あなたは、プロンプトを使用してこれを確認することができます。

a = [[input('input name\n'), float(input('input grade\n'))] 
    for i in range(int(input('input num of students\n')))] 

意志の出力を:

>> input num of students 
1 
>> input name 
'a' 
>> input grade 
1 

コードが実行されると、最初に名前ではなく番号を入力する必要があります。

+0

私は出力を得ました。 DeepSpaceありがとう! –

関連する問題