我正在尝试创建一个让你猜出数字 0 - 100 的 python 函数。 每次我运行代码时,它总是打印得更低,即使我输入了尽可能少的数字 (0)。我怎样才能防止这种情况并让我的代码正确运行。
这是我的代码:
from random import *
z = False
def whle(i):
x = raw_input("Guess My Number 1 - 100")
if x < i:
print "Higher"
q = False
z = True
elif x > i:
print "Lower"
q = False
z = True
elif x == i:
print "Correct!"
q = True
z = False
else:
print "Guess My Number You Goofy Goose!"
q = False
z = True
def number():
y = randrange(0,101)
q = False
while q == False:
whle(y)
while z == False:
number()
raw_input
返回一个字符串,因此您需要用调用 int()
来包装它。喜欢这个:
x = int(raw_input("Guess My Number 1 - 100"))
你不应该能够比较这些类型,'1' > 1
返回True
是Python 2中的一个错误。Python 3 正确处理它:
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
>>> '1' > 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()
你的raw_input
给你一个字符串。你应该把它胁迫到一个int
:
x = raw_input("Guess My Number 1 - 100")
x = int(x)
这将修复您的代码。
如果你开始使用 Python 3,你就不会遇到这个问题,因为它会给你一个错误,而不是允许你在str
和int
类型之间进行比较(这在 Python 2 中给出了无意义的结果)。
您还需要在代码中添加q
和z
变量的global
声明:
def whle(i):
global q
global z
# ...
def number():
global q
这将允许您在全局命名空间中覆盖它们。通常,您只会创建一个同名的局部变量,该变量隐藏全局变量,这意味着您的更改对程序的其余部分不可见(因为它们不是更改)。
但是,我认为q
和z
的逻辑确实需要重新考虑一下:在原始脚本中,一次只能设置一个True
,但必须q
True
才能让你的程序检查z
的值。总之,这意味着每当程序检查z
时,它都会False
。这需要重新思考;是要完全删除变量,还是更改q
和z
的设置方式?
在这一行下方是不必要的东西,但我仍然推荐。
您可能还希望通过捕获生成的ValueError
来检查无效输入:
x = raw_input("Guess My Number 1 - 100")
try:
x = int(x)
except ValueError:
print "That's not a number"
return
我强烈建议重命名所有函数和变量。 q
→ guessed_correctly
、z
→ user_quit
、x
→ guess
、i
→ target
、whle
→ take_guess
、number
→ new_game
。(或类似的东西)
如果你在提示符的末尾放置一个换行符(n
raw_input
),它会减少用户的困惑。
这段代码中还有更多可以做一些调整,但我想我会把你留在那里。
你需要从 raw 获取 int() 并检查 try 是否得到字符串。
from random import randrange
start_againg = True
max_number = 100
count_possible = 5
while start_againg is True:
count_possible -= 1
random_number = randrange(0, max_number + 1)
try:
number = int(raw_input("Guess My Number 1 - {0}n".format(max_number)))
if number < random_number:
print "Higher"
elif number > random_number:
print "lower"
elif number == random_number:
print "correct"
start_againg = False
if count_possible == 0:
print "attempts ended"
start_againg = False
except Exception, e:
print "Guess my NUMBER, not string!"
更短的方法可以做到这一点。
from random import randint
while True:
n = randint(0,100)
while True:
guess = int(input('> '))
if guess>n:
print('Higher')
elif guess<n:
print('Lower')
elif guess==n:
print('Correct!')
break
else:
print('Guess My Number You Goofy Goose!')