2010-08-18 6 views
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) 

Je continue à obtenir cette erreur: si guess < secret: TypeError: types unorderable: str() < int()Quel est le problème avec ce code de jeu Python?

Répondre

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

Appel input vous donne de nouveau un string, pas int. Lorsque vous comparez guess en utilisant <, vous avez besoin d'un int afin de comparer une valeur numérique. Essayez de faire quelque chose le long des lignes de:

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

Parce que Python est fortement typé, vous ne pouvez pas comparer les cordes et un int. Ce que vous obtenez de input() est un str pas un int. Donc, vous devez convertir le str en int avant de pouvoir effectuer une comparaison.

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

Vous devez également gérer l'exception possible levée lorsque l'entrée est à un pas convertable int. Ainsi, le code devient:

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

En outre, input() est dangereux, au moins en Python 2.x. Cela est dû au fait que input() accepte toute instruction Python valide. Vous devriez plutôt utiliser raw_input() si vous utilisez Python 2.x. Si vous utilisez Python 3, ne tenez pas compte de ce bit.

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

Il utilise Python 3 'print', donc' input() 'n'est pas un problème. –

+0

Pas nécessairement. 'print()' est parfaitement valide dans Python 3. Edité pour clarifier quand même. –

+0

s/3/2. Je voulais dire 'print' _can_ être utilisé avec la même syntaxe que l'appel de fonction dans Python 2, bien que je sois d'accord avec le fait qu'il n'est pas souvent utilisé de cette façon. –

1

Vous avez orthographié "landlubber" incorrect.

Un landrubber est une personne qui caresse le sol.
Un landlubber est une personne qui ne connaît pas son chemin autour d'un navire.

Et vous devez analyser votre entrée à un int avant de pouvoir le comparer à un int.

+0

Je souhaite tellement que je pourrais vous donner +1 pour cela: D. –