4

私はプログラミングが初めてで、Pythonを使用して入門クラスを受講して学習しようとしています。

私の任務の 1 つでは、次のことを行う必要があります。

  1. ランダムに生成された 2 桁の整数とユーザーが生成した 2 桁の整数を比較します。

    1. ランダムな整数とユーザーが生成した整数の両方が一致する場合、印刷 blah1
    2. ユーザーが生成した整数が、逆にランダムに生成された整数と同じ 2 桁である場合は、blah2 を出力します。
    3. ユーザーが生成した整数に、ランダムに生成された整数と同じ数字が 1 桁ある場合は、blah3 を出力します。

これまでのところ、基本的なこと (演算子、if/ else/ elifwhileループ、印刷、文字列、整数)しか学習していません。

ランダムに 2 桁を割り当て、それらを文字列に変換し、それらを 2 桁の文字列に連結するものを思いつきました。ここから、elif考えられる各条件に一致するステートメントを使用しました。

残念ながら、それは必須ではありません。比較を行うときは、2 桁の整数を使用する必要があります。残念ながら、整数の一部を比較する方法、または整数を教えられたものと逆にする方法はまったくわかりません。

今、私はこれを解決してくれる人を探していません。私が持っている基本的な知識でこれについてどのように考えるべきかについてのヒントまたは提案の助けが欲しい.

どんな助けでも大歓迎です。

私が書いたコードを含めました。

# homework 2
# problem 1
#
# lottery guessing program
#
# the program randomly generates a two-digit number, prompts the user to enter a two-digit number,
# and determines whether the user wins according to the following rules:
#
# 1. if both digits match in the right order, you will win $10,000.
# 2. if both digits match, but in the reversed order, you will win $3,000.
# 3. if you match one digit in either place, you will win $1,000

#imports
import random

#rules
print("guess a number.  if both digits match in the right order, you will win $10,000."\
      "\nif both digits match, but in the reversed order, you will win $3,000." \
      "\nif you match one digit in either place, you will win $1,000." \
      "\nif you don't match any digits, you do not win anything.")

# random variables
rand_num1 = str(random.randint(1,9))
rand_num2 = str(random.randint(1,9))

#ask user for number
user_num1 = input("what is your first number? ")
user_num2 = input("what is your second number? ")

#for testing purposes, if testing, comment out the previous two lines
#combd_num = (str(rand_num1)) + (str(rand_num2))
#revsd_num = (str(rand_num2)) + (str(rand_num1))
#print(rand_num1)
#print(rand_num2)
#print(combd_num)
#print(revsd_num)
#user_num1 = input("what is your first number? ")
#user_num2 = input("what is your second number? ")
#ucomb_num = (str(user_num1)) + (str(user_num2))

#output the numbers
print("the number is, ", (rand_num1 + rand_num2),"\
      \nyour number is, ", (user_num1 + user_num2), sep="")

#elif statement
if (user_num1 + user_num2) == (rand_num1 + rand_num2):
    print("you guessed the exact number.  you win $10,000!")
elif (user_num2 + user_num1) == (rand_num1 + rand_num2):
    print("you guessed both digits but in reverse.  you win $3,000!")
elif user_num1 == rand_num1 and user_num2 != rand_num2:
    print("you guessed one digit right.  you win $1,000!")
elif user_num1 == rand_num2 and user_num2 != rand_num2:
    print("you guessed one digit right.  you win $1,000!")
elif user_num2 == rand_num1 and user_num1 != rand_num2:
    print("you guessed one digit right.  you win $1,000!")
elif user_num2 == rand_num2 and user_num1 != rand_num2:
    print("you guessed one digit right.  you win $1,000!")
else:
    print("sorry, you didn't guess the right number.")
4

3 に答える 3

4

ここで役立つ 3 つのトリックがあります。

  1. リストは、文字列や数値と同じように比較できます。整数のリストを別の整数と比較することができ、含まれる数値が同じである場合、比較は次を返しますTrue

    >>> [1, 2] == [1, 2]
    True
    >>> [1, 3] == [1, 2]
    False
    
  2. リストを簡単に反転できます。reversed()組み込み関数を使用するか、スライス表記を使用してのストライド[start:stop:stride]を与えることができます。後者は、逆のリストも提供します。

    >>> list(reversed([1, 2]))
    [2, 1]
    >>> [1, 2][::-1]
    [2, 1]
    

    reversed()関数はイテレータを返し、それをコンストラクタに渡すことでlist()リストを取得します。

  3. 演算子を使用して、inリストのメンバーシップをテストできます。これを使用して、個々の整数が整数のリストの一部であるかどうかをテストします。

    >>> 1 in [1, 2]
    True
    >>> 3 in [1, 2]
    False
    

これら 3 つのトリックを組み合わせることで、スクリプトを再プログラムして整数を処理するために必要なすべてのツールが得られます。乱数とユーザー入力 (int()関数で整数に変換) の両方をリストに格納し、そこから作業を進めます。

10 から 99 までの1 つの整数入力を受け入れる必要がある場合は、少し複雑になります。th moduloと除算演算子を使用して、10 と 1 を分離できます。%\

ones = number % 10
tens = number // 10

divmod()関数を使用して 2 つの操作を組み合わせることができます。

tens, ones = divmod(number, 10)

これで、比較を行うための 2 つの別個の整数が再び得られました。

于 2012-09-27T07:59:46.947 に答える
0

あなたが直面している課題は、2桁の整数から別々の桁を取得する方法だと思います。数学演算子を使用して行うことが可能です。

のような数字の各桁が何を表すかを考えてみて42ください。は4「10」の数字で、2は「1」の数字です。逆に考えると役立つかもしれません。整数4とa2が別々の変数にある場合、それらをどのように単一の整数に組み立てます42か?

うまくいけば、私のヒントがあなたを助けるでしょう!あまりにも斜めになっている場合は、もう少し詳しく説明することもできますが、自分で解決できるようにしてほしいので、適切な演算子を考えればすぐに理解できると思います。使用します。

于 2012-09-27T07:29:53.910 に答える
0

わかりました、みんなの助けに感謝します。あなたの提案とヒントのおかげで、仕様に従って課題を完了することができました。

一方で、私はそれがどのように行われたかについてあまり誇りに思っていません.

ここにあります:

#imports
import random

#rules
print("guess a number.  if both digits match in the right order, you will win $10,000."\
      "\nif both digits match, but in the reversed order, you will win $3,000." \
      "\nif you match one digit in either place, you will win $1,000." \
      "\nif you don't match any digits, you do not win anything.")

#random variable
rand_num = random.randint(0,99)
print(rand_num)
#separate the digits
rand_num_tens = rand_num//10
print(rand_num_tens)
rand_num_ones = rand_num%10
print(rand_num_ones)
#reverse the random number digits
revsd_rnd_num = (rand_num_ones * 10) + rand_num_tens
print(revsd_rnd_num)

#ask user for number
user_num = int(input("guess a number between 1 and 99: "))
#separate the digits
user_num_tens = user_num//10
print(user_num_tens)
user_num_ones = user_num%10
print(user_num_ones)

#output the numbers
print("the number is, ", rand_num,"\
      \nyour number is, ", user_num, sep="")

#elif statement
if rand_num == user_num:
    print("you guessed the exact number.  you win $10,000!")
elif revsd_rnd_num == user_num:
    print("you guessed both digits but in reverse.  you win $3,000!")
elif rand_num_tens == user_num_tens:
    print("you guessed one digit right.  you win $1,000!")
elif rand_num_tens == user_num_ones:
    print("you guessed one digit right.  you win $1,000!")
elif rand_num_ones == user_num_tens:
    print("you guessed one digit right.  you win $1,000!")
elif rand_num_ones == user_num_ones:
    print("you guessed one digit right.  you win $1,000!")
else:
    print("sorry, you didn't guess the right number.")
于 2012-09-28T04:22:24.933 に答える