3

このCodingBatの問題で問題が発生しています:

int配列の長さが2の場合、2または3が含まれている場合はTrueを返します。

私はこれを解決するために2つの異なる方法を試しました。誰かが私が間違っていることを説明できますか?

#This one says index is out of range, why?
def has23(nums):
 for i in nums:
  if nums[i]==2 or nums[i]==3:
   return True
  else:
   return False
#This one doesn't past the test if a user entered 4,3.
#It would yield False when it should be true. Why?
def has23(nums):
 for i in nums:
  if i==2 or i==3:
   return True
  else:
   return False
4

5 に答える 5

7

Pythonのループは他の言語のループforと同じではないため、最初のループは機能しません。forインデックスを反復処理する代わりに、実際の要素を反復処理します。

for item in numsほぼ同等です:

for (int i = 0; i < nums.length; i++) {
    int item = nums[i];

    ...
}

False2つ目は、戻るのが早すぎるため機能しません。2ループがまたはではない値に遭遇した場合、ループは3戻りFalse、他の要素をループしません。

ループを次のように変更します。

def has23(nums):
    for i in nums:
        if i == 2 or i == 3:
            return True  # Only return `True` if the value is 2 or 3

    return False  # The `for` loop ended, so there are no 2s or 3s in the list.

または単に使用してinください:

def has23(nums):
    return 2 in nums or 3 in nums
于 2013-03-23T00:20:29.323 に答える
0

学習目的でインデックスAのバリエーションを使用して上記を行う別の方法

 def has23(nums):
  try :
    alpha = nums.index(2)
    return True
  except:
    try:
      beta = nums.index(3)
      return True
    except:
      return False
于 2020-10-03T01:48:30.993 に答える
0

古い投稿、私は知っていますが、将来の読者のために:

forループに関しては、range()関数を使用するという別のオプションについて言及する価値があると思います。

それ以外の

 for i in nums:

forループを次のように切り替えることができます。

for i in range(len(nums)):

これは、他の言語と同じように、整数を繰り返し処理します。次に、を使用nums[i]すると、インデックスの値が取得されます。

ただし、コードとその目的に別の問題があることに気付きました。forループ内では、すべての実行パスが変数を返します。配列の長さに関係なく、forループを1回だけ通過します。これは、最初の実行後に戻り、関数の実行が終了するためです。最初の値がfalseの場合、関数はfalseを返します。

代わりに、ステートメントがtrueの場合にのみ、ループ内で実行を終了する必要があります。ループがすべての可能性を通過し、何もfalseでない場合は、falseを返します。

def has23(nums):
 for i in range(len(nums)):   # iterate over the range of values
  if nums[i]==2 or nums[i]==3:# get values via index
   return true                # return true as soon as a true statement is found
 return false                 # if a true statement is never found, return false
于 2021-07-26T20:50:11.693 に答える
-1

このJavaコードは正常に機能します:-

public boolean has23(int[] nums) {
  if(nums[0]==2||nums[1]==2||nums[0]==3||nums[1]==3){
    return true;
  }
  return false;
}
于 2020-06-22T07:39:29.910 に答える
-2
def has23(nums):
  if nums[0] ==2 or nums[0]==3 or nums[1] ==2 or nums[1]==3: 
    return True
  else: 
    return False
于 2018-11-03T14:01:50.243 に答える