啄眷鸟 发表于 2021-12-31 20:16:03

新手提问:怎样处理Value Error

我对小甲鱼在零基础入门学习python课上设计的猜数字小游戏进行了一点点改进,改进如下:

print("""用Python设计的第一个游戏改进后的版本""")
import time
import random

counts = 1
temps = input("要开始游戏吗?")
guesss =str(temps)
if guesss == "要":
      answer = random.randint(1,100)
elif guesss == "我要玩加强版":
      print("好的")
      answer = random.randint(1,1000)

else :
      print("这么菜还是玩普通版吧")
      answer = random.randint(1,100)
temp = input("不妨猜一下我现在心里想的是那个数字吧:")
guess = int(temp)
while counts > 0:
    if guess == answer:
      print("呀,还真被你猜中了呢。")
      print("你用了"+str(counts)+"次猜出这个数字")
      if counts == 1:
         print("一次就猜中了!!!")
         print("达成成就:第一次的经历")
      else:
         print("哼,猜中了也没奖励~")
      temps = input("还要玩吗")
      guesss =str(temps)
      if guesss == "要":
         answer = random.randint(1,100)
         counts = 1
         temp = input("不妨猜一下我现在心里想的是那个数字吧:")
         guess = int(temp)
         continue
      elif guesss == "我要玩加强版":
         answer = random.randint(1,1000)
         counts = 1
         temp = input("不妨猜一下我现在心里想的是那个数字吧:")
         guess = int(temp)
         continue
      elif guesss == "不要":
         print("好吧")
      break
    else:
      if guess < answer:
            print("小啦~")
            if counts == 5:
                print("猜了五次还没猜出来,没什么默契呢。")
            elif counts == 10:
                print("猜了十次还没猜出来,没意思。")
                print("不想玩了")
                temps = input("要重玩吗")
                guesss =str(temps)
                if guesss == "要":
                      answer = random.randint(1,100)
                      counts = 1
                      temp = input("不妨猜一下我现在心里想的是那个数字吧:")
                      guess = int(temp)
                      continue
                elif guesss == "我要玩加强版":
                      answer = random.randint(1,1000)
                      counts = 1
                      temp = input("不妨猜一下我现在心里想的是那个数字吧:")
                      guess = int(temp)
                      continue
                else :
                      print("这么菜还是别玩了")
                      break
      elif guess == 789456123:
            print(answer)
            counts = counts -1
      else:
            print("大了~")
            if counts == 5:
                print("猜了五次还没猜出来,没什么默契呢。")
            elif counts == 10:
                print("猜了十次还没猜出来,没意思。")
                print("不想玩了")
                temps = input("要重玩吗")
                guesss =str(temps)
                if guesss == "要":
                   answer = random.randint(1,100)
                   counts = 1
                   temp = input("不妨猜一下我现在心里想的是那个数字吧:")
                   guess = int(temp)
                   continue
                elif guesss == "我要玩加强版":
                   answer = random.randint(1,1000)
                   counts = 1
                   temp = input("不妨猜一下我现在心里想的是那个数字吧:")
                   guess = int(temp)
                   continue
                else:
                  print("这么菜还是别玩了")
                  break
      temp = input("猜一猜我现在心里想的是那个数字吧:")
      guess = int(temp)
      counts=counts + 1

print("游戏结束,我不玩了^_^")
print("程序即将关闭")
time.sleep(5)

本人是纯粹的电脑新手,所以代码可能不是很简洁,不过我的问题不是怎么让它更简洁(当然如果愿意帮我改进那简直太好了。),而是我发现了这样一个问题:

temp = input("不妨猜一下我现在心里想的是那个数字吧:")
guess = int(temp)

此处如果输入的不是一个数字的话,就会提示Value Error,
作为一个为玩家着想的设计者,我希望这里如果玩家没输入数字也不会报错,而是提示玩家应该输入一个数字。
但遗憾的是我不清楚怎么处理这个问题(我啥也不会)
有人可以帮助我吗?

Amayakite 发表于 2021-12-31 21:03:30

本帖最后由 Amayakite 于 2021-12-31 21:11 编辑

捕获异常就可以解决,Python是弱类型语言...如果是初学者个人建议先学其他 例如C++、Java、C#之类的强类型语言打下基础...

大概流程如下,应该比较好看懂吧..
import random

print("开始游戏吧")
minNumber=1
maxNumber=100
errCount=0
userInput = input("是否要开始游戏(Y/N):").lower()
errMessage=""
winCount=0
while userInput=='y':
    print("猜数字开始")
    randomInt = random.randint(minNumber,maxNumber)
    print(
      f"悄悄的告诉你,这个数值在{randomInt-random.randint(1,10)}到{randomInt+random.randint(1,10)}之间\n开始输入吧~")
    userInput=input("请输入数值:")
    try:
      userInput=int(userInput)
      if randomInt==userInput:
            winCount+=1
            print(f"恭喜!回答正确,当前已经回答正确{winCount}次")
      else:
            print("回答错误")
            errCount+=1
            print(f"正确答案是{randomInt},当前已经回答错误{errCount}次")
            if(errCount>=5) :
                print("错误次数打到了五次,游戏退出")
                break;
      userInput = input("是否要继续游戏(Y/N):").lower()
    except:
      print("请输入正确的值")
      print("请重新游玩")
      userInput="y"
      
   
print(f"游戏结束,本次游玩胜利{winCount}次,失败{errCount}次")

啄眷鸟 发表于 2021-12-31 21:14:55

Amayakite 发表于 2021-12-31 21:03
捕获异常就可以解决,Python是弱类型语言...如果是初学者个人建议先学其他 例如C++、Java、C#之类的强类型 ...

感谢回答,我初步理解了该怎么处理这个问题,我的问题已经被解决了,我会把你的回答复制下来细细研究的,多谢多谢。

Amayakite 发表于 2021-12-31 21:34:31

啄眷鸟 发表于 2021-12-31 21:14
感谢回答,我初步理解了该怎么处理这个问题,我的问题已经被解决了,我会把你的回答复制下来细细研究的, ...

不客气,看到你另外一个帖子的问题了,也一起说下吧,当然都是个人观点
如果你考虑大学往游戏开发方面琢磨,建议是先去学习C++,计算机基础需要在这之前学习,学习完C++根据个人兴趣选择是否学习下C#(建议是学下C#)
然后就是算法 和 数据结构这一块得花时间去了解
算法非常重要...
接着就是根据个人兴趣选择U3D或者C4D引擎来开发游戏(这个过程中如果没有工具人帮忙,还需要学习对应的设计,如建模等)
你在这之中应该会发现算法非常有用,合理的配上线程能解决游戏开发中很多让人痛苦的问题
然后你可以根据自己的兴趣来选择后台服务器的语言,例如Java、C++、C#、GoLang、Python等 这里你会接触到Linux操作系统 和网络之传输间基于TCP/IP的各种协议 会开始了解如何处理一堆用户访问服务器的解决方案
Python入门并不是一个明智的选择,有很多偏向于底层的东西没法清晰的了解
学好这些并不简单,遇到的坑会非常多...
先祝你金榜题名

啄眷鸟 发表于 2021-12-31 21:47:22

Amayakite 发表于 2021-12-31 21:34
不客气,看到你另外一个帖子的问题了,也一起说下吧,当然都是个人观点
如果你考虑大学往游戏开发方面琢 ...

我觉得你说的很有道理,我学Python一部分原因是我朋友给我推荐了小甲鱼讲Python的视频,十分的生动好懂。
如果Python入手不是好选择的话,我会去看看小甲鱼C语言以及C++的视频的。我假期太短啦!!!完全没有时间,而且学业紧张,只能花一点点时间来提前学一下。
感谢你的祝福,如果可以的话可不可以教教我怎么导入Python之类网上下载的函数(笑(● ̄(エ) ̄●)),我已经晕头转向了

Amayakite 发表于 2021-12-31 22:35:10

啄眷鸟 发表于 2021-12-31 21:47
我觉得你说的很有道理,我学Python一部分原因是我朋友给我推荐了小甲鱼讲Python的视频,十分的生动好懂。 ...

Python是通过pip包管理工具来管理的包..
包里面是具有开源精神的人写的成套的代码,提供一个接口或者多个接口给你处理对应的事情
包括你现在在用的importrandom 也是一个包,也就是你眼中的Module
Python的pip包管理工具可以自行百度该如何使用,可以通过它来导入第三方的包,但通过它install的包该怎么用就是另外一码事情了
基本上所有语言都有对应的包管理系统
页: [1]
查看完整版本: 新手提问:怎样处理Value Error