简体   繁体   English

打印语句在if / elif / else块中不起作用

[英]Print statements not working in if/elif/else block

I have a project that I am trying to redo. 我有一个我要重做的项目。 It is for a coursera course on Interactive Python programming. 这是一门有关交互式Python编程的课程。 The deadline for submission has already passed so I am not violating the honor code here, just wanting to understand why the code I am now working on for the same project is not working. 提交的截止日期已经过去,所以我在这里没有违反荣誉代码,只是想了解为什么我现在为同一项目使用的代码无法正常工作。

The game is Guess The Number. 游戏是猜数字。 None of the print statements in the if block print out at all, and I of course think they should be, ergo I have made a mistake and I cannot for the life of me figure out what it is. if块中的所有print语句都根本不会打印出来,我当然认为应该打印出来。 I have gone over several other students projects during the evaluation phase and still cannot see why my code is incorrect. 在评估阶段,我已经完成了其他几个学生项目,但是仍然看不到我的代码为什么不正确。

The game executes in the browser here Game In Browser here 游戏在浏览器中执行此游戏在浏览器中点击这里

Here is the code that I am working with: 这是我正在使用的代码:

# Sanderson, Steven
# template for "Guess the number" mini-project
# input will come from buttons and an input field
# all output for the game will be printed in the console

import simplegui
import random
import math

# initialize global variables used in your code
secret = 0         # The secret number
guesses = 0        # The amount of guesses you will have left
guess_count = 0    # How many guesses you made
range_limit = 100  # The number range of the game


def init():
    # Here I reference the global variables because they
    # are now inside of a function being referenced locally
    global range_limit
    global secret

    # This following line limits the amount of guesses
    # the player can have based upon the given 
    # range_limit of the game
    guesses = int(math.ceil(math.log(range_limit,2)))

    # This following line of code generates a secret
    # number for the specified range of the game,
    # it has been initialized to a range of 100 to 
    # start the game
    secret = random.randrange(0, range_limit)

    # Converts range_limit to a string to print to console
    print "Play Guess The Number. The range is 0 to", + range_limit
    print "You have " +str(guesses) + " guesses for this game"
    print ""

# define event handlers for control panel

def range100():
    # button that changes range to range [0,100) and restarts
    global range_limit
    global secret
    global guesses
    range_limit = 100
    init()

def range1000():
    # button that changes range to range [0,1000) and restarts
    global range_limit, secret, guesses
    range_limit = 1000
    init()

def input_guess(guess):
    # main game logic goes here
    int_guess = int(guess)
    global guess_count
    global guesses
    global secret
    guesses += -1
    guess_count = guess_count + 1

    if int_guess == secret:
        print "You Win and did it in " +str(guess_count) + " guesses"
        print ""
        init()
    elif int_guess > secret:
        print "You guessed " +str(guess) + " guess lower"
        print "You have " +str(guesses) + " guesses left"
        print ""
    elif int_guess < secret:
        print "You guessed " +str(guess) + " guess higher"
        print "You have " +str(guesses) + " guesses left"
        print ""
    if guesses == 0:
        print "You ran out of guesses, the secret was " +str(secret)
        print ""
        init()


# create frame
frame = simplegui.create_frame("Guess The Number!", 200, 200)

# register event handlers for control elements
frame.add_button("Range [0, 100)", range100, 125)
frame.add_button("Range [0, 1000)", range1000, 125)
frame.add_input("Enter your guess here and press enter", input_guess, 125)

# start frame
frame.start()
init()

# I know my code is not the best, constructive criticisim in order to help me
# be a better coder is appreciated :)

Here is a sample output that I just ran. 这是我刚运行的示例输出。 I printed out secret , guess_count and guesses and in that order. guess_count顺序打印出secretguess_countguesses

71
0
0
You guessed 25 guess higher
You have -1 guesses left

71
1
-1
You guessed 25 guess higher
You have -2 guesses left

71
2
-2
You guessed 25 guess higher
You have -3 guesses left

It also looks like the init() is not working when the buttons are pressed as the count is not being reset, scratching head. 当按下按钮时,由于未重置计数,看起来init()也不起作用,这会刮伤头部。 init()可能也不正确

If you add the lines 如果添加行

print repr(guess), type(guess), repr(secret), type(secret)
print guess == secret, guess > secret, guess < secret

right before the if branches, you see (something like): 就在if分支之前,您会看到(类似):

'23' <class 'str'> 4 <class 'int'>
False False False

You're comparing a string to an integer, which in Python 3 gives TypeError: unorderable types: str() < int() but in Python 2 will silently return unexpected behaviour (based on the name of the class, if memory serves, but since we shouldn't be doing it anyway I never manage to remember the details.) To be specific: 您正在将字符串与整数进行比较,这在Python 3中会给出TypeError: unorderable types: str() < int()但在Python 2中,它将无提示地返回意外行为(如果有内存,则基于类的名称,但是因为我们无论如何都不应该这样做,所以我永远都不会记住细节。)要具体:

>>> "47" < 200
False
>>> "47" < 47
False
>>> "47" < 2
False
>>> 100 < "23"
True
>>> 100 < "1"
True
>>> 100 < "-23"
True

Convert the user input to an integer, and then you can start working through the next issue :^) 将用户输入转换为整数,然后就可以开始处理下一个问题了:^)

You guessed 5
5 <class 'int'> 35 <class 'int'>
False False True
You guessed 5 guess higher
You have -1 left

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM