我想让一个程序正常运行。我几乎拥有它,但有些事情仍会导致错误。
主要思想是程序会做这些事情:
示例:
Insert % of free throws: 45
1. throw hits
2. throw hits
3. throw misses
4. throw hits
...
997. throw misses
998. throw misses
999. throw hits
1000. throw misses
Hits 458 throws.
我创造了这个:
from random import randint
percent = int(input("Insert % of free throws: "))
var = 1
hits = 0
while var < 1000:
if randint(1, 100) <= percent:
var = var + 1
print(str(var) + '. throw hits')
hits = hits + var
else:
print(str(var) + '. throw misses')
print("Hits " + str(hits) + " throws.")
但是有一些错误。首先,如果我插入0%然后它会变得疯狂,第二个是,命中计数是荒谬的 - 比如500500等等。我知道 var!= 0 ,但它仍然无法正常工作,对我来说,计算事物仍然是个谜。我曾尝试过,但是已经试过了。在var之前和之后它仍然没有工作。 任何人都有想法让我走上正轨吗?
答案 0 :(得分:1)
问题是,当你受到攻击时,你只会递增var
,你应该为每次投掷增加它。所以只需使用一个简单的for
循环。
每次点击时,您应该将hits
增加1,而不是var
。
for var in range(1, 1001):
if randint(1, 100) <= percent:
hits += 1
print(str(var) + '. throw hits')
else:
print(str(var) + '. throw misses')
print ("Hits " + str(hits) " throws.")
请注意,range()
不包含范围内的结束编号,因此要从var = 1
开始获得1,000次抛出,您必须使用1001
作为结束。
答案 1 :(得分:1)
巴马尔了解了结果值出现奇怪的原因,所以让我挑选一些要点进行审核,因为这是一个说明性的代码示例。
&#34;标准&#34;在Python中进行加权分配的方法是:
random.random() < pct
当pct是1的分数时,例如45% - > 1。 0.45。这会将您的代码更改为:
percent = int(input("Insert % of free throws: ")) / 100
...
if random.random() < percent:
...
其他挑剔包括尽可能避免while
循环。您在Python中需要while
循环并不是while True
,这种情况很少见。使用for
循环,尤其是因为您正在尝试跟踪循环索引!将其与其他一些调整相结合,你得到......
hitcount = 0
for i in range(1, 1001): # loop from 1 -> 1000 inclusive
if random.random() < percent:
hitcount += 1
msg = "{}. throw hits".format(i)
else:
msg = "{}. throw misses".format(i)
print(msg)
print("Hit {} throws.".format(hitcount))
值得注意的是,这使用str.format
而不是使用%
运算符构建字符串。这是首选。