【问题标题】:Problem with an integer in Python 3.1Python 3.1 中的整数问题
【发布时间】:2011-01-17 21:14:09
【问题描述】:

我的问题在第 13 行(其他)。我收到错误“无效语法”

Answer = 23
Guess = ()
Gender = input("Are you a boy, a girl or an alien? ")

if Gender == 'boy' or 'Boy':
     print("Nice!", Gender)
if Gender == 'girl' or 'Girl':
     print("Prepare do die!", Gender)
if Gender == 'alien' or 'Alien':
     print("AWESOME my", Gender, "Friend!")   
 while 'Guess' != Answer:
if Guess < Answer:
     print("Too low! try again")
    else:
        print("too high")

【问题讨论】:

  • 您缺少实际向用户询问数字的部分。阅读如何读取控制台输入。
  • 这个脚本实际上有很多问题。但是您正在查看的确切问题是什么?
  • 我是编程新手,所以我不太了解它。但这应该是一个猜谜游戏。我在“else”上收到错误(无效语法)。我不确定我应该如何理解:(
  • 修复print 语句在else 之前的缩进。它应该多 3 个空格。这是为了匹配最后一个print 语句的缩进。另外,请注意前几行中whileif 的缩进。
  • @dan04: 回答你的问题很重要,我们应该知道是欢迎我们的银河霸主还是overladies :)

标签: python integer python-3.x


【解决方案1】:

您的问题是缩进。 if 必须与 else 对齐。 while 之前似乎还有一个前导空格,必须去。

if Guess < Answer:
     print("Too low! try again")
    else:
        print("too high")

应该是

if Guess < Answer:
    print("Too low! try again")
else:
    print("too high")

Gender == 'boy' or 'Boy' 不符合您的预期。由于Boy 的计算结果为真,因此它将等同于Gender == 'boy'。您可能想要Gender == 'boy' or Gender == 'Boy',如果您可以接受任何 案例,可以将其简化为Gender.lower() == 'boy'

您可能还打算在 while 循环之前和循环中阅读答案。

您还应该遵循公认的Python style guide 并使用下划线分隔的小写单词作为变量名称,例如gender 而不是 Gender。使用Gender 作为类名。

【讨论】:

  • 非常感谢大家,帮了我很多忙!
【解决方案2】:

该代码在使用or 以及字符串和变量之间的差异方面存在严重问题。这是你想要的吗?:

Answer = 23
Guess = None
Gender = raw_input("Are you a boy, a girl or an alien? ")

if Gender in ('boy', 'Boy'):
     print("Nice!", Gender)
elif Gender in ('girl', 'Girl'):
     print("Prepare do die! %s" % Gender)
elif Gender in ('alien', 'Alien'):
     print("AWESOME my %s Friend!" % Gender)
while Guess != Answer:
    Guess = raw_input('Guess the number: ')
    try:
       Guess = int(Guess)
    except ValueError:
        print('Not an integer')
        continue
    if Guess == Answer:
        print('Alright!')
        break
    elif Guess < Answer:
        print("Too low! try again")
    else:
        print("too high")

【讨论】:

    【解决方案3】:

    这是一个(几乎)正确的程序,带有我的 cmets:

    # The recommended style for Python is to use CamelCase for classes only:
    answer = 23 
    guess = None # An empty tuple () works to, but this makes more sense.
    gender = input("Are you a boy, a girl or an alien? ")
    
    # Using gender.lower() means both 'Boy', 'boy', 'BOY' or 'boY' matches:
    if gender.lower() == 'boy':
        print("Nice!", gender)
    # Although you can do it like this too:
    if gender in ('girl' or 'Girl'):
        print("Prepare do die!", gender)
    # But this is *always* true, so it's wrong. I left this bug in intentionally:
    if gender == 'alien' or 'Alien': 
        print("AWESOME my", gender, "friend!")
    
    # 'guess' == answer will always be false. Remove the quotes:
    while guess != answer:
        # And you forgot to ask for the guess...
        guess = int(input("Guess my age? "))
    
        # Indentation matters in Python:
        if guess == answer:
            print("Yeah, correct!")
        elif guess < answer:
            print("Too low! try again")
        else:
            print("too high")
    

    这会导致以下结果:

    Are you a boy, a girl or an alien? Why, yes, I am.
    AWESOME my Why, yes, I am. friend!
    Guess my age? 20
    Too low! try again
    Guess my age? 30
    too high
    Guess my age? q
    Traceback (most recent call last):
      File "untitled-1.py", line 19, in <module>
        guess = int(input("Guess my age? "))
    ValueError: invalid literal for int() with base 10: 'q'
    

    如您所见,验证您的输入是个好主意。 :) 但这是下一步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 2020-02-29
      • 2023-04-04
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      相关资源
      最近更新 更多