ZeroDivisionError:除以零

时间:2014-11-21 09:35:01

标签: python

我对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

2 个答案:

答案 0 :(得分:4)

 num2 = random.randrange(35)

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

 ans2 = num1 / num2
你可能想要这样的东西:

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

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


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

答案 1 :(得分:0)

Andre Holzner是对的。以下是一些基本用法示例:

>>> 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