简体   繁体   中英

Using the randint function and checking input

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

The program is supposed to determine 2 random numbers and put them together to create the lottery number. These 2 numbers should not be the same and the program should generate another 2 numbers to make a new lottery number, if these 2 numbers are the same. The program should not print the random numbers as this is the lottery winning number.

This is how the reward system would work if the lottery number was 53. If the person guesses the correct numbers in order (ie 53) the persons should win $10000 , if the person guesses the correct numbers in reverse order (ie 35) they should win $3000, and if they guess one of the numbers correctly (ie. 37 or 63 or 59 or 45), they should win $1000. Otherwise the program should print out (Try Again).

I basically want to know what how to fix my program (when the input is anything other then the input which wins them $10,000 the program fails because their is something wrong with the bolded line. I also want to know how to generate another lottery winning numbers if the 2 numbers randint generates is the same and I also want to know how to check the input to see if the input contains one of the lottery numbers.

There are a number of things that could be improved, but a few definite problems include:

  • In your long condition

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

    should be

     int(b[1])== int(a[1]) 
  • the condition for winning 3000 dollars should come before the condition for winning 1000 dollars. Since the condition for winning 1000 dollars is also True when the person is eligible for winning 3000 dollars.
  • the condition for winning 3000 dollars should be

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

    (notice the change in the last index), rather than

     int(b[1])==int(a[0]) and int(b[0])==int(a[0]) 
  • since you are really treating the response as strings rather than as ints, you might as well keep a and b as strings. Doing so means you can remove all the calls to int .

So a working version of your program with minimal changes would be:

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

An easier way to express the conditions would be:

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

Regarding len(set(b).intersection(a)) == 1 : When b is a string, set(b) is the set of characters in the string:

In [62]: b = '75'

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

Sets have an intersection method which can accept an iterable as input. It returns the set of items from the original set which are also in the iterable. For example,

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

So len(set(b).intersection(a)) counts the number of characters in b which are also in a (in any order). Requiring that this equals 1 means that there is exactly 1 match.

Work with strings and use variables with descriptive names, it makes it easier to read what the program does. Comments inline.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM