Python 为什么一个随机生成的数字不起作用,而我手工输入的数字却能正常工作

Python 为什么一个随机生成的数字不起作用,而我手工输入的数字却能正常工作,python,random,Python,Random,我已经创建了一个代码,它要求用户输入一个数字的数字版本,从一个数字的word版本输入一个数字 import random unit = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"] teen = ["", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "N

我已经创建了一个代码,它要求用户输入一个数字的数字版本,从一个数字的word版本输入一个数字

import random
unit = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"]
teen = ["", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"]
tenth = ["", "Ten", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]
hundreth = ["", "One Hundred", "Two Hundred", "Three Hundred", "Four Hundred", "Five Hundred", "Six Hundred", "Seven Hundred", "Eight Hundred", "Nine Hundred"]
thousandth = ["", "One Thousand", "Two Thousand", "Three Thousand", "Four Thousand", "Five Thousand", "Six Thousand", "Seven Thousand", "Eight Thousand", "Nine Thousand"]
a = 11
while a>0:
  a = a - 1
  thenumber = str(random.randint(1000,9999))
  if int(thenumber[3]) + int(thenumber[2]) > 10 or int(thenumber[3]) + int(thenumber[2]) < 20:
    teencheck = "correct"
  elif int(thenumber[3]) + int(thenumber[2]) < 11 or int(thenumber[3]) + int(thenumber[2]) > 19:
    teencheck = "wrong"
  else:
    print("not possible")
  if teencheck == "wrong":
    print(thousandth[int(thenumber[0])], hundreth[int(thenumber[1])], "and", tenth[int(thenumber[2])], unit[int(thenumber[3])])
    answer = input(print("What is this number?: "))
  else:
    print(thousandth[int(thenumber[0])], hundreth[int(thenumber[1])], "and", teen[int(thenumber[3])])
    answer = input(print("What is this number?: "))
  if answer == thenumber:
      print("Correct!")
  else:
    print("That is incorrect, unlucky")
当数字是青少年时,正确的答案仍然被认为是错误的。如果我将thenumber=strrandom.randint10009999更改为thenumber=str1111,则答案1111被认为是正确的


我不明白为什么不管我输入什么答案,随机生成的青少年号码都被认为是错误的,但如果我在代码中手动输入一个青少年号码,它会说它是正确的。

如果你打印出号码的值,你会看到打印到屏幕上的文字号码并不总是与从中返回的号码相同随机函数。例如,尝试将数字设置为3554

此数字不是青少年,您的代码将其视为青少年,因为5+4<20。我想你需要的是and而不是or

同样的事情可以用pythons子字符串语法更简洁地表示:

  if int(thenumber[2:4]) > 10 and int(thenumber[2:4]) < 20:
    teencheck = "correct"
  else:
    teencheck = "wrong"
这进一步简化了斯蒂芬·劳赫在评论中的建议

  if 10 < int(thenumber[2:4]) < 20:
    teencheck = "correct"
  else:
    teencheck = "wrong"

好的,这是有效的新代码。感谢您的回答:

teen\u check=10 if 10 < int(thenumber[2:4]) < 20: teencheck = "correct" else: teencheck = "wrong"
import random
unit = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"]
teen = ["", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"]
tenth = ["", "Ten", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]
hundreth = ["", "One Hundred", "Two Hundred", "Three Hundred", "Four Hundred", "Five Hundred", "Six Hundred", "Seven Hundred", "Eight Hundred", "Nine Hundred"]
thousandth = ["", "One Thousand", "Two Thousand", "Three Thousand", "Four Thousand", "Five Thousand", "Six Thousand", "Seven Thousand", "Eight Thousand", "Nine Thousand"]
a = 11
while a>0:
  a = a - 1
  thenumber = str(random.randint(1000,9999))
  teen_check = (10 < int(thenumber[2:4]) < 20)
  if not teen_check:
    print(thousandth[int(thenumber[0])], hundreth[int(thenumber[1])], "and", tenth[int(thenumber[2])], unit[int(thenumber[3])])
    answer = input("What is this number?: ")
  else:
    print(thousandth[int(thenumber[0])], hundreth[int(thenumber[1])], "and", teen[int(thenumber[3])])
    answer = input("What is this number?: ")
  if answer == thenumber:
      print("Correct!")
  else:
    print("That is incorrect, unlucky")