返回顶部
首页 > 资讯 > 后端开发 > Python >有关Python问题的详细解说
  • 610
分享到

有关Python问题的详细解说

2023-06-15 18:06:58 610人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“有关python问题的详细解说”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有关Python问题的详细解说”吧!问题1:谁先赢?微软艾米和布拉德轮流滚动一个漂亮的六边形模

这篇文章主要讲解了“有关python问题的详细解说”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有关Python问题的详细解说”吧!

问题1:谁先赢?微软

艾米和布拉德轮流滚动一个漂亮的六边形模具。谁先掷出" 6"赢得比赛。艾米首先滚动。艾米获胜的机率是多少?

(1) 思路

这是一个核心的模拟问题,没有比模拟大量过程并检查Amy获胜的可能性更好的方法了。

艾米滚第一。如果结果为6,则游戏结束,艾米获胜。否则,布拉德(Brad)翻牌,如果是6,则赢得比赛。如果不是,则转回艾米(Amy)。重复该过程,直到有人以6结束游戏。

在这里,关键是要了解逻辑流程:谁赢了,在什么情况下赢了。如果艾米得到6分,布拉德必须投掷吗?没有。

(2) 解题

import numpy as np  def who_won(die, size):          A_count = 0 # initialize A_count          B_count = 0 # initialize B_count          for i in range(size): # create an iteration                   A_6 = np.random.choice(die)  # roll the fair dice and choose a random value from 0 to 6                  if A_6 == 6:       # if A rolls a 6, then A_count adds 1.                           A_count+=1     # a side-note for Python beginners: the full expression is "A_countA_count = A_count+1."                  else:              # if the above if condition does not fullfill                          B_6 = np.random.choice(die)  # then, it's B's turn to roll the dice, which is a random choice from 0 to 6.                          if B_6 == 6:   # if B rolls a B, B_count adds 1.                                  B_count+=1                      return A_count/(A_count+B_count)   # return the total number of cases that A won divided by the combined number of A and B wonaka. the result is the probability that Amy wins.

检查第11行:A_6是Amy的数据分布,如果她的数据为6,则计数为+1。否则,布拉德可以掷骰子。

在最后(第25行),最终结果应该是Amy获胜的次数除以Amy和Brad获胜的总数。一个常见的错误是将A_count除以仿真总数。这是不正确的,因为当Amy和Brad都未能掷出6时,会有迭代。

让我们测试一下上述算法

np.random.seed(123)  die = [1,2,3,4,5,6]  size = 10000  who_won(die,size) view raw

0.531271015467384

事实证明,艾米(Amy)在布拉德(Brad)之前就开始滚动赢得这场比赛。艾米(Amy)在10,000次模拟中获胜的概率为53%。

有关Python问题的详细解说

> Photo by john vicente on Unsplash

问题2:每个主要公司的最大数量为69

-给定一个仅由数字6和9组成的正整数num。-返回最多可更改一个数字可得到的最大数字(6变为9,而9变为6)。https://LeetCode.com/problems/maximum-69-number/

(1) 思路

给定一个正整数,只有一种方法可以增大值,即将" 6"变成" 9",而不是相反。另外,我们必须更改最左边的6;否则,它不是最大数量。例如,我们必须将"  6996"更改为" 9996",而不是" 6999"。

我想出了这个问题的几种变体:您可以更改一次,也可以全部更改为6。

(2) 解决方法1:替换一次

# replace once def max_69_once(num):     return int(str(num).replace('6','9',1))  # test case num = 966666669 max_69_once(num)

996666669

在第3行中,我们将整数转换为字符串,然后将第一个" 6"替换为" 9";使用int()将其返回为整数。

(3) 解决方案2:全部替换

def max_69_all(num):     k = len(str(num))     return int(str(num).replace('6','9',k))  # test case num = 966666669 max_69_all(num)

999999999

对于第二种情况,我们不必指定k,因为replace()方法默认会更改所有合适的值。我出于教学目的指定了k值。这个问题的另一个变体是替换前两个或三个"  6"以使数字最大。

有关Python问题的详细解说

> Photo by Alessandro Capuzzi on Unsplash

问题3:有效的完美正方形。Facebook

-给定正整数num,编写一个函数,如果num是一个完美的平方则返回True;否则返回False。-后续操作:请勿使用任何内置库函数(例如sqrt)。

Https://leetcode.com/problems/valid-perfect-square/

(1) 思路

这非常简单:检查正整数是否具有理想的平方根,如果有正整数,则返回True,这可以分两步完成。

  • 找到平方根。

  • 检查它是否是完美的平方根。

棘手的部分是我们必须使用内置库(例如,数学,Numpy)来计算平方根,这在LeetCode上是一个简单的问题。如果我们不能使用这些库,那么它将成为更具挑战性和反复性的问题,这是LeetCode的一个中等水平的问题。

(2) 解决方案1:内置库

import math   def valid_perfect_square(num):     return int(math.sqrt(num))**2==num  # the int() method only returns the integer part and leaves out the decimal part.                                         # For perfect squares, there should be no decimal part. The equation should thus hold.  # test case  valid_perfect_square(16)

该算法轻松通过了测试案例。应当指出,我们需要使用int()方法仅获取平方根的整数部分,而忽略任何小数部分。对于完美的正方形,它不会有任何差异,因此等式成立。对于非完美的平方,方程将不成立并返回False。

(特别感谢韩琦发现错误!)

解决方案2:没有内置库和二进制搜索

# 1 find the squre root of num # 2 check if it is a perfect square number  # solution: no built-in library & binary search def valid_perfect_square(num):     if num < 2:          return True     left, right = 2, num//2       # create two pointers: left and right      while left<=right:            # while loop to constantly update left and right          x = left + (right-left)//2# take a wild guess and treat x as the starting point         xx_squared = x*x           # calculate the squared value of x         if x_squared == num:      # use the following 'if-else' statement to constantly update x_squared.             return True           # if there are the same, return True         if x_squared <num:        # if x_squared is smaller than num, left increases by 1             left= x+1          else:                     # if x_squared is bigger, right decreases by 1             right= x-1     return False                  # the while loop should continue looping until left and right converge and no common value obtained     # test case valid_perfect_square(16)

如果不允许使用任何库,则采用二进制搜索。LeetCode包含一个详细的解释(在此处),我也对此主题发表了另一篇文章(在这里)。简而言之,我们创建左右两个指针,并将这两个数字的平均值与原始数字进行比较:如果小于该数字,则增加该值;如果更大,我们减少它;或者,如果它们匹配,则返回True。

这些条件将在while循环中自动检查。

#问题4:阶乘尾随零。彭博社

给定整数n,返回n中的尾随零!

后续行动:您能否编写一种适用于对数时间复杂度的解决方案?

https://leetcode.com/problems/factorial-trailing-zeroes/

(1) 思路

这个问题有两个步骤:

  • 计算n阶乘n!

  • 计算尾随零的数量

对于第一步,我们使用while循环迭代遍历n个阶乘并停止循环直到1。对于第二步,事情变得有些棘手。

该问题要求尾随零而不是总数零。这是个很大的差异。8!是40,320,它有2个零,但只有1个尾随零。我们在计算时必须格外小心。我提出了两种解决方案。

(2) 解决方案1:向后读取字符串

# 1 calculate n! # 2 calculate the number of trailing zeros  def factorial_zeros(n):     product = n     while n > 1 :         # iteratively calculate the product         product *= (n-1)         n-=1              count = 0           for i in str(product)[::-1]:  # calculate the number of trailing zeros         if i == '0':             count+=1         else:             break     return count  factorial_zeros(20)

计算产品的第一部分是不言而喻的。对于第二部分,我们使用str()方法将乘积转换为字符串,然后向后读取:如果数字为0,则将count加1;否则为0。否则,我们将打破循环。

break命令在这里至关重要。如前所述,上述函数无需中断命令即可计算零的总数。

(3) 解决方案2:while循环

def factorial_zeros(n):     product = n     while n > 1 :          # step 1: iteratively calculate the product          product *= (n-1)         n-=1     count = 0           while product%10 == 0:   # step 2: calculate the number of trailing zeros         productproduct = product/10         count+=1              return count

第一部分与解决方案1相同,唯一的区别是我们使用while循环来计算尾随数字:对于乘积除以10的乘积,最后一位必须为0。因此,我们使用while循环不断更新while循环,直到条件不成立为止。

顺便说一句,解决方案2是我最喜欢的计算零的方法。

有关Python问题的详细解说

> Photo by Jamie Fenn on Unsplash

问题5:完美数字,亚马逊

  • 理想数字是一个正整数,它等于其正因数之和,但不包括数字本身。

  • 整数x的除数是可以将x均匀除的整数。

  • 给定整数n,如果n是完美数则返回true,否则返回false。

  • https://leetcode.com/problems/perfect-number/

(1) 思路

这个问题可以分为三个步骤:

  • 找出正因数

  • 计算总和

  • 决定:完美与否

第2步和第3步是不言而喻的,最多不超过一层。但是,棘手的部分是找到正除数。为此,我们可以采用野蛮力方法,并在从1到整数的整个序列中进行迭代。

理论上,它应该适用于一个小整数,但是如果我们运行大数,它将超过时间限制。时间效率不高。

(2) 解决方案1:暴力

#1. find the positive divisors #2. calculate the sum  #3. perfect or not   def perfect_number(num):     divisors = []     for i in range(1,num):         if num%i==0:             divisors.append(i)     if sum(divisors)==num:         return True     else:         return False          # test case 1 perfect_number(2)

此方法不适用于较大的值。您的面试官可能会要求更有效的解决方案。

(3) 解决方案2:sqrt(n)

# solution 2: sqrt(n)  def perfect_number(num):          if num<=1:         return False          divisors = set([1])          for i in range(2,int(num**0.5)+1):   # from 2 to num**0.5         if num%i==0:             divisors.add(i)             divisors.add(num//i)      return sum(divisors)==num

要找到其除数,我们不必检查最大为整数的值。例如,要找到100的除数,我们不必检查从1到100的数字。相反,我们只需要检查直到100的平方根即10,并且所有其他可用值都已经为包括在内。

这是一种最佳算法,可为我们节省大量时间。

总结

  • 在进行了数十次"实践"编码之后,最大的收获就是理解问题并将问题分为多个可操作的组件。

  • 在这些可行的部分中,总会有一个步骤使求职者绊倒。诸如"不能使用内置函数/库"之类的限制。

  • 关键是逐步编写自定义函数,并尝试避免在练习例程中尽可能多地使用内置函数。

感谢各位的阅读,以上就是“有关Python问题的详细解说”的内容了,经过本文的学习后,相信大家对有关Python问题的详细解说这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 有关Python问题的详细解说

本文链接: https://lsjlt.com/news/281307.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 有关Python问题的详细解说
    这篇文章主要讲解了“有关Python问题的详细解说”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有关Python问题的详细解说”吧!问题1:谁先赢微软艾米和布拉德轮流滚动一个漂亮的六边形模具...
    99+
    2023-06-15
  • Python有关UnicodeUTF-8GBK编码问题详解
    目录1.统一码(Unicode)2.UTF-8编码总结1.统一码(Unicode) Unicode也叫万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。对于世...
    99+
    2024-04-02
  • 详细解说关系型数据库
    目录 1、认识关系型数据库 1.1.1 什么是关系型数据库 1.1.2  实体关系模型 1.1.3  关系型数据库管理系统RDBMS 1.1.4  使用SQL语言管理数据库 1、认识关系型数据库 数据库简而言之就是数据的集合,它是由文件系...
    99+
    2016-07-24
    详细解说关系型数据库
  • Python 自动控制原理 control的详细解说
    目录传递函数输入响应系统绘图Laplace 逆变换传递函数 创建传递函数有两种方式: import control as ctrl # 方式 1 s = ctrl.tf('s')...
    99+
    2024-04-02
  • 关于Python中Inf与Nan的判断问题详解
    大家都知道 在Python 中可以用如下方式表示正负无穷: float("inf") # 正无穷 float("-inf") # 负无穷 利用 inf(infinite) 乘以 0 会得到 not-a...
    99+
    2022-06-04
    详解 Python Inf
  • Redis并发访问问题详细讲解
    目录前言什么场景需要控制并发访问并发访问的控制方法1、加入锁机制2、操作原子化小结前言 我们在使用Redis的过程中,难免会遇到并发访问及数据更新的问题。但很多场景对数据的并发修改是很敏感的,比如库存数据如果没有做好并发...
    99+
    2022-12-02
    Redis并发访问 Redis控制并发访问
  • 关于访问后端接口报404的问题——全网最详细的404错误详解
    当我们通过前端向后端发起一个请求调用后端接口时,经常会遇到404的问题。网上关于对404问题介绍的一大堆,其实404问题的本质就两点。 在介绍404问题之前先温习一个小的知识点——项目访问路径 项目访问路径:就是定位一个项目的路径,可以...
    99+
    2023-08-16
    java spring spring boot
  • 详细总结Python常见的安全问题
    目录一、输入注入二、assert 语句(Assert statements)三、计时攻击(Timing attacks)四、临时文件(Temporary files)五、使用 yam...
    99+
    2024-04-02
  • 关于后端如何解决跨域的问题说明
    目录什么是跨域请求什么是同源策略同源策略限制内容有那什么又是同源?跨域解决方案1.jsonp2.cors3.@CrossOrigin注解4.使用SpringCloud网关5.Node...
    99+
    2024-04-02
  • Mysql超详细讲解死锁问题的理解
    目录1、什么是死锁?2、Mysql出现死锁的必要条件资源独占条件请求和保持条件不剥夺条件相互获取锁条件3、 Mysql经典死锁案例3.1 建表语句3.2 初始化相关数据3.3 正常转...
    99+
    2024-04-02
  • 详解python关于多级包之间的引用问题
    首先得明确包和模块。 包:在一个目录下存在__init__.py,那么该目录就是一个包。 模块:一个.py文件就是一个模块。 我们可以通过from 包 import 模块来引入python文件,...
    99+
    2022-06-02
    python 多级包引用 python 多级包
  • C++中的堆和栈问题详细解析
    C++中的堆和栈问题详细解析在C++中,堆(Heap)和栈(Stack)是两个重要的概念,用于管理内存的分配和释放。本文将详细解析堆和栈的概念、区别以及使用时需要注意的问题,并提供具体的代码示例。堆和栈的定义堆和栈均属于计算机内存中的一部分...
    99+
    2023-10-22
    ) C++堆 ) C++栈 ) 堆和栈区别
  • 详细说明关于Java的数据库连接(JDBC)
    目录Java的数据库连接(JDBC)1、什么是JDBC2、JDBC的原理3、演示JDBC的使用4、数据库连接方式5、JDBC的查询6、SQL注入7、预处理查询7.1 查询 已解决注入...
    99+
    2024-04-02
  • php中关于token验证的相关问题详解
    目录token验证首先是为什么用?那么怎么用呢?token的组成一般 token 组成:JWT 组成:标准的组成:总结token验证 什么是token?我相信很多开发者都或多或少听过...
    99+
    2023-05-20
    php token验证 php token生成和验证 php接口验证token源码
  • Windows8系统有关节省电池电量提示详细说明
    有没有在重要会议期间或长途飞行中发现电池没电了? 即使使用的是新技术,单次充电的便携式计算机或平板电脑也只能持续这么久。 此技巧是为了充分利用电源。    下面介绍一些可以帮助你延长电脑电池寿命的方法:选...
    99+
    2022-06-04
    详细说明 节省 提示
  • C++中异常处理问题的详细解析
    C++中异常处理问题的详细解析引言:异常处理是现代编程语言中一个非常重要的概念,能够提供程序的健壮性和可读性。C++是一门强大的编程语言,也提供了异常处理的机制。本文将详细解析C++中的异常处理问题,并提供具体的代码示例。一、异常处理的概念...
    99+
    2023-10-22
    C++ 详细解析
  • 关于java中继承类的权限问题的详细介绍
    在Java中有一个比较容易忽略的问题,那就是继承类的权限与基类的权限之间的关系。因为平时在使用继承类的时候,可能很少会需要到修改基类的访问权限控制符,而是直接使用基类的访问权限控制符。如果基类有属性方法是private的,那么子类是否可以修...
    99+
    2019-09-11
    java教程 java 继承类 权限
  • 关于Python迭代器的问题有哪些
    这篇文章主要讲解了“关于Python迭代器的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“关于Python迭代器的问题有哪些”吧!第一个问题:什么是迭代器迭代器,英文  ...
    99+
    2023-06-16
  • 关于Python的面试问答题有哪些
    这篇文章主要介绍“关于Python的面试问答题有哪些”,在日常操作中,相信很多人在关于Python的面试问答题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”关于Python的面试问答题有哪些”的疑惑有所...
    99+
    2023-06-16
  • Android pdf viewer在android studio应用问题说明详解
    之前一直是做.NET开发的,最近需要弄一个新闻app,能力有限,只能借助HTML5 WebAPP+android studio来完成这项工作。 android studio主...
    99+
    2022-06-06
    Android Studio studio pdf Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作