鱼C论坛

 找回密码
 立即注册
查看: 1380|回复: 18

请问这个代码怎么修改?不能正常结束。。

[复制链接]
发表于 2018-7-4 23:28:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 luoyingne 于 2018-7-5 23:07 编辑
  1. """
  2. 色子小游戏:
  3. 玩家压大小,赔率为1,玩家猜对玩家胜,玩家手中无筹码时游戏结束。
  4. 初始金额为10000
  5. """


  6. import random


  7. def funDice():
  8.     DiceTemp = []
  9.     for i in range(3):
  10.         DiceTemp.append(random.randrange(1,7))
  11.     return DiceTemp

  12. def funBigOrSmall(ndice,boolnum):
  13.     if 11 <= ndice <= 18 and boolnum == 'Big':
  14.         return True
  15.     else:
  16.         return False


  17. def funsum(listtemp):
  18.     n = 0
  19.     for each in listtemp:
  20.         n += each
  21.     return n


  22. def funGameStarts(money):
  23.     betmoney = money
  24.     print("<<<<<<  Game Starts  >>>>>>")
  25.     Guess = input("Big or Small:")
  26.     Bet   = input("How much you wanna bet ?  -")
  27.             
  28.     if Guess != 'Big' and Guess != 'Small' :
  29.         print("输入有误噢!")
  30.         funGameStarts(betmoney)
  31.             
  32.     elif int(Bet)> betmoney:
  33.         print("赌注不够噢")
  34.         funGameStarts(betmoney)
  35.             
  36.     else:
  37.         print("<<<<<<  Roll The Dice  >>>>>>")
  38.         Dicetemp = funDice()
  39.         print("The points is ",Dicetemp,end=' ')
  40.         if funBigOrSmall(funsum(Dicetemp),Guess) == True:
  41.             betmoney = betmoney+int(Bet)
  42.             print("You gained ",int(Bet),",you have ",betmoney,"now")
  43.             
  44.         else:
  45.             betmoney = betmoney-int(Bet)
  46.             print("You lose ",int(Bet),",you have ",betmoney,"now")
  47.                
  48.     if betmoney == 0:
  49.         print('Game over')
  50.         
  51.     else:
  52.         funGameStarts(betmoney)
  53.    
  54. funGameStarts(10000)


  55.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-7-4 23:57:35 | 显示全部楼层
先import sys
再在print('Game over')后加一行
sys.exit()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-5 21:36:45 | 显示全部楼层
冬雪雪冬 发表于 2018-7-4 23:57
先import sys
再在print('Game over')后加一行
sys.exit()

加了这个会跳出来,但是会有一大段异常提示,Traceback (most recent call last)
能否加以改进?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 21:41:42 | 显示全部楼层
luoyingne 发表于 2018-7-5 21:36
加了这个会跳出来,但是会有一大段异常提示,Traceback (most recent call last)
能否加以改进?

我这里没有出现错误提示,把完整的提示发上来(包括输入的内容)。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-5 22:03:34 | 显示全部楼层
<<<<<<  Game Starts  >>>>>>
Big or Small:Big
How much you wanna bet ?  -10000
<<<<<<  Roll The Dice  >>>>>>
The points is  [2, 1, 3] You lose  10000 ,you have  0 now
Game over
Traceback (most recent call last):
  File "F:\百度云同步盘\读书修养\Python学习\Python\betgame.py", line 64, in <module>
    funGameStarts(10000)
  File "F:\百度云同步盘\读书修养\Python学习\Python\betgame.py", line 59, in funGameStarts
    sys.exit()
SystemExit
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-5 22:04:36 | 显示全部楼层
冬雪雪冬 发表于 2018-7-5 21:41
我这里没有出现错误提示,把完整的提示发上来(包括输入的内容)。


<<<<<<  Game Starts  >>>>>>
Big or Small:Big
How much you wanna bet ?  -10000
<<<<<<  Roll The Dice  >>>>>>
The points is  [2, 1, 3] You lose  10000 ,you have  0 now
Game over
Traceback (most recent call last):
  File "F:\百度云同步盘\读书修养\Python学习\Python\betgame.py", line 64, in <module>
    funGameStarts(10000)
  File "F:\百度云同步盘\读书修养\Python学习\Python\betgame.py", line 59, in funGameStarts
    sys.exit()
SystemExit
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 22:07:39 | 显示全部楼层
这不是错误,是exit退出而非正常退出的提示。我用3.6.4版没有这个提示。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 22:15:03 | 显示全部楼层
又仔细看了你的程序,应该是可以正常结束的,不需要加上sys.exit()。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-5 22:20:55 | 显示全部楼层
冬雪雪冬 发表于 2018-7-5 22:15
又仔细看了你的程序,应该是可以正常结束的,不需要加上sys.exit()。

不能正常结束的,你可以试一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 22:27:44 | 显示全部楼层
刚刚运行的。
1.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 22:35:32 | 显示全部楼层
还是有BUG的时候,先把randint(1,7)改成6吧,,没有7点的骰子
1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 22:39:50 | 显示全部楼层
塔利班 发表于 2018-7-5 22:35
还是有BUG的时候,先把randint(1,7)改成6吧,,没有7点的骰子

这里没结束又开始了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-5 22:45:03 | 显示全部楼层
塔利班 发表于 2018-7-5 22:39
这里没结束又开始了

这里我可以改为randrange
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-5 22:46:38 | 显示全部楼层

你看下楼下的截图,虽然print Game Over,其实并没有结束的。 exit,用你的做法是跳出来了,只是在我这个版本会提示Traceback (most recent call last)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 22:53:01 | 显示全部楼层
luoyingne 发表于 2018-7-5 22:46
你看下楼下的截图,虽然print Game Over,其实并没有结束的。 exit,用你的做法是跳出来了,只是在我这个 ...

很奇怪,昨天我运行的也是不能结束,不知什么原因今天就可以了。
另外在不能确定下注次数的情况下,不建议用递归,以免溢出。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-5 22:55:51 | 显示全部楼层
冬雪雪冬 发表于 2018-7-5 22:53
很奇怪,昨天我运行的也是不能结束,不知什么原因今天就可以了。
另外在不能确定下注次数的情况下,不建 ...

是啊,很奇怪。。另我那边又提了个问题,程序里面还有个大BUG,晕菜。 感觉好难学呀~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 23:06:06 | 显示全部楼层
我知道错误了,你的输入赌注超的时候函数跳了出去重新进来,但是没运行到底,等递归回来,保留了你之前输错时候的钱数,然后继续开盘
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 23:16:55 | 显示全部楼层
if betmoney == 0:
        print('Game over')
        return 0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-5 23:17:07 | 显示全部楼层
替你改了,不用递归。只是简单的试了,不知有没有bug
  1. import random

  2. def funDice():
  3.     return [random.randint(1,6) for i in range(3)]

  4. def funBigOrSmall(ndice,boolnum):
  5.    
  6.     if (ndice <= 9 and boolnum == 'S') or (9 < ndice <= 18 and boolnum == 'B'):
  7.         return True
  8.     else:
  9.         return False
  10.    
  11. def funGameStarts(money):
  12.     while True:
  13.         print("<<<<<<  Game Starts  >>>>>>")
  14.         while True:
  15.             Guess = input("B(Big) or S(Bmall):") #简化一下,只输入一个字母
  16.             Guess = Guess.upper()
  17.             if Guess  in ['B', 'S']:
  18.                 break
  19.             print("输入有误噢!")
  20.         Bet = int(input("How much you wanna bet ?  -"))
  21.         if Bet > money:
  22.             print("赌注不够噢")
  23.             break
  24.         print("<<<<<<  Roll The Dice  >>>>>>")
  25.         Dicetemp = funDice()
  26.         print("The points is ",Dicetemp,end=' ')
  27.         if funBigOrSmall(sum(Dicetemp),Guess):
  28.             money = money + Bet
  29.             print("You gained ", Bet,",you have ", money,"now")
  30.             
  31.         else:
  32.             money = money-Bet
  33.             print("You lose ",Bet,",you have ",money,"now")
  34.         if money == 0:
  35.             print('Game over')
  36.             break

  37. funGameStarts(10000)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 14:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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