我一辈子都无法修复我无尽的循环



我正在制作一个掷骰子器来掷两个骰子并给出总数,一旦用户提示n再掷一个骰子,它就会停止,我遇到的问题是脚本永远掷两个丁,而没有提示选择2,请帮助。

print('Dice Roller')
print()
choice1 = 'y'
choice2 = 'y'
choice1 = input('Roll the dice? (y/n): ')
while choice1 == 'y':
import random
possibleResults = [1, 2, 3, 4, 5, 6]
result1 = random.choice(possibleResults)
result2 = random.choice(possibleResults)
total = (result1 + result2)
print('Die 1: ', str(result1))
print('Die 2: ', str(result2))
print('Total: ', total)
print()
if (result1, result2) == 1:
print('Snake eyes!')
print()
elif (result1, result2) == 6:
print('Boxcars!')
print()
choice2 = print('Roll again? (y/n): ')
if choice2 == 'y':
continue
else:
break

两个主要问题是ìf语句的条件永远不会为真,然后您在请求输入时使用print()

您可以将if上的条件更改为:

if (result1, result2) == (1, 1):

或:

if result1 == 1 and result2 == 1:

你再次要求选择的行,你应该改为:

choice2 = input('Roll again? (y/n): ')

就像你第一次要求输入一样。

在那之后,这似乎对我有效,但你仍然只是问他们是否应该在你打出双6时继续。你可能想把它从elif中去掉,这样它就会在每次滚动后询问。您也使用两个choice变量,然后使用一个if退出循环,但因为您使用循环条件中的第一个变量,所以可以重用该变量并获得相同的效果。类似于:

print('Dice Roller')
print()
choice = 'y'
choice = input('Roll the dice? (y/n): ')
while choice == 'y':
import random
possibleResults = [1, 2, 3, 4, 5, 6]
result1 = random.choice(possibleResults)
result2 = random.choice(possibleResults)
total = result1 + result2
print('Die 1: ', str(result1))
print('Die 2: ', str(result2))
print('Total: ', total)
print()
if (result1, result2) == (1, 1):
print('Snake eyes!n')
elif (result1, result2) == (6, 6):
print('Boxcars!n')

choice = input('Roll again? (y/n): ')

这些条件永远不可能为真:

if (result1, result2) == 1:
print('Snake eyes!')
elif (result1, result2) == 6:
print('Boxcars!')

因为元组不能等于一个int。相反,你可能想做:

if (result1, result2) == (1, 1):
print('Snake eyes!')
elif (result1, result2) == (6, 6):
print('Boxcars!')

或者,你可以做一些类似的事情:

if total == 2:
print('Snake eyes!')
elif total == 12:
print('Boxcars!')

还需要注意的是,您在boxcars后再次滚动的提示实际上并不是来自用户的input。如果您只获得该输入,并简单地将其分配给while循环谓词所基于的变量(而不是具有两个不同的变量,这是不必要的复杂(,则不需要显式地将continuebreak指定为循环。

还有几个小注意事项:我建议使用random.randint而不是硬编码列表中的random.choice,我还建议一开始就把结果放在元组中,而不必在很多地方把它重新构造为result1, result2

import random
print('Dice Rollern')
choice = input('Roll the dice? (y/n): ')
while choice == 'y':
results = random.randint(1, 6), random.randint(1, 6)
total = sum(results)
for i, result in enumerate(results, 1):
print(f'Die {i}: {result}')
print(f'Total: {total}n')
if total == 2:
print('Snake eyes!n')
elif total == 12:
print('Boxcars!n')
choice = input('Roll again? (y/n): ')

最新更新