5
def ask():
    global name, loca

    print "What's your name?"
    name = raw_input('> ')
    print "Where are you from?"
    loca = raw_input('> ')

    if name or loca == None:
        print "Please enter valid details."
        ask()

ask()
print "Alright, so you're " + name + ", from " + loca + "."

このスクリプトを使用すると、両方の変数が空の場合にのみ最後の行が出力されます。1つまたは両方を入力すると、それがトリガーされif、関数をやり直す必要があります.

ここで何が間違っていますか?

4

6 に答える 6

14

あなたは問題を非常によく切り分けました:

if name or loca == None:

ここであなたはそれが言うと思います:

"If either name or loca equal none:"

しかし、代わりにそれは言います:

"if (name) is true or (loca equals None) is true:"

それが言うべき場所:

"if (name equals none) is true or (loca equals none) is true:"

これは:

if name is None or loca is None:

ちなみに、オブジェクトisは1つしかないため、Noneの比較は、を使用した方が適切に実行されることを確認してください。None

また、それを行うためのよりPython的な方法は次のとおりです。

if not all((name, loca)):

または、「すべて」と見なすと、2つの変数になります。

if not (name and loca):

理解できない場合は、少し読んでください(Pythonチュートリアルは優れています-条件文の部分に進んでください)。幸運を!

于 2012-05-16T23:22:22.680 に答える
4

これを試して

if not all([name, loca]):
   print "Please enter valid details"
   ask()
于 2012-05-16T23:21:19.890 に答える
1

まあ、実行した後もそうすることnamelocaできません。最悪の場合、それらは空の文字列です:。あなたがしていることは、であるかどうかを尋ねることです。それは、以外の値を持っているかどうかです。Noneask()''nameTruename''

あなたがしたいことは、名前が空でない値を持っているかどうかをチェックすることです:

if not (name and loca):
    …

大丈夫なはずです。

于 2012-05-16T23:23:32.260 に答える
1
if name or loca == None:

これは、次の2つの理由でトリガーされることはありません。

  1. まず、データを入力しないと、ではなく空の文字列が返されるNoneため、trueloca == Noneになることはありません。

  2. 第二に、あなたのifステートメントは2つのことをチェックしています:真実であるかname(データを含む)、そしてloca == None。あなたはおそらく意味しif name == None or loca == Noneました。

これら2つのことを組み合わせて、次のように書くことができます。

if name == "" or loca == "":

または、文字列にデータが含まれている場合、文字列が「真実」であるという事実を単純化して利用します。

if not (name and loca):
于 2012-05-16T23:24:11.610 に答える
0

これをコードに挿入して、探している動作を取得します。

if not name or not loca:
    print "Please enter valid details."
    ask()
于 2012-05-16T23:25:29.050 に答える
0
if any(field is None for field in (name, loca)):
    print "Please enter valid details."
    ask()

このバージョンは特に空の文字列を許可するためのものですが、 を防止し、またはNoneよりも簡単に拡張できるようにします。ただし、さらにいくつかの文字を入力することを意味します。andor

良い点は、これがほとんど適切な英語のように読めることです: If any field is None...

于 2012-05-16T23:28:12.163 に答える