2017-10-14 1 views
2

次のように私のコードは、(それが動作しません)です:なぜあなたは内部のwhileループのために実行しているwhileループを使用してIPアドレスの最初のセグメントの長さをカウントする方法

IP_address = "216.3.122.18" 
seg_1_len = 0 

for char in IP_address: 
     while char != ".": 
      seg_1_len += 1 
      print(seg_1_len) 
     if char == '.': 
      break 
+0

は[MCVE]教えてください - 正確に*何を意味* "動作しませんか"? 1つの明白な問題 - あなたは条件の値を変更するものが何も含まれていないwhileループを持っているので、開始も終了もしません。 – jonrsharpe

+0

なぜwhileループを使うのですか? 'len(IP_address.split( '。')[0])'はその仕事をします。 – FabienP

+0

質問に回答しましたか? – Adi219

答えて

-1

をループ。 char変数は、すべての反復でIPアドレスの各文字を既に格納しています。ですから、charが.であるかどうかを確認し、それ以外の場合は、seg_1_len1ずつ増加させてください。あなたのようにwhileループを使用すると、最初の繰り返しでinfinite loopになります。それについて考える!

これを試してみてください:

IP_address = "216.3.122.18" 
seg_1_len = 0 

for char in IP_address: 
    if char == '.': 
     break 
    else: 
     seg_1_len+=1 
print seg_1_len 

出力:

IP_address = "216.3.122.18" 
seg_1_len = 0 

i=0 
while IP_address[i] != ".": 
    seg_1_len += 1 
    i+=1 
print(seg_1_len) 

場合や:あなたはまだwhileループを使用したい場合は

3 

あなたの質問を1として、その後、これを行いますあなたは何かが欲しいpythonic: D

print len(IP_address.split(".")[0]) 
+0

ありがとう、それを得た! –

-1

あなたは、forループを使用してIPアドレスをループしてwhileは、あなたのコードが動作する、その後ifに変更されたならば、常に、whileループとの最初の文字を照会しています。 forループ何かを見つけるために使用される、あなたは通常、この(不自然)の例のように、他を使用して

IP_address = "216.3.122.18" 
seg_1_len = 0 

for char in IP_address: 
    if char != ".": 
     seg_1_len += 1 
    else: 
     break 
print(seg_1_len) 
+0

、ありがとう! –

-1

再び
def seg1len(ipaddy): 
    seg1 = "" 
    for char in ipaddy: 
     if char == '.': # test for equality to the break condition.. 
      break   # .. and break at the top of the for loop 
     seg1 += char  # do the for-loop work (you don't need an else clause to the if) 
    else:     # the else would go with the for and would be executed whenever the for loop ran without hitting break 
     raise ValueError("ipaddy contains no dots") 
    return len(seg1) 

、これは不自然な例でした。あなたは(最速)の1を使用する必要があります。

IP_address = "216.3.122.18" 
seg_1_len = IP_address.find('.') # returns -1 if there is no '.' 

または

seg_1_len = IP_address.index('.') # raises a ValueError if there i sno '.' 

または

len(ipaddy.split('.')[0]) 

しばらく使用したソリューションは、のような単純なものでした:

仮定
seg_1_length = 1 
while IP_address[seg_1_length] != '.': 
    seg_1_length += 1 

入力は有効なip4広告ですドレス(少なくとも'.'を1つ含む必要があり、'.'で始めることはできません)。

あなたが入力が有効であると仮定することができない場合は、

i = 0 
while i < len(ipaddy) and ipaddy[i] != '.': 
    i += 1 
assert i > 0, "ip address can't start with a dot" 
assert i <= 3, "the first octet can't be more than 3 characters long" 
seg_1_length = i 
-1

は、いくつかの方法があります:、ディフェンシブ例えばをコーディングする必要があります。

この方法では、理解するのが最も簡単です:

IP_address = "216.3.122.18" 

i = 0 
while i <= len(IP_address) - 1 and IP_address[i] != ".": 
    i += 1 

seg_1_len = i 

あなたも行うことができます。

seg_1_len = len(IP_address.split(".")[0]) 
+0

これはPythonではありません – thebjorn

+0

@thebjornそうです! – Adi219

+0

編集していただきありがとうございます。あなたは '<='ではなく '<'を使って、厄介な ' - 1'を取り除くこともできます。 – thebjorn

関連する問題