Python打印这两个“if”场景,尽管1显然不适用

2024-05-04 23:46:40 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

varsec =raw_input("enter secret number between 1 and 100(the system won't know):")

if int(varsec.strip()) >=100: print("Cheater caught! >:D")

if int(varsec.strip()) <=1: print("Cheater caught! >:D")

import random

varGuess = random.randint(2,99)

if 2 <= int(varsec.strip()) <= 99 : print(varGuess,
                                          ("If this number is less than your secret number, type <, if more then type >, if it IS your secret number then type =."))


VarConfirm = raw_input(":")


if (VarConfirm.strip()) is "<": from random import randint
print(randint(varGuess + 1,99))

if (VarConfirm.strip()) is ">": from random import randint
print(randint(2,varGuess - 1))

if (VarConfirm.strip()) is "=": print("YES, the program has successfully guessed your number ^^")    

如果我键入“<;”对于VarConfirm,它打印两个数字(1个介于varGuess +199之间,另一个介于2varGuess -1之间)

我希望它只打印介于varGuess + 199之间的数字

另外,当我键入"<""="时,会出现NameError: 'randint' is not defined.


Tags: importnumberyoursecretifistyperandom
2条回答

您没有缩进您的print语句。无论if测试如何,它们总是执行

Python通过缩进形成块;您需要将只有在if测试为真时才能执行的所有行放在同一缩进处,并且缩进需要大于if行本身:

if (VarConfirm.strip()) is "<":
    from random import randint
    print(randint(varGuess + 1,99))

if (VarConfirm.strip()) is ">":
    from random import randint
    print(randint(2,varGuess - 1))

请注意,我将import语句放在新行中。您可以将'block'与if语句放在同一行,但该块仅限于一个简单语句;你只能做一件事

您也不应该使用is来测试字符串的相等性;这些测试通常应该失败,因为raw_input()函数不需要返回内存中与您用来测试的对象完全相同的对象。无论如何,CPython所做的是一个内部实现细节,您不能依赖它。您要测试它们的是否相等:

if (VarConfirm.strip()) == "<":
    from random import randint
    print(randint(varGuess + 1,99))

if (VarConfirm.strip()) == ">":
    from random import randint
    print(randint(2,varGuess - 1))

但是,您的导入会向您的文件中添加新的全局变量;把它们放在你剧本的顶端:

from random import randint

# other code

if (VarConfirm.strip()) == "<":
    print(randint(varGuess + 1,99))

if (VarConfirm.strip()) == ">":
    print(randint(2,varGuess - 1))

或者直接用random.randint();您之前已经导入了random模块:

if (VarConfirm.strip()) == "<":
    print(random.randint(varGuess + 1,99))

if (VarConfirm.strip()) == ">":
    print(random.randint(2,varGuess - 1))

你不需要用那么多括号;在Python 2中print是一个语句,而不是一个函数(就像return):

if VarConfirm.strip() == "<":
    print random.randint(varGuess + 1,99)

if VarConfirm.strip() == ">":
    print random.randint(2,varGuess - 1)

因为您的测试是互斥的,所以可以使用if ... elif ...,Python只需在其中一个测试为true之前保持测试:

if VarConfirm.strip() == "<":
    print random.randint(varGuess + 1,99)

elif VarConfirm.strip() == ">":
    print random.randint(2,varGuess - 1)

elif VarConfirm.strip() == "=":
    print "YES, the program has successfully guessed your number ^^"

你可以避免经常打电话给.strip();只需调用一次并存储结果:

# ask for the input and strip immediately before storing the result:
VarConfirm = raw_input(":").strip()

if VarConfirm == "<":
    print random.randint(varGuess + 1,99)

elif VarConfirm == ">":
    print random.randint(2,varGuess - 1)

elif VarConfirm == "=":
    print "YES, the program has successfully guessed your number ^^"

我不知道复制这里的代码是否会弄乱缩进,但是缩进表明if语句中“:”后面的部分只算作条件部分,然后print语句只是普通的python行,完全独立于if语句

另外,不需要在if语句中间导入这样的内容。只需在程序的开头做import语句,然后再使用它。所以你的代码应该是

from random import randint

# [.... previous steps ....]

if (VarConfirm.strip()) == "<":
    print randint(varGuess + 1,99)

if (VarConfirm.strip()) == ">":
    print randint(2,varGuess-1)

if (VarConfirm.strip()) == "=":
    print "Yes, bla bla"

相关问题 更多 >