1

これは、この投稿に関する追加の質問です: Python raw_input with forced TLD?

文字列が TLD で終わるかどうかを確認するためのチェックが行われています。

TLD = ('.com', '.info', '.org', '.net')
if raw_input("Please enter a hostname").endswith(TLD):
# blah blah

しかし、変数に raw_input を格納しようとしています。適切なコーディングの実践は、次のようなことをすることでしょうか?

TLD = ('.com', '.info', '.org', '.net')
hostName = raw_input(":").lower()
<<piece of code that determines if hostName does in fact end with a TLD?>>

もしそうなら、それはどのように見えますか?しばらくの間 True: と if elif ステートメントを試みましたが、どこにも行きませんでした。結果が得られずに無限にグーグルで検索したため、この質問をここに投稿しました。

問題のプログラムは、ホスト名 (google.com など) を取得し、有効な TLD があるかどうかを判断し、ホスト名から TLDを取り除き、それを hostNameshort に格納します (両方とも後で使用されます)。入力時にTLDが必要であることを強調して再度プロンプトを表示し、必要になったら続行します。

4

2 に答える 2

0

このようなもの:

TLD = ('.com', '.info', '.org', '.net')
hostName = raw_input(":").lower()
while not hostName.endswith(TLD):
    print "Incorrect input, Try again!"
    hostName = raw_input(":").lower()

デモ:

:foo.bar
Incorrect input, Try again!
:google.in
Incorrect input, Try again!
:yahoo.com
于 2013-05-29T19:23:51.863 に答える
0

TLD をテストするための実際の DNS ルックアップ

ああ、そうしているうちに、DNS サーバーに対して TLD を実際にテストするための短いスニペットが便利になるかもしれません。dnspythonNominumのモジュールを使用しています。

import dns.resolver

def testTLD(tld):
    try:
        dns.resolver.query(tld + '.', 'SOA')
        return True
    except dns.resolver.NXDOMAIN:
        return False

for tld in ('com', 'org', 'klonk', 'dk'):
    print "TLD \"{tld}\" exists: {bool}".format(tld=tld, bool=testTLD(tld))

次のように実行されます。

TLD "com" exists: True
TLD "org" exists: True
TLD "klonk" exists: False
TLD "dk" exists: True
于 2013-05-29T20:39:03.570 に答える