【问题标题】:ZeroDivisionError: division by zeroZeroDivisionError:除以零
【发布时间】:2014-11-21 17:51:55
【问题描述】:

我对 python 编码相当陌生,当我尝试运行我的 python 脚本时出现此错误,谁能告诉我我在这里做错了什么? 我正在尝试制作一个数学竞赛程序,它应该首先询问两个玩家的名字,然后继续给每个玩家一个问题,直到两个玩家都回答了 10 个问题。之后,它应该显示每个玩家的得分,并告诉他们谁是获胜者。

 ## Maths Competition ##
import sys
import time
import random
p1_score = 0
p2_score = 0
main_loop = 'y'
loop = 'y'
if sys.platform == 'darwin':
    print('Welcome Mac user')
elif sys.plaform == 'win32' or 'win64':
    print('Welcome Windows user')
else:
    print('Welcome Linux user')
time.sleep(2)
print('This is a two player maths competition game, Player 1, please enter your name.')
p1_name = input()
print('now player 2 please..')
p2_name = input()
print('Processing...')
time.sleep(2)
print(p1_name+''' will first be given a random maths question,
they then have to answer that question or just press enter if they can't get it.
Then '''+ p2_name +''' will be given a question and they have to do the same thing. Each
time a player gets an answer correct, 10 points are automatically added to their score.
Each player will be given 10 questions in total, in the end, the one with the most right
answers will win. If it is a draw, a penalty round will happen, enjoy
Ps. '**' means 'to the power off'. ''')
time.sleep(5)
while main_loop == 'y':
    num_of_tries = 0
    while loop == 'y':
     num_of_tries = num_of_tries + 1
     if num_of_tries >20:
         break
     ops = ['x','/','+','-','**']
     num1 = random.randrange(100)
     num2 = random.randrange(35)
     sel_op = random.choice(ops)
     print(p1_name+', please press enter once you are ready to get your question')
     input()
     if sel_op == 'x':
         ans = num1 * num2
     elif sel_op == '/':
         ans = num1 / num2
     elif sel_op == '+':
         ans = num1 + num2
     elif sel_op == '-':
         ans = num1 - num2
     elif sel_op == '**':
         ans = num1 ** num2
     p1_ans = input('Your question is: %d %s %d' % (num1,sel_op,num2))
     if p1_ans == ans:
         p1_score = p1_score + 10
     num1 = random.randrange(100)
     num2 = random.randrange(35)
     sel_op = random.choice(ops)
     print(p2_name+', please press enter once you are ready to get your question')
     input()
     if sel_op == 'x':
         ans2 = num1 * num2
     elif sel_op == '/':
         ans2 = num1 / num2
     elif sel_op == '+':
         ans2 = num1 + num2
     elif sel_op == '-':
         ans2 = num1 - num2
     elif sel_op == '**':
         ans2 = num1 ** num2
     p2_ans = input('Your question is: %d %s %d' % (num1,sel_op,num2))
     if p2_ans == ans2:
         p2_score = p2_score + 10
    print(p1_name+' got %d' % (p1_score))
    print(p2_name+' got %d' % (p2_score))
    if p1_score > p2_score:
         print(p1_name+' is the WINNER!')
    elif p2_score > p1_score:
         print(p2_name+' is the WINNER!')
    print('Would you like to play another? y/n')
    repeat = input()
    if any ( [repeat == 'y', repeat == 'Y'] ):
         print('Sure thing, wait a couple of seconds for me to set things up again...')
         time.sleep(3)
    elif any ( [repeat == 'n', repeat == 'N'] ):
         break
    else:
         print('I\'ll take that as a NO')
         time.sleep(2)
         break

【问题讨论】:

  • 运行代码时有什么问题?任何错误或错误答案?!

标签: python


【解决方案1】:
 num2 = random.randrange(35)

可以给你零,并会导致在这一行被零除:

 ans2 = num1 / num2

你可能想要这样的东西:

 random.randrange(start = 1, stop = 35 + 1)

这将生成 1 到 35 之间的数字(包括两者)。


附注:除非您希望用户输入浮点数,例如 0.8333333333333334(这很可能不完全等于您的程序中计算的值)进行除法(假设您使用的是 python3),否则它是最好为结果和除数抛出一个值,然后从中计算除数。

【讨论】:

    【解决方案2】:

    安德烈霍尔兹纳是正确的。以下是一些基本用法示例:

    >>> random.random() # Random float x, 0.0 <= x < 1.0 0.37444887175646646

    >>> random.uniform(1, 10) # Random float x, 1.0 <= x < 10.0 1.1800146073117523

    >>> random.randint(1, 10) # Integer from 1 to 10, endpoints included 7

    >>> random.randrange(0, 101, 2) # Even integer from 0 to 100 26

    >>> random.choice('abcdefghij') # Choose a random element 'c'

    >>> items = [1, 2, 3, 4, 5, 6, 7]
    >>> random.shuffle(items)
    >>> items
    [7, 3, 2, 5, 6, 4, 1]
    

    >>> random.sample([1, 2, 3, 4, 5], 3) # Choose 3 elements [4, 1, 5]

    要了解更多关于随机这里是Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多