为什么我的python函数返回错误的结果?

时间:2015-10-10 12:06:17

标签: python

我试图创建一个简单的Python游戏,“更高或更低”。我对编程非常陌生,所以请给我任何改进。

这是我到目前为止所做的:

import random
score = 0

def check_choice(lastcard, newcard, userInput):
    if newcard >= lastcard:
        result = "higher"
    else:
        result = "lower"

    if result == userInput:
        print("Correct! \n")
        return True
    else:
        print("Incorrect! \n")
        return False

def generate_card():
    return str(random.randint(1,13))

def get_user_choice():
    choice = input("Please enter 'higher' or 'lower': ")
    return choice

def change_score(result):
    global score
    if result:
        score += 1
    else:
        score -= 1

def play_game():
    play = True
    card = generate_card()
    while play:
        print ("Current card is: " + card)
        choice = get_user_choice()
        if choice == "stop":
            play = False
        newcard = generate_card()
        result = check_choice(card, newcard, choice)
        change_score(result)
        card = newcard


play_game()

在大多数情况下,一切正常。游戏的大部分工作和返回"正确!"或"不正确!"根据用户的输入。但是,即使用户选择了正确的选择,它也会不时地报告错误。

例如,之前的卡是1.当用户输入更高时,下一张卡是13,但它报告的更高是不正确的。

2 个答案:

答案 0 :(得分:2)

结果是意外的,因为卡存储的是字符串,而不是整数:

\d

字符串比较词典:

def generate_card():
    return str(random.randint(1,13))

答案 1 :(得分:2)

您的卡片存储为字符串

def generate_card():
    return str(random.randint(1,13))

字符串比较不希望你在这里:

>>> '13' > '2'
False

这是一个lexicographic comparison,这是你想要的,例如,你按字母顺序排列东西。但是对于更高/更低的游戏,您需要进行数字比较。为此,您希望将卡保留为数字,并更改get_user_choice,以便将用户输入转换为数字:

def get_user_choice():
    choice = input("Please enter 'higher' or 'lower': ")
    return int(choice)