2013-10-11 62 views
0
from random import randint 
firstnumber=randint (1,9) 
print(firstnumber) 
secondnumber=randint (1,9) 
print(secondnumber) 
a= str(firstnumber) + str(secondnumber) 
print (a) 
numbers= input("Enter 2 numbers") 

b = int(numbers) 
if b== int(a): 
     print ("You have won 10000 dollars") 
elif int(b[1])==int(a[0]) and int(b[0])==int(a[0]): 
     print ("You have won 3000 dollars") 
**elif int(b[0])== int(a[0]) or int(b[0])==int(a[1]) or int(b[1])==int(a[0]) or int(b[1])== int[1]:** 
     print ("You have won 1000 dollars") 
else: 
     print ('Try again') 

该程序应该确定2个随机数并将它们放在一起以创建彩票号码。这两个数字不应该相同,如果这两个数字相同,程序应该生成另外两个数字来创建一个新的彩票号码。该程序不应该打印随机数字,因为这是彩票中奖号码。使用randint函数和检查输入

如果彩票号码是53,奖励系统将如何工作。如果该人按顺序猜测正确的号码(即53),那么如果该人以相反的顺序猜出正确的号码(即53),则该人应该赢得$ 10000。 35)他们应该赢得3000美元,如果他们猜对了其中一个数字(即37或63或59或45),他们应该赢得1000美元。否则,程序应该打印出来(再试一次)。

我基本上想知道如何解决我的程序(当输入是其他的输入,赢得他们$ 10,000的程序失败,因为他们是粗体行错了,我也想知道如何产生如果2个数字randint生成另一个彩票中奖号码是相同的,我也想知道如何检查输入,看看输入是否包含其中一个彩票号码

+1

除非你告诉我们,否则我们不知道你的程序有什么问题。 –

+1

'b'是一个整数('b = int(numbers)'),所以'b [0]'不起作用。宁愿留下一个字符串,这会让事情变得更容易。 –

回答

2

有很多事情可以改进,但一些确定的问题包括:

  • 在你长期的状况下

    int(b[1])== int[1] 
    

    应该

    int(b[1])== int(a[1]) 
    
  • 赢得3000美元应该来 之前赢得1000美元的条件的情况。由于获得1000美元的条件为 也是正确的,当该人有资格获得3000美元时获得 。
  • 赢得3000美元的条件应该是

    int(b[1])==int(a[0]) and int(b[0])==int(a[1]) 
    

    (注意在最后指数的变化),而不是

    int(b[1])==int(a[0]) and int(b[0])==int(a[0]) 
    
  • ,因为你真的治疗的响应字符串而不是 作为整数,你不妨保留ab作为字符串。这样做意味着您可以删除所有对int的呼叫。

所以工作 版本的程序以最小的变化将是:

from random import randint 
firstnumber = randint(1, 9) 
print(firstnumber) 

secondnumber = randint(1, 9) 
print(secondnumber) 

a = str(firstnumber) + str(secondnumber) 
print(repr(a)) 

b = raw_input("Enter 2 numbers") 
print(repr(b)) 

if b == a: 
    print ("You have won 10000 dollars") 
elif b[1] == a[0] and b[0] == a[1]: 
    print ("You have won 3000 dollars") 
elif (b[0] == a[0] 
     or b[0] == a[1] 
     or b[1] == a[0] 
     or b[1] == a[1]): 
    print ("You have won 1000 dollars") 
else: 
    print ('Try again') 

表达的条件更简单的方法是:

if b == a: 
    print ("You have won 10000 dollars") 
elif a == b[::-1]: 
    print ("You have won 3000 dollars") 
elif len(set(b).intersection(a)) == 1: 
    print ("You have won 1000 dollars") 
else: 
    print ('Try again') 

关于len(set(b).intersection(a)) == 1:当b是一个字符串,set(b)是该组中的字符串中的字符:

In [62]: b = '75' 

In [63]: set(b) 
Out[63]: {'5', '7'} 

集具有可以接受一个可迭代作为输入的交叉方法。它从原始集合中返回也在迭代中的项目集合。例如,

In [64]: set('75').intersection('5') 
Out[64]: {'5'} 

In [65]: set('75').intersection('baloney') 
Out[65]: set() 

In [66]: set('75').intersection('57') 
Out[66]: {'5', '7'} 

In [67]: set('75').intersection([5]) # strings and ints are not equal 
Out[67]: set() 

所以len(set(b).intersection(a))计数的字符在b其也是在a(以任何次序)的数目。要求这等于1意味着恰好有一个匹配。

+0

您能解释一下您对程序所做的更改,以检查用户是否正确猜测了1位数 – user2821664

0

使用字符串并使用具有描述性名称的变量,它使更容易阅读程序的功能。内嵌评论。

from random import randint 
firstnumber=randint (1,9) 
print(firstnumber) 
secondnumber=randint (1,9) 
print(secondnumber) 
a= str(firstnumber) + str(secondnumber) 
print (a) 
# change to raw_input - numbers will be a string 
numbers= raw_input("Enter 2 numbers") 

# split the numbers up - 1st digit, second digit 
lottery1, lottery2 = a[0], a[1] 
guess1, guess2 = numbers[0], numbers[1] 

# apply your logic 
# both digits, correct order 
if lottery1 == guess1 and lottery2 == guess2: 
    print ("You have won 10000 dollars") 
# both digits, reverse order 
elif lottery1 == guess2 and lottery2 == guess1: 
    print ("You have won 3000 dollars") 
# one digit 
elif guess1 in (lottery1, lottery2) or guess2 in (lottery1, lottery2): 
    print ("You have won 1000 dollars") 
else: 
    print ('Try again')