我正在尝试创建一个python函数,让你猜数字0 - 100。 每次我运行代码时,它总是打印得更低,即使我把最小数字(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()
答案 0 :(得分:2)
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()
答案 1 :(得分:1)
你的raw_input
正在给你一个字符串。您应该将其强制转换为int
:
x = raw_input("Guess My Number 1 - 100")
x = int(x)
这将修复您的代码。
如果您开始使用Python 3,则不会遇到此问题,因为它会给您一个错误,而不是允许您在str
和int
类型之间进行比较(这会产生无意义的结果在Python 2)。
您还需要在代码中为global
和q
变量添加z
声明:
def whle(i):
global q
global z
# ...
def number():
global q
这将允许您在全局命名空间中覆盖它们。通常情况下,您只需创建一个同名的局部变量,该变量会影响全局,这意味着您的更改将不会对程序的其余部分可见(因为它们不会更改)。
但是我认为q
和z
的逻辑需要重新思考一下:在原始脚本中,每次只有一个设置为True
,但{{1}必须为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
,{{ 1}}→target
,whle
→take_guess
。 (或者那种效果)
如果在number
的提示符末尾添加换行符(new_game
),则对用户来说会更加混乱。
此代码中有更多内容可以通过一些调整来实现,但我想我会留下你的。
答案 2 :(得分:0)
你需要从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!"
答案 3 :(得分:0)
这样做的方法要短得多。
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!')