鱼C论坛

 找回密码
 立即注册
查看: 1150|回复: 5

[已解决]新手提问:怎样处理Value Error

[复制链接]
发表于 2021-12-31 20:16:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我对小甲鱼在零基础入门学习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,
作为一个为玩家着想的设计者,我希望这里如果玩家没输入数字也不会报错,而是提示玩家应该输入一个数字。
但遗憾的是我不清楚怎么处理这个问题(我啥也不会)
有人可以帮助我吗?
最佳答案
2021-12-31 21:03:30
本帖最后由 Amayakite 于 2021-12-31 21:11 编辑

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

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

  2. print("开始游戏吧")
  3. minNumber=1
  4. maxNumber=100
  5. errCount=0
  6. userInput = input("是否要开始游戏(Y/N):").lower()
  7. errMessage=""
  8. winCount=0
  9. while userInput=='y':  
  10.     print("猜数字开始")
  11.     randomInt = random.randint(minNumber,maxNumber)
  12.     print(
  13.         f"悄悄的告诉你,这个数值在{randomInt-random.randint(1,10)}到{randomInt+random.randint(1,10)}之间\n开始输入吧~")
  14.     userInput=input("请输入数值:")
  15.     try:
  16.         userInput=int(userInput)
  17.         if randomInt==userInput:
  18.             winCount+=1
  19.             print(f"恭喜!回答正确,当前已经回答正确{winCount}次")
  20.         else:
  21.             print("回答错误")
  22.             errCount+=1
  23.             print(f"正确答案是{randomInt},当前已经回答错误{errCount}次")
  24.             if(errCount>=5) :
  25.                 print("错误次数打到了五次,游戏退出")
  26.                 break;
  27.         userInput = input("是否要继续游戏(Y/N):").lower()
  28.     except:
  29.         print("请输入正确的值")
  30.         print("请重新游玩")
  31.         userInput="y"
  32.         
  33.    
  34. print(f"游戏结束,本次游玩胜利{winCount}次,失败{errCount}次")

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-31 21:03:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Amayakite 于 2021-12-31 21:11 编辑

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

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

  2. print("开始游戏吧")
  3. minNumber=1
  4. maxNumber=100
  5. errCount=0
  6. userInput = input("是否要开始游戏(Y/N):").lower()
  7. errMessage=""
  8. winCount=0
  9. while userInput=='y':  
  10.     print("猜数字开始")
  11.     randomInt = random.randint(minNumber,maxNumber)
  12.     print(
  13.         f"悄悄的告诉你,这个数值在{randomInt-random.randint(1,10)}到{randomInt+random.randint(1,10)}之间\n开始输入吧~")
  14.     userInput=input("请输入数值:")
  15.     try:
  16.         userInput=int(userInput)
  17.         if randomInt==userInput:
  18.             winCount+=1
  19.             print(f"恭喜!回答正确,当前已经回答正确{winCount}次")
  20.         else:
  21.             print("回答错误")
  22.             errCount+=1
  23.             print(f"正确答案是{randomInt},当前已经回答错误{errCount}次")
  24.             if(errCount>=5) :
  25.                 print("错误次数打到了五次,游戏退出")
  26.                 break;
  27.         userInput = input("是否要继续游戏(Y/N):").lower()
  28.     except:
  29.         print("请输入正确的值")
  30.         print("请重新游玩")
  31.         userInput="y"
  32.         
  33.    
  34. print(f"游戏结束,本次游玩胜利{winCount}次,失败{errCount}次")

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢回答,我初步理解了该怎么处理这个问题,我的问题已经被解决了,我会把你的回答复制下来细细研究的,多谢多谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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入门并不是一个明智的选择,有很多偏向于底层的东西没法清晰的了解
学好这些并不简单,遇到的坑会非常多...
先祝你金榜题名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我觉得你说的很有道理,我学Python一部分原因是我朋友给我推荐了小甲鱼讲Python的视频,十分的生动好懂。
如果Python入手不是好选择的话,我会去看看小甲鱼C语言以及C++的视频的。我假期太短啦!!!完全没有时间,而且学业紧张,只能花一点点时间来提前学一下。
感谢你的祝福,如果可以的话可不可以教教我怎么导入Python之类网上下载的函数(笑(● ̄(&#65396;) ̄●)),我已经晕头转向了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

Python是通过pip包管理工具来管理的包..
包里面是具有开源精神的人写的成套的代码,提供一个接口或者多个接口给你处理对应的事情
包括你现在在用的import  random 也是一个包,也就是你眼中的Module
Python的pip包管理工具可以自行百度该如何使用,可以通过它来导入第三方的包,但通过它install的包该怎么用就是另外一码事情了
基本上所有语言都有对应的包管理系统
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 15:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表