这个Python游戏代码有什么问题?

4
import random

secret = random.randint (1,99)
guess = 0
tries = 0

print ("AHOY! I'm the Dread Pirate Roberts, and I have a secret!")
print ("It is a number from 1 to 99. I'll give you 6 tries. ")

while guess != secret and tries < 6:
    guess = input ("What's yer guess? ")
    if guess < secret:
        print ("Too low, ye scurvy dog")
    elif guess > secret:
        print ("Too high, landrubber!")
    tries = tries + 1
if guess == secret:
    print ("Avast! Ye got it! Found my secret, ye did!")
else:
    print ("No more guesses! Better luck next time, matey!")
    print ("The secret number was", secret)

我一直收到这个错误:如果猜测值小于秘密值: TypeError: 无法比较类型:str() < int()
3个回答

12
guess = input ("What's yer guess? ")

调用 input 返回的是一个 string,而不是一个 int。当你使用 < 比较 guess 时,需要一个 int 来比较数值大小。尝试按照以下方式进行操作:

try:
    guess = int(input("What's yer guess? "))
except ValueError:
    # Handle bad input

6

由于Python是强类型语言,你不能将字符串和整数进行比较。从input()获得的是一个str而不是int。因此,在进行比较之前,需要将str转换为int

guess = int(input("What's yer guess"))

当输入无法转换为 int 时,您还应处理可能引发的异常。因此,代码变为:

try:
    guess = int(input("What's yer guess"))
except ValueError:
    print ('Arrrrr... I said a number ye lily-livered dog')

此外,在Python 2.x中,input()存在安全隐患。这是因为input()接受任何有效的Python语句。如果你正在使用Python 2.x,应该使用raw_input()代替。如果你正在使用Python 3,则可以忽略这一点。

try:
    guess = int(raw_input("What's yer guess"))
except ValueError:
    print 'Arrrrr... I said a number ye lily-livered dog'

他正在使用Python 3的print,所以input()不是问题。 - Justin Ardini
不一定。在Python 3中,print()是完全有效的。无论如何,为了澄清已进行编辑。 - Chinmay Kanchi
s/3/2。我是指在Python 2中,print可以使用与函数调用相同的语法,尽管我确实同意它通常不会以那种方式使用。 - Chinmay Kanchi
啊,只是个打字错误。谢谢澄清。 :) - Justin Ardini

1

你拼错了 "landlubber" 这个单词。

Landrubber 是一个抚摸地面的人。
Landlubber 是一个不熟悉船只的人。

在比较之前,你需要将输入解析为整数。


我真希望能给你点赞 :D。 - Chinmay Kanchi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接