weixin_58127102 2023-07-17 18:57 采纳率: 0%
浏览 15

舒尔特方格 python设计

如何将4x4的数字隐藏显示为“*”,通过命令行输入数组坐标来翻牌(显示出来)呢

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-17 21:01
    关注
    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7513761
    • 这篇博客你也可以参考下:深度学习入门基于python的理论和实现 第四章(学习算法的实现)学习笔记
    • 除此之外, 这篇博客: python函数的参数以及*号的位置中的 4. *号的位置 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 1. 形参与实参
      很简单,直接看代码:

      def add(a, b):
          return a + b
          
          
      c = add(3, 5)
      print(c)
      

      在定义add函数中,变量a、b均为形参,函数完成工作所需的一项信息。下面调用add函数,c = add(3, 5) 将实参3、5传递给了形参a,b。

      2. 关键字参数与位置参数
      当定义的一个函数需要传递多个函数时,可以使用位置参数也可以使用关键字参数。
      位置参数:实参的顺序与形参的顺序相同,基于形参的顺序将实参形参关联。
      关键字参数:实参都由变量名和值组成,基于参数数名和值将实参形参关联。
      代码表示比较直观,先看位置参数:

      def student(name, old):
          print(f"I am {name}, {old} years old.")
      
      student("Ming", 23)
      student(23, 'Ming')
      

      运行结果:

       I am Ming, 23 years old.
       I am 23, Ming years old.
      

      调用student函数时,必须按照形参的顺序传递实参,不可以随意混乱实参的顺序。
      关键字参数:对上面的代码进行修改
      def student(name, old):
      print(f"I am {name}, {old} years old.")

      student(“Ming”, 23)
      student(old = 23, name = ‘Ming’)
      运行结果:

      I am Ming, 23 years old.
      I am Ming, 23 years old.
      

      在代码中明确指出形参对应的实参不必考虑形参的顺序。
      在编写函数时,可以给每个函数指定默认值,这样在调用时如果没有传递实参,则将默认值传递进去。上代码:

      def student(name='Tian', old=16):
          print(f"I am {name}, {old} years old.")
      
      student("Ming")  # 只指定name参数
      student(old=23, name='Ming')  # 不按顺序
      

      运行结果:

      I am Ming, 16 years old.
      I am Ming, 23 years old.
      

      强制关键字参数,在某些时候必须要求变量传输正确,可以使用强制关键字参数,在函数定义时在需要使用关键字参数的前面用*,看代码:

      def student(name1, name2, *, height1, height2):
          print(f"我叫{name1}, 身高{height1}")
          print(f"我叫{name2}, 身高{height2}")
          
          student('Ming', 'Tian', height2=56, height1=80)
      

      运行结果:

      我叫Ming, 身高80
      我叫Tian, 身高56
      

      在*号前面可以使用关键字参数或者位置参数,后面必须使用关键字参数。

      3. 传递任意数量的参数
      有时候,预先不知道函数需要接受多少个实参,这时候需要函数可以传递任意数量的参数,python可以支持任意数量的位置参数和关键字参数,先看位置参数:
      代码:

      def student(*name):
          print(name)  #打印参数
          print(type(name)) #查看name类型
      
      student('Ming', 'Tian', 'Yun')
      

      运行结果:

      ('Ming', 'Tian', 'Yun')
      <class 'tuple'>
      

      可变关键字参数实际上以元组的方式传递给函数内部的。

      def student(*name):
          print(name)
          print(type(name))
          for n in name:
              print(n)
      
      student('Ming', 'Tian', 'Yun')
      

      运行结果:

      ('Ming', 'Tian', 'Yun')
      <class 'tuple'>
      Ming
      Tian
      Yun
      

      可变关键字参数:
      在定义函数时,参数前面有两个*号表示可变关键字参数,可以支持多个关键字参数的传入。
      代码如下:

      def greet(msg, **name):
          print(msg, name['one'])
          print(msg, name['two'])
          print(name)
      
      greet('新年快乐', one='Ming', two='Yun', three='Tian')
      

      运行结果:

      新年快乐 Ming
      新年快乐 Yun
      {'one': 'Ming', 'two': 'Yun', 'three': 'Tian'}
      

      可以看出,name为一个字典,带**的参数可以支持多个键值对的输入,也可以用作为字典输入,可变关键字参数必须在位置参数之后。
      多种混合使用时参数顺序:位置参数、可变位置参数、命名关键字参数、可变关键值参数,代码如下:

      def z(a, b, c, d, *args, e, f, **kwargs):
          print(a, b, c, d, e, f)
          print(args, kwargs)
      
      z(1,2,3,4,'z','x','c',e=5, f=6, h=7, i=8, j=9)
      

      运行结果:

      1 2 3 4 5 6
      ('z', 'x', 'c') {'h': 7, 'i': 8, 'j': 9}
      

      *4. 号的位置
      *号位置后面的参数必须以关键字参数传入函数。
      下面是例子:

      def z(a, b, c, d, * ,e, f):
          print(a, b, c, d, e, f)
      
      z(1,2,3,4, e=5, f=6)
      

      在*号之后必须使用关键字参数将参数数传入函数。否则会有类似下面的错误:
      TypeError: takes 4 positional arguments but 5 positional arguments (and 1 keyword-only argument) were given

    • 以下回答由chatgpt基于相关博客总结生成:

      根据问题内容,你想设计一个舒尔特方格游戏的Python程序。在4x4的方格中,初始时所有数字都隐藏显示为“*”,通过命令行输入数组坐标的方式来翻牌(将指定坐标上的数字显示出来)。以下是实现这个功能的具体步骤和代码示例:

      步骤: 1. 创建一个4x4的二维列表,用于存储方格中的数字和状态(是否被翻牌)。 2. 使用一个循环迭代输出方格的当前状态,并在需要隐藏的数字上显示"*"。 3. 接收命令行输入的坐标,并更新对应位置的二维列表元素为对应的数字。 4. 重复步骤2和3,直到所有数字都被翻牌。

      示例代码:

      # 创建一个4x4的二维列表,并初始化为隐藏状态
      grid = [['*' for _ in range(4)] for _ in range(4)]
      
      def display_grid():
          # 循环迭代输出方格的当前状态
          for row in grid:
              print(' '.join(map(str, row)))
      
      # 循环迭代输出初始状态
      display_grid()
      
      def flip_card(row, col):
          # 检查坐标是否合法
          if row < 0 or row >= 4 or col < 0 or col >= 4:
              print("输入的坐标不合法,请重新输入")
              return
      
          # 更新对应位置的二维列表元素为对应的数字
          grid[row][col] = get_number(row, col)
      
          # 输出更新后的状态
          display_grid()
      
      def get_number(row, col):
          # TODO: 根据坐标获取对应位置的数字
          # 这里可以根据自己的需求来实现获取数字的逻辑
          return 0
      
      # 循环接收命令行输入的坐标并翻牌
      while True:
          try:
              input_str = input("请输入要翻牌的坐标(行 列,范围为0-3,以空格分隔):")
              row, col = map(int, input_str.split())
              flip_card(row, col)
          except KeyboardInterrupt:
              # 捕捉键盘中断异常,用于退出程序
              break
          except:
              # 捕捉其他异常,并提示输入格式错误
              print("输入格式错误,请重新输入")
      

      以上代码示例中只是一个初步的实现方案,你可以根据实际需求添加其他逻辑,例如生成随机数字、判断游戏结束等。希望能对你的问题有所帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 7月17日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图