繁体   English   中英

关于我的更高或更低数字猜谜游戏的问题

[英]Issue on my higher or lower number guessing game

import random
from random import randint
import string

computer = random.randint(0, 50)

player = False

while player == False:
    player = input("Choose number 1-50: ")
    if player == computer:
        print("Well Done!")
    elif player < computer:
        print("Higher")
    else:
        print("Lower")

在代码的“<”部分,我收到消息“TypeError: '<' not supported between instances of 'str' and 'int'”。 有想法该怎么解决这个吗?

这是python的基本概念之一。 当您在 python 中输入时,它将存储为字符串而不是数字。 即使用户输入了一个数字,它也会被转换为字符串。

例如,如果随机数是5并且用户也输入了 5,它会将 5 与“5”进行比较,因为它们都是不同的数据类型(str 和 int)。

为了使您的程序正常工作,请将行从

player = input("Choose number 1-50: ")

player = int(input("Choose number 1-50: "))

通过将input("Choose number 1-50: ")放入int()您将其转换为int数据类型。

它现在可以工作了。

您的代码中有两个错误。

  1. input返回用户在键盘上键入的原始字符串,变量player获取此值。即 str。 因此,导致了 TypeError。
  2. 这是一个逻辑错误。 即使你改变
    player = input("Choose number 1-50: ")

    player = int(input("Choose number 1-50: "))
    您的程序将无法按您的意愿运行。 执行以下行后
    player = int(input("Choose number 1-50: ")) ,
    player将始终包含一个integer数值。 如果用户键入非零数字,则循环可以提前停止,因为non-zero int != False 你应该添加
    player = (player==computer)
    在最后一个 else 块下 while 之后。 该行会将玩家的 int 值与计算机的猜测进行比较,并覆盖现在将是布尔值的玩家 var。 如果它与计算机的值匹配,则为True ,否则为False

基本上我们将 var player用于两个目的:

  1. 存储用户在键盘上键入的integer数值。
  2. 作为一个布尔标志来检查用户的值是否等于计算机的猜测。

进行这些更改后,您的代码应如下所示:

...
while player == False:
    player = int(input("Choose number 1-50: "))
    ... # if else blocks
    player = (player == computer) # check if player == computer or not

代替

input("Choose number 1-50: ")

和:

int(input("Choose number 1-50: "))

暂无
暂无

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

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